Procházet zdrojové kódy

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

wyyay před 1 rokem
rodič
revize
a34d499747
42 změnil soubory, kde provedl 1044 přidání a 928 odebrání
  1. 5 0
      business-service/pom.xml
  2. 10 1
      business-service/src/main/java/com/ozs/entity/BaseCameraManagement.java
  3. 5 2
      business-service/src/main/java/com/ozs/entity/MsgAlarm.java
  4. 4 0
      business-service/src/main/java/com/ozs/entity/MsgAlarmFrequency.java
  5. 5 0
      business-service/src/main/java/com/ozs/entity/MsgWebPush.java
  6. 3 0
      business-service/src/main/java/com/ozs/entity/vo/BaseCameraManagementVo.java
  7. 2 2
      business-service/src/main/java/com/ozs/entity/vo/BaseCameraManagementVos.java
  8. 10 1
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmResp.java
  9. 1 0
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmVo.java
  10. 2 0
      business-service/src/main/java/com/ozs/mapper/BaseUserMapper.java
  11. 2 0
      business-service/src/main/java/com/ozs/mapper/MsgWebPushMapper.java
  12. 4 0
      business-service/src/main/java/com/ozs/service/BaseDeviceDynamicManagementService.java
  13. 2 0
      business-service/src/main/java/com/ozs/service/BaseUserService.java
  14. 2 0
      business-service/src/main/java/com/ozs/service/BaseVehicleService.java
  15. 3 0
      business-service/src/main/java/com/ozs/service/MsgWebPushService.java
  16. 78 37
      business-service/src/main/java/com/ozs/service/impl/BaseCameraManagementServiceImpl.java
  17. 81 59
      business-service/src/main/java/com/ozs/service/impl/BaseDeviceDynamicManagementServiceImpl.java
  18. 6 0
      business-service/src/main/java/com/ozs/service/impl/BaseUserServiceImpl.java
  19. 16 0
      business-service/src/main/java/com/ozs/service/impl/BaseVehicleServiceImpl.java
  20. 1 0
      business-service/src/main/java/com/ozs/service/impl/MsgAlarmServiceImpl.java
  21. 9 4
      business-service/src/main/java/com/ozs/service/impl/MsgWebPushServiceImpl.java
  22. 6 0
      business-service/src/main/resources/mapper/BaseCameraManagementMapper.xml
  23. 3 2
      business-service/src/main/resources/mapper/BaseDeviceDynamicManagementMapper.xml
  24. 10 2
      business-service/src/main/resources/mapper/BaseUserMapper.xml
  25. 17 10
      business-service/src/main/resources/mapper/MsgAlarmMapper.xml
  26. 4 0
      business-service/src/main/resources/mapper/MsgWebPushMapper.xml
  27. 2 0
      business-service/src/main/resources/mapper/VehiclePositionMapper.xml
  28. 0 16
      vehicle-admin/pom.xml
  29. 142 64
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  30. 9 44
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseVehicleController.java
  31. 34 97
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java
  32. 4 2
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysLoginInfoController.java
  33. 4 2
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysOperlogController.java
  34. 140 105
      vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java
  35. 27 6
      vehicle-admin/src/main/java/com/ozs/web/controller/system/SysDeptController.java
  36. 3 1
      vehicle-admin/src/main/java/com/ozs/web/controller/system/SysLoginController.java
  37. 0 470
      vehicle-admin/src/main/java/com/ozs/web/controller/websocket/JPushUtil.java
  38. 144 0
      vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketCommon.java
  39. 185 0
      vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketConteoller.java
  40. 57 0
      vehicle-admin/src/main/resources/application-dmdruid.yml
  41. 2 1
      vehicle-admin/src/main/resources/application.yml
  42. binární
      vehicle-admin/src/main/resources/template/baseCameraManagement.xlsx

+ 5 - 0
business-service/pom.xml

@@ -36,6 +36,11 @@
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.dm</groupId>
+            <artifactId>DmJdbcDriver18</artifactId>
+            <version>1.8</version>
+        </dependency>
 
     </dependencies>
 

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

@@ -12,6 +12,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * <p>
@@ -68,16 +69,25 @@ public class BaseCameraManagement extends BaseEntity implements Serializable {
      * 监控相机安装里程位置
      */
     private Integer installMile;
+    @TableField(exist = false)
+    @Excel(name = "监控相机安装里程位置 KM")
+    private BigDecimal installMileBD;
 
     /**
      * 监控范围开始里程位置
      */
     private Integer beginMile;
+    @TableField(exist = false)
+    @Excel(name = "监控范围开始里程位置 KM")
+    private BigDecimal beginMileBD;
 
     /**
      * 监控范围结束里程位置
      */
     private Integer endMile;
+    @TableField(exist = false)
+    @Excel(name = "监控范围结束里程位置 KM")
+    private BigDecimal endMileBD;
 
     /**
      * 监视相机经度
@@ -141,7 +151,6 @@ public class BaseCameraManagement extends BaseEntity implements Serializable {
      * 所属工务段名称
      */
     @TableField(exist = false)
-    @Excel(name = "所属工务段名称")
     private String deptName;
 
     /**

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

@@ -72,7 +72,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     /**
      * 报警级别
      */
-    @Excel(name = "报警级别")
+//    @Excel(name = "报警级别")
     private Integer alarmLevel;
 
     /**
@@ -89,6 +89,9 @@ public class MsgAlarm extends BaseEntity implements Serializable {
      * 报警病害类型(1泥石流2异物侵线 3断轨监测)
      */
     private Integer alarmType;
+    @TableField(exist = false)
+    @Excel(name = "报警病害类型")
+    private String alarmTypeStr;
 
     /**
      * 框定范围
@@ -137,7 +140,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     /**
      * 备注
      */
-    @Excel(name = "备注")
+//    @Excel(name = "备注")
     private String remark;
 
     /**

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

@@ -2,6 +2,7 @@ package com.ozs.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ozs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
@@ -43,6 +44,7 @@ public class MsgAlarmFrequency extends BaseEntity implements Serializable {
     /**
      * 报警时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date alarmTime;
 
     /**
@@ -88,6 +90,7 @@ public class MsgAlarmFrequency extends BaseEntity implements Serializable {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
@@ -98,6 +101,7 @@ public class MsgAlarmFrequency extends BaseEntity implements Serializable {
     /**
      * 修改时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
     /**

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

@@ -72,4 +72,9 @@ public class MsgWebPush extends BaseEntity {
      * 备注
      */
     private String remark;
+
+    /**
+     * 是否推送,1:推送,2:未推
+     */
+    private String online;
 }

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

@@ -4,6 +4,7 @@ import com.ozs.common.vo.PageVo;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * <p>
@@ -52,4 +53,6 @@ public class BaseCameraManagementVo extends PageVo implements Serializable {
      * 监控范围结束里程位置字符串形式
      */
     private String endMiles;
+
+    private List<Long> ids;
 }

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

@@ -59,8 +59,8 @@ public class BaseCameraManagementVos implements Serializable {
     /**
      * 所属工务段名称
      */
-    @Excel(name = "所属工务段名称")
-    private String deptName;
+//    @Excel(name = "所属工务段名称")
+//    private String deptName;
 
     /**
      * 监控相机安装里程位置

+ 10 - 1
business-service/src/main/java/com/ozs/entity/vo/MsgAlarmResp.java

@@ -22,6 +22,8 @@ public class MsgAlarmResp implements Serializable {
 
     private long id;
 
+    private String alarmId;
+
     /**
      * web,app 唯一标识-uuid
      */
@@ -38,9 +40,10 @@ public class MsgAlarmResp implements Serializable {
     private String railwayName;
 
     /**
-     * 报警病害类型(目前只有1泥石流,后续可扩展使用
+     * 报警病害类型(1泥石流2异物侵线 3断轨监测
      */
     private Integer alarmType;
+    private String alarmTypeStr;
 
     /**
      * 报警行别(1上行2下行)
@@ -72,6 +75,12 @@ public class MsgAlarmResp implements Serializable {
      * 报警是否解除 1已解除2未解除
      */
     private Integer isRelease;
+    private String  isReleaseName;
+
+    /**
+     * 解除内容
+     */
+    private String releaseContent;
 
     /**
      * 解除时间

+ 1 - 0
business-service/src/main/java/com/ozs/entity/vo/MsgAlarmVo.java

@@ -86,6 +86,7 @@ public class MsgAlarmVo extends PageVo implements Serializable {
      * 报警是否解除 1已解除2未解除
      */
     private Integer isRelease;
+    private String isReleaseName;
 
     /**
      * 用户userID

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

@@ -39,4 +39,6 @@ public interface BaseUserMapper extends BaseMapper<BaseUser> {
     List<String> getRoleName(@Param("userId")String userId);
 
     BaseUser getUserById(@Param("id")Long id);
+
+    List<String> getUserListAll();
 }

+ 2 - 0
business-service/src/main/java/com/ozs/mapper/MsgWebPushMapper.java

@@ -27,4 +27,6 @@ public interface MsgWebPushMapper extends BaseMapper<MsgWebPush> {
     int updateByPushId(MsgWebPush msgWebPush);
 
     int readAll(@Param("userId") String userId);
+
+    List<MsgWebPush> getByUserId(@Param("userId") String userId);
 }

+ 4 - 0
business-service/src/main/java/com/ozs/service/BaseDeviceDynamicManagementService.java

@@ -7,6 +7,8 @@ import com.ozs.entity.VehicleTree;
 import com.ozs.entity.vo.CameraTreeVo;
 import com.ozs.entity.vo.VehicleTreeVo;
 
+import java.util.List;
+
 /**
  * 设备动态管理表 服务类
  *
@@ -24,4 +26,6 @@ public interface BaseDeviceDynamicManagementService extends IService<BaseDeviceD
      * 编织机车树
      */
     VehicleTree vehicleTree(VehicleTreeVo vehicleTreeVo);
+
+    List<Object> getPlayInfoByTerminalCode(String terminalCode);
 }

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

@@ -21,4 +21,6 @@ public interface BaseUserService extends IService<BaseUser> {
     BaseUser getUserName(@Param("userName") String userName);
 
     List<String> getRoleName(@Param("userId")String userId);
+
+    List<String> getUserListAll();
 }

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

@@ -52,4 +52,6 @@ public interface BaseVehicleService extends IService<BaseVehicle> {
     List<BaseVehicle> vehicleListDT();
 
     AjaxResult vehicleTerminalUnmount(BaseVehicleTerminal baseTerminal);
+
+    AjaxResult removeByIdList(List<Long> ids);
 }

+ 3 - 0
business-service/src/main/java/com/ozs/service/MsgWebPushService.java

@@ -6,6 +6,7 @@ import com.ozs.entity.MsgAlarm;
 import com.ozs.entity.MsgWebPush;
 import com.ozs.entity.vo.MsgAlarmVo;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -22,4 +23,6 @@ public interface MsgWebPushService extends IService<MsgWebPush> {
     Map<String, Integer> messageMoreNum(String userId);
 
     int readAll(String userId);
+
+    List<MsgWebPush> getByUserId(String userId);
 }

+ 78 - 37
business-service/src/main/java/com/ozs/service/impl/BaseCameraManagementServiceImpl.java

@@ -21,10 +21,11 @@ import com.ozs.service.BaseRailwayManagementService;
 import com.ozs.service.BaseUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.ObjectUtils;
 
 import javax.annotation.Resource;
 import javax.validation.Validator;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -67,7 +68,7 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
      */
     @Override
     public String importBaseAccountManagement(List<BaseCameraManagementVos> accountManageList, boolean updateSupport, String userId) {
-        if (StringUtils.isNull(accountManageList) || accountManageList.size() == 0) {
+        if (StringUtils.isEmptySunhh(accountManageList) || accountManageList.size() == 0) {
             throw new ServiceException("导入相机台账列表信息不能为空!");
         }
         int successNum = 0;
@@ -80,52 +81,92 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
                 BeanUtils.copyProperties(cameraManagementVos, accountManagement);
                 // 判断相机编码是否存在
                 LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
-                if (!ObjectUtils.isEmpty(accountManagement.getCameraCode())) {
+                if (!StringUtils.isEmptySunhh(accountManagement.getCameraCode())) {
                     lw.eq(BaseCameraManagement::getCameraCode, accountManagement.getCameraCode());
                 }
                 BaseCameraManagement baseAccountManagement = baseCameraManagementMapper.selectOne(lw);
-                if (ObjectUtils.isEmpty(baseAccountManagement)) {
+                if (StringUtils.isEmptySunhh(baseAccountManagement)) {
                     BeanValidators.validateWithException(validator, accountManagement);
                     accountManagement.setUpdateBy(userId);
                     accountManagement.setCreateBy(userId);
-                    Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
-                    log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
+//                    Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
+//                    log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
 //                    if (!ObjectUtils.isEmpty(deptId)) {
-                        accountManagement.setDeptId(deptId);
-                        LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
-                        if (!ObjectUtils.isEmpty(accountManagement.getRailwayName())) {
-                            queryWrapper.eq(BaseRailwayManagement::getRailwayName, accountManagement.getRailwayName());
-                        }
-                        BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
-                        if (!ObjectUtils.isEmpty(baseRailwayManagement)) {
-                            if (!accountManagement.getBeginMile().toString().matches(PATTERN) || !accountManagement.getInstallMile().toString().matches(PATTERN) || !accountManagement.getEndMile().toString().matches(PATTERN)) {
-                                failureNum++;
-                                failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,里程位置填写格式不正确,请填写数字");
-                            } else {
-                                accountManagement.setRailwayCode(baseRailwayManagement.getRailwayCode());
-                                accountManagement.setInstallMile(accountManagement.getInstallMile() * 1000);
-                                accountManagement.setEndMile(accountManagement.getEndMile() * 1000);
-                                accountManagement.setBeginMile(accountManagement.getBeginMile() * 1000);
-                                if (accountManagement.getBeginMile() < accountManagement.getEndMile()) {
-                                    baseCameraManagementMapper.insert(accountManagement);
-                                    BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
-                                    baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
-                                    baseDeviceDynamicManagement.setUpdateBy(userId);
-                                    baseDeviceDynamicManagement.setCreateBy(userId);
-                                    baseDeviceDynamicManagementMapper.insert(baseDeviceDynamicManagement);
-                                    successNum++;
-                                    successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 导入成功");
+//                        accountManagement.setDeptId(deptId);
+                    LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+                    if (!StringUtils.isEmptySunhh(accountManagement.getRailwayName())) {
+                        queryWrapper.eq(BaseRailwayManagement::getRailwayName, accountManagement.getRailwayName());
+                    }
+                    // List<BaseRailwayManagement> list = baseRailwayManagementService.list(queryWrapper);
+                    BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+                    if (!StringUtils.isEmptySunhh(baseRailwayManagement)) {
+                        if (!accountManagement.getBeginMile().toString().matches(PATTERN) || !accountManagement.getInstallMile().toString().matches(PATTERN) || !accountManagement.getEndMile().toString().matches(PATTERN)) {
+                            failureNum++;
+                            failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,里程位置填写格式不正确,请填写数字");
+                        } else {
+                            accountManagement.setRailwayCode(baseRailwayManagement.getRailwayCode());
+                            if (!StringUtils.isEmptySunhh(accountManagement.getBeginMileBD())) {
+                                if (!accountManagement.getBeginMileBD().toString().matches(PATTERN)) {
+                                    failureNum++;
+                                    String msg = failureNum + "、监控范围开始里程位置填写格式不正确";
+                                    failureMsg.append(msg);
+                                    log.error(msg);
+                                    // return error("监控范围开始里程位置填写格式不正确");
+                                } else {
+                                    BigDecimal begin = accountManagement.getBeginMileBD().setScale(3, RoundingMode.HALF_UP);
+                                    // BigDecimal begin = BigDecimal.parseDouble(baseCameraManagement.getBeginMile().toString());
+                                    accountManagement.setBeginMile(begin.multiply(new BigDecimal("1000")).intValue());
+                                }
+                            }
+                            if (!StringUtils.isEmptySunhh(accountManagement.getInstallMileBD())) {
+                                if (!accountManagement.getInstallMileBD().toString().matches(PATTERN)) {
+                                    failureNum++;
+                                    String msg = failureNum + "、监控相机安装里程位置填写格式不正确";
+                                    failureMsg.append(msg);
+                                    log.error(msg);
+                                    // return error("监控相机安装里程位置填写格式不正确");
                                 } else {
+                                    BigDecimal install = accountManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
+                                    // double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
+                                    accountManagement.setInstallMile(install.multiply(new BigDecimal("1000")).intValue());
+                                }
+                            }
+                            if (!StringUtils.isEmptySunhh(accountManagement.getInstallMileBD())) {
+                                if (!accountManagement.getInstallMileBD().toString().matches(PATTERN)) {
                                     failureNum++;
-                                    failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,监控范围开始里程位置不能大于监控范围结束里程位置");
+                                    String msg = failureNum + "、监控范围结束里程位置填写格式不正确";
+                                    failureMsg.append(msg);
+                                    log.error(msg);
+                                    // return error("监控范围结束里程位置填写格式不正确");
+                                } else {
+                                    BigDecimal end = accountManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
+                                    // double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
+                                    accountManagement.setEndMile(end.multiply(new BigDecimal("1000")).intValue());
                                 }
                             }
-                        } else {
-                            failureNum++;
-                            String msg = failureNum + "、相机所属线路名称 " + accountManagement.getRailwayName() + "不存在, 导入失败:";
-                            failureMsg.append(msg);
-                            log.error(msg);
+//                                accountManagement.setInstallMile(accountManagement.getInstallMileBD() * 1000);
+//                                accountManagement.setEndMile(accountManagement.getEndMile() * 1000);
+//                                accountManagement.setBeginMile(accountManagement.getBeginMile() * 1000);
+                            if (accountManagement.getBeginMile() < accountManagement.getEndMile()) {
+                                baseCameraManagementMapper.insert(accountManagement);
+                                BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
+                                baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
+                                baseDeviceDynamicManagement.setUpdateBy(userId);
+                                baseDeviceDynamicManagement.setCreateBy(userId);
+                                baseDeviceDynamicManagementMapper.insert(baseDeviceDynamicManagement);
+                                successNum++;
+                                successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 导入成功");
+                            } else {
+                                failureNum++;
+                                failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,监控范围开始里程位置不能大于监控范围结束里程位置");
+                            }
                         }
+                    } else {
+                        failureNum++;
+                        String msg = failureNum + "、相机所属线路名称 " + accountManagement.getRailwayName() + "不存在, 导入失败:";
+                        failureMsg.append(msg);
+                        log.error(msg);
+                    }
 //                    } else {
 //                        failureNum++;
 //                        String msg = failureNum + "、相机所属工务段 " + accountManagement.getDeptName() + "不存在, 导入失败:";
@@ -141,7 +182,7 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
                     accountManagement.setDeptId(deptId);
                     baseCameraManagementMapper.update(accountManagement, lw);
                     LambdaQueryWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
-                    if (!ObjectUtils.isEmpty(baseAccountManagement.getCameraCode())) {
+                    if (!StringUtils.isEmptySunhh(baseAccountManagement.getCameraCode())) {
                         wrapper.eq(BaseDeviceDynamicManagement::getCameraCode, baseAccountManagement.getCameraCode());
                     }
                     BaseDeviceDynamicManagement baseDeviceDynamicManagement = baseDeviceDynamicManagementMapper.selectOne(wrapper);

+ 81 - 59
business-service/src/main/java/com/ozs/service/impl/BaseDeviceDynamicManagementServiceImpl.java

@@ -3,25 +3,19 @@ package com.ozs.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ozs.common.utils.AppendUtils;
-import com.ozs.entity.BaseDeviceDynamicManagement;
-import com.ozs.entity.BaseRailwayManagement;
-import com.ozs.entity.CameraTree;
-import com.ozs.entity.VehicleTree;
+import com.ozs.entity.*;
 import com.ozs.entity.vo.BaseCameraManagementDto;
 import com.ozs.entity.vo.BaseVehicleTerminalDto;
 import com.ozs.entity.vo.CameraTreeVo;
 import com.ozs.entity.vo.VehicleTreeVo;
-import com.ozs.mapper.BaseDeviceDynamicManagementMapper;
-import com.ozs.mapper.BaseRailwayManagementMapper;
+import com.ozs.mapper.*;
 import com.ozs.service.BaseDeviceDynamicManagementService;
+import com.ozs.service.VehiclePositionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -39,6 +33,15 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi
     @Autowired
     BaseRailwayManagementMapper railwayManagementMapper;
 
+    @Autowired
+    BaseTerminalMapper baseTerminalMapper;
+    @Autowired
+    VehiclePositionMapper vehiclePositionMapper;
+    @Autowired
+    BaseVehicleTerminalMapper baseVehicleTerminalMapper;
+    @Autowired
+    BaseVehicleMapper baseVehicleMapper;
+
     @Override
     public CameraTree cameraTree(CameraTreeVo cameraTreeVo) {
 
@@ -109,74 +112,93 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi
 
     @Override
     public VehicleTree vehicleTree(VehicleTreeVo vehicleTreeVo) {
-        // 线路
-        LambdaQueryWrapper<BaseRailwayManagement> rp = new LambdaQueryWrapper();
-        List<BaseRailwayManagement> railwayList = railwayManagementMapper.selectList(rp);
         //1 父
+        ArrayList<VehicleTree> children = new ArrayList<>();
         VehicleTree vehicleTree = VehicleTree.builder()
                 .name("机车树")
                 .code("0")
                 .flay(false)
-                .children(new ArrayList<>())
+                .children(children)
                 .build();
 
-        Map<String, VehicleTree> map = new HashMap<>();
-        List<BaseVehicleTerminalDto> list = baseDeviceDynamicManagementMapper.vehicleTreelist(vehicleTreeVo);
-        if (list.size() > 0) {
-            for (BaseVehicleTerminalDto o : list) {
+        // 符合条件的终端行驶记录信息
+        List<VehiclePosition> list = new ArrayList<>();
+
+
+        // 终端数据
+        List<BaseTerminal> baseTerminals = baseTerminalMapper.selectList(new LambdaQueryWrapper<>());
+        if (!ObjectUtils.isEmpty(baseTerminals)) {
+            for (BaseTerminal baseTerminal : baseTerminals) {
+                // 查询所有的终端在行驶记录表的最后一个数据
+                LambdaQueryWrapper<VehiclePosition> lambdaQueryWrapper = new LambdaQueryWrapper();
+                lambdaQueryWrapper.eq(VehiclePosition::getTerminalCode, baseTerminal.getTerminalCode());
+                lambdaQueryWrapper.orderByDesc(VehiclePosition::getId);
+                List<VehiclePosition> vehiclePositions = vehiclePositionMapper.selectList(lambdaQueryWrapper);
+                if (!ObjectUtils.isEmpty(vehiclePositions) && vehiclePositions.size() > 0) {
+                    list.add(vehiclePositions.get(0));
+                }
+            }
+        }
 
+        // 线路
+        List<BaseRailwayManagement> railwayList = railwayManagementMapper.selectList(new LambdaQueryWrapper());
+        if (!ObjectUtils.isEmpty(railwayList)) {
+            for (BaseRailwayManagement baseRailwayManagement : railwayList) {
+
+                //  根据线路查询当前机车行驶
                 VehicleTree build = VehicleTree.builder()
-                        .code(o.getRailwayCode())
+                        .code(baseRailwayManagement.getRailwayCode())
+                        .name(baseRailwayManagement.getRailwayName())
                         .flay(true)
                         .children(new ArrayList<>())
                         .build();
-                for (BaseRailwayManagement railway : railwayList) {
-                    if (railway.getRailwayCode().equals(build.getCode())) {
-                        build.setName(railway.getRailwayName());
-                        break;
+                if (list.size() > 0) {
+                    List<VehiclePosition> collect = list.stream().filter(vp -> vp.getRailwayCode().equals(baseRailwayManagement.getRailwayCode())).collect(Collectors.toList());
+                    if (!ObjectUtils.isEmpty(collect)) {
+                        collect.sort((o1, o2) -> o1.getTravelMile().compareTo(o2.getTravelMile()));
+                        List<VehicleTree> childrens = collect.stream().map(vp -> {
+                            LambdaQueryWrapper<BaseVehicle> lambdaQueryWrapper = new LambdaQueryWrapper();
+                            lambdaQueryWrapper.eq(BaseVehicle::getVehicleCode, vp.getVehicleCode());
+                            BaseVehicle baseVehicle = baseVehicleMapper.selectOne(lambdaQueryWrapper);
+                            return VehicleTree.builder()
+                                    .code(vp.getTerminalCode())
+                                    .name(AppendUtils.stringAppend(Integer.valueOf(vp.getTravelMile())) + "-" + (vp.getLineDir().equals("1") ? "上行" : "下行") + "-" + (ObjectUtils.isEmpty(baseVehicle) ? vp.getVehicleCode() : baseVehicle.getVehicleName()))
+                                    .flay(true)
+                                    .children(new ArrayList<>())
+                                    .build();
+                        }).collect(Collectors.toList());
+                        build.setChildren(childrens);
                     }
                 }
-                if (!vehicleTree.getChildren().stream()
-                        .map(VehicleTree::getCode)
-                        .collect(Collectors.toList())
-                        .contains(build.getCode())) {
-                    vehicleTree.getChildren().add(build);
-                    map.put(o.getRailwayCode(), build);
-                }
-                // 里程
-                String mils = AppendUtils.stringAppend(o.getTravelMile());
-                VehicleTree build1 = VehicleTree.builder()
-                        .code(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"))
-                        .name(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"))
-                        .flay(true)
-                        .mileage(o.getTravelMile())
-                        .children(new ArrayList<>())
-                        .build();
+                children.add(build);
 
+            }
+        }
 
-                if (!ObjectUtils.isEmpty(map.get(o.getRailwayCode()))) {
-                    VehicleTree vehicleTree1 = map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"));
-                    if (ObjectUtils.isEmpty(vehicleTree1)) {
-                        map.put(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"), build1);
-                        map.get(o.getRailwayCode()).getChildren().add(build1);
-                    }
-                }
 
-                // 摄像头
-                VehicleTree build2 = VehicleTree.builder()
-                        .code(o.getTerminalCode())
-                        .name(o.getTerminalCode())
-                        .flay(true)
-                        .children(new ArrayList<>())
-                        .build();
+        vehicleTree.setChildren(children);
 
+        return vehicleTree;
+    }
 
-                if (!ObjectUtils.isEmpty(map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")))) {
-                    map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")).getChildren().add(build2);
-                }
-            }
+    @Override
+    public List<Object> getPlayInfoByTerminalCode(String terminalCode) {
+        List<Object> list = new ArrayList<>();
+        LambdaQueryWrapper<VehiclePosition> lambdaQueryWrapper = new LambdaQueryWrapper();
+        lambdaQueryWrapper.eq(VehiclePosition::getTerminalCode, terminalCode);
+        lambdaQueryWrapper.orderByDesc(VehiclePosition::getId);
+        List<VehiclePosition> vehiclePositions = vehiclePositionMapper.selectList(lambdaQueryWrapper);
+        if (!ObjectUtils.isEmpty(vehiclePositions) && vehiclePositions.size() > 0) {
+            LambdaQueryWrapper<BaseRailwayManagement> lambdaQueryWrapper1 = new LambdaQueryWrapper();
+            lambdaQueryWrapper1.eq(BaseRailwayManagement::getRailwayCode, vehiclePositions.get(0).getRailwayCode());
+            BaseRailwayManagement baseRailwayManagement = railwayManagementMapper.selectOne(lambdaQueryWrapper1);
+            list.add(!ObjectUtils.isEmpty(baseRailwayManagement) ? baseRailwayManagement.getRailwayName() : "线路不存在");
+            list.add(AppendUtils.stringAppend(vehiclePositions.get(0).getTravelMile()));
+            list.add(vehiclePositions.get(0).getLineDir());
+            list.add(terminalCode);
         }
-
-        return vehicleTree;
+        list.add(100);
+        list.add(1);
+        return list;
     }
 }

+ 6 - 0
business-service/src/main/java/com/ozs/service/impl/BaseUserServiceImpl.java

@@ -72,4 +72,10 @@ public class BaseUserServiceImpl extends ServiceImpl<BaseUserMapper, BaseUser> i
     public List<String> getRoleName(String userId) {
         return baseUserMapper.getRoleName(userId);
     }
+
+    @Override
+    public List<String> getUserListAll() {
+        List<String> userIdsList = baseUserMapper.getUserListAll();
+        return userIdsList;
+    }
 }

+ 16 - 0
business-service/src/main/java/com/ozs/service/impl/BaseVehicleServiceImpl.java

@@ -23,6 +23,7 @@ import com.ozs.mapper.BaseTerminalMapper;
 import com.ozs.service.BaseVehicleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import javax.validation.Validator;
@@ -386,4 +387,19 @@ public class BaseVehicleServiceImpl extends ServiceImpl<BaseVehicleMapper, BaseV
         baseVehicleTerminalMapper.delete(wrapper);
         return AjaxResult.success();
     }
+
+    @Override
+    @Transactional
+    public AjaxResult removeByIdList(List<Long> ids) {
+        for (Long vehicleId : ids) {
+            BaseVehicle baseVehicle = baseVehicleMapper.selectById(vehicleId);
+            if (!StringUtils.isEmptySunhh(baseVehicle) && !StringUtils.isEmptySunhh(baseVehicle.getVehicleCode())) {
+                LambdaQueryWrapper<BaseVehicleTerminal> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(BaseVehicleTerminal::getVehicleCode, baseVehicle.getVehicleCode());
+                int delete = baseVehicleTerminalMapper.delete(wrapper);
+                int i = baseVehicleMapper.deleteById(vehicleId);
+            }
+        }
+        return AjaxResult.success(true);
+    }
 }

+ 1 - 0
business-service/src/main/java/com/ozs/service/impl/MsgAlarmServiceImpl.java

@@ -201,6 +201,7 @@ public class MsgAlarmServiceImpl extends ServiceImpl<MsgAlarmMapper, MsgAlarm> i
         msgAlarmVo1.setLineDirStr(baseCameraManagement.getLineDir() == 1 ? "上行" : "下行");
         msgAlarmVo1.setCameraCode(baseCameraManagement.getCameraCode());
         msgAlarmVo1.setElectricity(baseDeviceDynamicManagement.getElectricity());
+        msgAlarmVo1.setIsReleaseName(msgAlarm.getIsRelease() == 1 ? "已解除" : "未解除");
         return AjaxResult.success(msgAlarmVo1);
     }
 }

+ 9 - 4
business-service/src/main/java/com/ozs/service/impl/MsgWebPushServiceImpl.java

@@ -1,9 +1,12 @@
 package com.ozs.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
+import com.ozs.common.core.domain.entity.SysUser;
+import com.ozs.common.utils.AppendUtils;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.entity.MsgAlarm;
 import com.ozs.entity.MsgWebPush;
@@ -17,10 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -132,4 +132,9 @@ public class MsgWebPushServiceImpl extends ServiceImpl<MsgWebPushMapper, MsgWebP
     public int readAll(String userId) {
         return msgWebPushMapper.readAll(userId);
     }
+
+    @Override
+    public List<MsgWebPush> getByUserId(String userId) {
+        return msgWebPushMapper.getByUserId(userId);
+    }
 }

+ 6 - 0
business-service/src/main/resources/mapper/BaseCameraManagementMapper.xml

@@ -21,6 +21,12 @@
             <if test="endMile != null and endMile != 0">
                 and end_mile &lt;= #{endMile}
             </if>
+            <if test="ids != null and ids.size>0">
+                and a.id in
+                <foreach item="items" collection="ids" separator="," open="(" close=")" index="">
+                    #{items}
+                </foreach>
+            </if>
         </where>
     </select>
 

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

@@ -17,7 +17,8 @@
         FROM
         base_vehicle_terminal AS a ,
         (
-        select vp.*
+        select * from vehicle_position AS gb_vp where gb_vp.terminal_code in(
+        select vp.terminal_code
         from vehicle_position vp
         where not exists (
         select 1
@@ -35,7 +36,7 @@
             and df.curren_time > vp.curren_time
         </where>
         )
-        GROUP BY vp.terminal_code ) AS l
+        GROUP BY vp.terminal_code ) ) AS l
         <where>
             a.terminal_code=l.terminal_code
             <if test="railwayCode != null and railwayCode !=''">

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

@@ -72,10 +72,18 @@
         from sys_user
     </select>
     <select id="getRoleName" resultType="java.lang.String" parameterType="java.lang.String">
-        SELECT  r.role_key FROM `sys_user` u JOIN sys_user_role ur ON u.id=ur.user_id JOIN sys_role r 
-         ON ur.role_id=r.role_id WHERE u.user_id=#{userId}
+        SELECT r.role_key
+        FROM sys_user u
+                 JOIN sys_user_role ur ON u.id = ur.user_id
+                 JOIN sys_role r
+                      ON ur.role_id = r.role_id
+        WHERE u.user_id = #{userId}
     </select>
     <select id="getUserById" resultType="com.ozs.entity.BaseUser">
     select user_id userId, dept_id deptId, data_permission dataPermission,nick_name nickName,user_name userName from sys_user where id = #{id}
     </select>
+    <select id="getUserListAll" resultType="java.lang.String">
+        select user_id
+        from sys_user
+    </select>
 </mapper>

+ 17 - 10
business-service/src/main/resources/mapper/MsgAlarmMapper.xml

@@ -66,9 +66,9 @@
         <result column="frequency" property="frequency"/>
     </resultMap>
     <select id="alarmTypeCount" resultMap="AlarmStatisticMonthDtoResult">
-        SELECT sum(p.fre) as frequency,p.alarmType as alarmType
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ sum(p.fre) as frequency,p.alarmType as alarmType
         from
-        (SELECT
+        (SELECT /*+ GROUP_OPT_FLAG(1)*/
         a.alarm_type as alarmType,
         count(DISTINCT a.alarm_id) as fre
         FROM
@@ -91,10 +91,11 @@
         group by a.alarm_id) AS p group by p.alarmType
     </select>
     <select id="listDtoMonth" resultMap="AlarmStatisticMonthDtoResult">
-        SELECT p.monthsta as monthsta,sum(p.fre) as frequency,p.monthstaString as monthstaString
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ p.monthsta as monthsta,sum(p.fre) as frequency,p.monthstaString as monthstaString
         from
-        (SELECT
-        DATE_FORMAT(a.alarm_time,'%Y年%m月') as monthstaString,
+        (SELECT /*+ GROUP_OPT_FLAG(1)*/
+        translate(to_char(a.alarm_time, 'yyyy-mm#'),'-#','年月')
+        /*DATE_FORMAT(a.alarm_time,'%Y年%m月')*/ as monthstaString,
         MONTH(a.alarm_time) as monthsta,
         count(DISTINCT a.alarm_id) as fre
         FROM
@@ -121,7 +122,8 @@
         SELECT p.daysta as monthsta,sum(p.fre) as frequency,p.daystaString as monthstaString
         from
         (SELECT
-        DATE_FORMAT(a.alarm_time,'%Y年%m月%d日') as daystaString,
+        translate(to_char(a.alarm_time, 'yyyy-mm-dd#'),'-#','年月日')
+        /*DATE_FORMAT(a.alarm_time,'%Y年%m月%d日')*/ as daystaString,
         DAY(a.alarm_time) as daysta,
         count(DISTINCT a.alarm_id) as fre
         FROM
@@ -152,9 +154,9 @@
         <result column="frequency" property="frequency"/>
     </resultMap>
     <select id="alarmTypeAreaCount" resultMap="AlarmTypeStatisticResult">
-        SELECT railwayCode,railwayName,alarmMile,SUM(p.pre) as frequency
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ railwayCode,railwayName,alarmMile,SUM(p.pre) as frequency
         from
-        (SELECT
+        (SELECT /*+ GROUP_OPT_FLAG(1)*/
         a.railway_code as railwayCode,
         b.railway_name as railwayName,
         a.alarm_mile as alarmMile,
@@ -212,10 +214,15 @@
                 and line_dir = #{lineDir}
             </if>
             <if test="beginAlarmTime != null and beginAlarmTime != ''">
-                and date_format(alarm_time,'%Y-%m-%d %H:%i:%S') &gt;= date_format(#{beginAlarmTime},'%Y-%m-%d %H:%i:%S')
+                and TO_CHAR(alarm_time, 'YYYY-MM-DD HH24:MI:SS') &gt;= TO_CHAR(#{beginAlarmTime}, 'YYYY-MM-DD
+                HH24:MI:SS')
+                -- and date_format(alarm_time,'%Y-%m-%d %H:%i:%S') &gt;= date_format(#{beginAlarmTime},'%Y-%m-%d
+                %H:%i:%S')
             </if>
             <if test="endAlarmTime != null and endAlarmTime != ''">
-                AND date_format(alarm_time,'%Y-%m-%d %H:%i:%S') &lt;= date_format(#{endAlarmTime},'%Y-%m-%d %H:%i:%S')
+                and TO_CHAR(alarm_time, 'YYYY-MM-DD HH24:MI:SS') &lt;= TO_CHAR(#{endAlarmTime}, 'YYYY-MM-DD HH24:MI:SS')
+                -- AND date_format(alarm_time,'%Y-%m-%d %H:%i:%S') &lt;= date_format(#{endAlarmTime},'%Y-%m-%d
+                %H:%i:%S')
             </if>
         </where>
         order by  alarm_time desc

+ 4 - 0
business-service/src/main/resources/mapper/MsgWebPushMapper.xml

@@ -88,4 +88,8 @@
         </set>
         where receive_by = #{userId} and status = 1
     </update>
+
+    <select id="getByUserId" parameterType="java.lang.String" resultType="com.ozs.entity.MsgWebPush">
+        select * from msg_web_push where online = '2' and receive_by = #{userId}
+    </select>
 </mapper>

+ 2 - 0
business-service/src/main/resources/mapper/VehiclePositionMapper.xml

@@ -42,4 +42,6 @@
         </where>
         order by create_time desc
     </select>
+
+
 </mapper>

+ 0 - 16
vehicle-admin/pom.xml

@@ -35,22 +35,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
-        <!-- 极光推送 -->
-        <dependency>
-            <groupId>cn.jpush.api</groupId>
-            <artifactId>jpush-client</artifactId>
-            <version>3.3.8</version>
-        </dependency>
-        <dependency>
-            <groupId>cn.jpush.api</groupId>
-            <artifactId>jmessage-client</artifactId>
-            <version>1.1.8</version>
-        </dependency>
-        <dependency>
-            <groupId>cn.jpush.api</groupId>
-            <artifactId>jiguang-common</artifactId>
-            <version>1.1.3</version>
-        </dependency>
 
         <!-- swagger3-->
         <!--        <dependency>-->

+ 142 - 64
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -38,6 +38,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 import java.io.InputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -108,12 +110,18 @@ public class BaseCameraManagementController extends BaseController {
 //            SysDept sysDept = deptService.selectDeptById(baseCameraManagement.getDeptId());
 //            baseCameraManagement.setDeptName(sysDept.getDeptName());
             baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
-            String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-            baseCameraManagement.setInstallMiles(mils);
-            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-            baseCameraManagement.setEndMiles(end);
-            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-            baseCameraManagement.setBeginMiles(begin);
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMile())) {
+                String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
+                baseCameraManagement.setInstallMiles(mils);
+            }
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMile())) {
+                String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+                baseCameraManagement.setEndMiles(end);
+            }
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())) {
+                String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
+                baseCameraManagement.setBeginMiles(begin);
+            }
             return AjaxResult.success(baseCameraManagement);
         } else if (!StringUtils.isEmpty(isRelease) && isRelease == 2 && !StringUtils.isEmpty(cameraCode)) {
             MsgAlarm msgAlarm = msgAlarmService.selectByCameraCode(cameraCode);
@@ -181,10 +189,19 @@ public class BaseCameraManagementController extends BaseController {
                 o.setRailwayName(baseRailwayManagement.getRailwayName());
                 String mils = AppendUtils.stringAppend(o.getInstallMile());
                 o.setInstallMiles(mils);
-                String end = AppendUtils.stringAppend(o.getEndMile());
-                o.setEndMiles(end);
-                String begin = AppendUtils.stringAppend(o.getBeginMile());
-                o.setBeginMiles(begin);
+                o.setInstallMileBD(new BigDecimal(o.getInstallMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
+                String end = "";
+                if (!StringUtils.isEmptySunhh(o.getEndMile())) {
+                    end = AppendUtils.stringAppend(o.getEndMile());
+                    o.setEndMiles(end);
+                    o.setEndMileBD(new BigDecimal(o.getEndMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
+                }
+                String begin = "";
+                if (!StringUtils.isEmptySunhh(o.getBeginMile())) {
+                    begin = AppendUtils.stringAppend(o.getBeginMile());
+                    o.setBeginMiles(begin);
+                    o.setBeginMileBD(new BigDecimal(o.getBeginMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
+                }
                 o.setLineDirStr(o.getLineDir() == 1 ? "上行" : "下行");
                 o.setMilesRange(begin + "-" + end);
                 o.setLongitudeAndLatitude(o.getInstallLongitude() + "," + o.getInstallLongitude());
@@ -263,27 +280,44 @@ public class BaseCameraManagementController extends BaseController {
             idempotenceUtils.deleteIdempotence(baseCameraManagement.getCameraCode());
             return error("设备动态管理表该相机编码已存在,不能重复添加");
         }
-        if (!baseCameraManagement.getBeginMile().toString().matches(PATTERN)) {
-            return error("监控范围开始里程位置填写格式不正确");
-        } else {
-            double begin = Double.parseDouble(baseCameraManagement.getBeginMile().toString());
-            baseCameraManagement.setBeginMile((int) (begin * 1000));
-        }
-        if (!baseCameraManagement.getInstallMile().toString().matches(PATTERN)) {
-            return error("监控相机安装里程位置填写格式不正确");
-        } else {
-            double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
-            baseCameraManagement.setInstallMile((int) (install * 1000));
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMileBD())) {
+            if (!baseCameraManagement.getBeginMileBD().toString().matches(PATTERN)) {
+                return error("监控范围开始里程位置填写格式不正确");
+            } else {
+                BigDecimal begin = baseCameraManagement.getBeginMileBD().setScale(3, RoundingMode.HALF_UP);
+                // BigDecimal begin = BigDecimal.parseDouble(baseCameraManagement.getBeginMile().toString());
+                baseCameraManagement.setBeginMile(begin.multiply(new BigDecimal("1000")).intValue());
+            }
         }
-        if (!baseCameraManagement.getEndMile().toString().matches(PATTERN)) {
-            return error("监控范围结束里程位置填写格式不正确");
-        } else {
-            double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
-            baseCameraManagement.setEndMile((int) (end * 1000));
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMileBD())) {
+            if (!baseCameraManagement.getInstallMileBD().toString().matches(PATTERN)) {
+                return error("监控相机安装里程位置填写格式不正确");
+            } else {
+                BigDecimal install = baseCameraManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
+                // double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
+                baseCameraManagement.setInstallMile(install.multiply(new BigDecimal("1000")).intValue());
+            }
         }
-        if (baseCameraManagement.getBeginMile() > baseCameraManagement.getEndMile()) {
-            return error("监控范围开始里程位置不能大于监控范围结束里程位置");
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMileBD())) {
+            if (!baseCameraManagement.getEndMileBD().toString().matches(PATTERN)) {
+                return error("监控范围结束里程位置填写格式不正确");
+            } else {
+                BigDecimal end = baseCameraManagement.getEndMileBD().setScale(3, RoundingMode.HALF_UP);
+                // double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
+                baseCameraManagement.setEndMile(end.multiply(new BigDecimal("1000")).intValue());
+            }
         }
+//        Integer beginMile = 0;
+//        Integer endMile = 0;
+//        if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())){
+//            beginMile = baseCameraManagement.getBeginMile();
+//        }
+//        if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())){
+//            endMile = baseCameraManagement.getEndMile();
+//        }
+//        if (beginMile > endMile) {
+//            return error("监控范围开始里程位置不能大于监控范围结束里程位置");
+//        }
         baseCameraManagement.setCreateBy(getUserId());
         baseCameraManagement.setUpdateBy(getUserId());
         BaseDeviceDynamicManagement baseDynamicManagement = new BaseDeviceDynamicManagement();
@@ -323,27 +357,50 @@ public class BaseCameraManagementController extends BaseController {
         if (!ObjectUtils.isEmpty(cameraManagement) && !cameraManagement.getId().equals(baseCameraManagement.getId())) {
             return error("相机编码已存在,不能进行修改操作");
         }
-        if (!baseCameraManagement.getBeginMile().toString().matches(PATTERN)) {
-            return error("监控范围开始里程位置填写格式不正确");
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMileBD())) {
+            if (!baseCameraManagement.getBeginMileBD().toString().matches(PATTERN)) {
+                return error("监控范围开始里程位置填写格式不正确");
+            } else {
+                BigDecimal begin = baseCameraManagement.getBeginMileBD().setScale(3, RoundingMode.HALF_UP);
+                // BigDecimal begin = BigDecimal.parseDouble(baseCameraManagement.getBeginMile().toString());
+                baseCameraManagement.setBeginMile(begin.multiply(new BigDecimal("1000")).intValue());
+            }
         } else {
-            double begin = Double.parseDouble(baseCameraManagement.getBeginMile().toString());
-            baseCameraManagement.setBeginMile((int) (begin * 1000));
+            baseCameraManagement.setBeginMile(0);
         }
-        if (!baseCameraManagement.getInstallMile().toString().matches(PATTERN)) {
-            return error("监控相机安装里程位置填写格式不正确");
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMileBD())) {
+            if (!baseCameraManagement.getInstallMileBD().toString().matches(PATTERN)) {
+                return error("监控相机安装里程位置填写格式不正确");
+            } else {
+                BigDecimal install = baseCameraManagement.getInstallMileBD().setScale(3, RoundingMode.HALF_UP);
+                // double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
+                baseCameraManagement.setInstallMile(install.multiply(new BigDecimal("1000")).intValue());
+            }
         } else {
-            double install = Double.parseDouble(baseCameraManagement.getInstallMile().toString());
-            baseCameraManagement.setInstallMile((int) (install * 1000));
+            baseCameraManagement.setInstallMile(0);
         }
-        if (!baseCameraManagement.getEndMile().toString().matches(PATTERN)) {
-            return error("监控范围结束里程位置填写格式不正确");
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMileBD())) {
+            if (!baseCameraManagement.getEndMileBD().toString().matches(PATTERN)) {
+                return error("监控范围结束里程位置填写格式不正确");
+            } else {
+                BigDecimal end = baseCameraManagement.getEndMileBD().setScale(3, RoundingMode.HALF_UP);
+                // double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
+                baseCameraManagement.setEndMile(end.multiply(new BigDecimal("1000")).intValue());
+            }
         } else {
-            double end = Double.parseDouble(baseCameraManagement.getEndMile().toString());
-            baseCameraManagement.setEndMile((int) (end * 1000));
-        }
-        if (baseCameraManagement.getBeginMile() > baseCameraManagement.getEndMile()) {
-            return error("监控范围开始里程位置不能大于监控范围结束里程位置");
+            baseCameraManagement.setEndMile(0);
         }
+//        Integer beginMile = 0;
+//        Integer endMile = 0;
+//        if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())){
+//            beginMile = baseCameraManagement.getBeginMile();
+//        }
+//        if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())){
+//            endMile = baseCameraManagement.getEndMile();
+//        }
+//        if (beginMile > endMile) {
+//            return error("监控范围开始里程位置不能大于监控范围结束里程位置");
+//        }
         baseCameraManagement.setUpdateBy(getUserId());
         LambdaQueryWrapper<BaseDeviceDynamicManagement> queryWrapper = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
         BaseCameraManagement management = baseCameraManagementService.getById(baseCameraManagement.getId());
@@ -374,20 +431,28 @@ public class BaseCameraManagementController extends BaseController {
 //        SysDept sysDept = deptService.selectDeptById(baseCameraManagement.getDeptId());
 //        baseCameraManagement.setDeptName(sysDept.getDeptName());
         baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
-        String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-        baseCameraManagement.setInstallMiles(mils);
-        String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-        baseCameraManagement.setEndMiles(end);
-        String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-        baseCameraManagement.setBeginMiles(begin);
         if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMile())) {
-            baseCameraManagement.setInstallMile(baseCameraManagement.getInstallMile()/1000);
+            String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
+            baseCameraManagement.setInstallMiles(mils);
+        }
+        String end = "";
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())) {
+            end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+            baseCameraManagement.setEndMiles(end);
+        }
+        String begin = "";
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())) {
+            begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
+            baseCameraManagement.setBeginMiles(begin);
+        }
+        if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMile())) {
+            baseCameraManagement.setInstallMileBD(new BigDecimal(baseCameraManagement.getInstallMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
         }
         if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())) {
-            baseCameraManagement.setBeginMile(baseCameraManagement.getBeginMile()/1000);
+            baseCameraManagement.setBeginMileBD(new BigDecimal(baseCameraManagement.getBeginMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
         }
         if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())) {
-            baseCameraManagement.setEndMile(baseCameraManagement.getEndMile()/1000);
+            baseCameraManagement.setEndMileBD(new BigDecimal(baseCameraManagement.getEndMile()).divide(new BigDecimal(1000)).setScale(3, RoundingMode.HALF_UP));
         }
         baseCameraManagement.setLineDirStr(baseCameraManagement.getLineDir() == 1 ? "上行" : "下行");
         baseCameraManagement.setMilesRange(begin + "-" + end);
@@ -397,6 +462,7 @@ public class BaseCameraManagementController extends BaseController {
 
     /**
      * ***********************   弃用   ***********************
+     *
      * @param cameraCode
      * @return
      */
@@ -490,12 +556,20 @@ public class BaseCameraManagementController extends BaseController {
             }
             BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
             baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
-            String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-            baseCameraManagement.setInstallMiles(mils);
-            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-            baseCameraManagement.setEndMiles(end);
-            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-            baseCameraManagement.setBeginMiles(begin);
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getInstallMile())) {
+                String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
+                baseCameraManagement.setInstallMiles(mils);
+            }
+            String end = "";
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())) {
+                end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+                baseCameraManagement.setEndMiles(end);
+            }
+            String begin = "";
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())) {
+                begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
+                baseCameraManagement.setBeginMiles(begin);
+            }
         }
         ExcelUtil<BaseCameraManagement> util = new ExcelUtil<>(BaseCameraManagement.class);
         util.exportExcel(response, baseCameraManagementList, "台账管理相机数据");
@@ -529,8 +603,6 @@ public class BaseCameraManagementController extends BaseController {
         return new AjaxResult(200, "ok", CameraUtil.getPlayFlv(cameraCode, one.getChannel()));
     }
 
-
-
     @ApiOperation("视频邀约")
     @GetMapping("/api/invite/{cameraCode}")
     @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
@@ -543,7 +615,7 @@ public class BaseCameraManagementController extends BaseController {
         }
         return new AjaxResult(200, "ok", CameraUtil.invite(cameraCode, one.getChannel()));
     }
-    
+
 
     @ApiOperation("查询录像")
     @GetMapping("/api/records/{cameraCode}/{flay}")
@@ -564,7 +636,7 @@ public class BaseCameraManagementController extends BaseController {
     @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
     public AjaxResult apiRecordsList(@RequestBody
                                      @NotNull(message = "相机编码不能为空")
-                                             List<String> cameraCodes) {
+                                     List<String> cameraCodes) {
         List<String> list = new ArrayList<>();
         for (String cameraCode : cameraCodes) {
             LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
@@ -783,8 +855,14 @@ public class BaseCameraManagementController extends BaseController {
             BeanUtils.copyProperties(baseCameraManagement, msgAlarmResp);
             msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
             msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
-            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+            String begin = "";
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getBeginMile())) {
+                begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
+            }
+            String end = "";
+            if (!StringUtils.isEmptySunhh(baseCameraManagement.getEndMile())) {
+                end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
+            }
             String endMile = "[" + begin + "]-[" + end + "]";
             msgAlarmResp.setBeginMile(endMile);
             String mile = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());

+ 9 - 44
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseVehicleController.java

@@ -15,11 +15,7 @@ import com.ozs.common.utils.HeartbeatUtils;
 import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.file.FileUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
-import com.ozs.entity.BaseCameraManagement;
-import com.ozs.entity.BaseRailwayManagement;
-import com.ozs.entity.BaseVehicleTerminal;
-import com.ozs.entity.BaseVehicle;
-import com.ozs.entity.VehicleTree;
+import com.ozs.entity.*;
 import com.ozs.entity.vo.BaseRailwayManagementVo;
 import com.ozs.entity.vo.BaseVehicleTerminalVo;
 import com.ozs.entity.vo.BaseVehicleVo;
@@ -218,12 +214,7 @@ public class BaseVehicleController extends BaseController {
         if (StringUtils.isEmptySunhh(ids)) {
             return AjaxResult.error("删除ID不能为空!");
         }
-        boolean delete = baseVehicleService.removeByIds(ids);
-        if (delete) {
-            return AjaxResult.success();
-        } else {
-            return AjaxResult.error();
-        }
+        return baseVehicleService.removeByIdList(ids);
     }
 
     /**
@@ -288,9 +279,6 @@ public class BaseVehicleController extends BaseController {
     @PostMapping("/vehicleTree")
     @Log(title = "首页机车列表", businessType = BusinessType.SELECT)
     public AjaxResult vehicleTree(@RequestBody VehicleTreeVo vehicleTreeVo) {
-
-        vehicleTreeVo = (VehicleTreeVo) dataScoreUtil.setDataScore(getUserId(), vehicleTreeVo);
-        int count = 0;
         if (!ObjectUtils.isEmpty(vehicleTreeVo.getMils())) {
             vehicleTreeVo.setMils(vehicleTreeVo.getMils() * 1000);
         }
@@ -306,38 +294,15 @@ public class BaseVehicleController extends BaseController {
                 return substring1.compareTo(substring2);
             }
         });
+        return success(vehicleTree);
+    }
 
+    @GetMapping("/getDate/{terminalCode}")
+    @ApiOperation("视频上方显示的数据")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult getDate(@PathVariable String terminalCode) {
 
-        for (VehicleTree child : children) {
-            List<VehicleTree> children1 = child.getChildren();
-            children1.sort(new Comparator<VehicleTree>() {
-                @Override
-                public int compare(VehicleTree o1, VehicleTree o2) {
-                    int i = o1.getMileage() - o2.getMileage();
-                    if (i == 0) {
-                        String[] split = o1.getName().split("-");
-                        return "上行".equals(split[1]) ? -1 : 1;
-                    } else {
-                        return i;
-                    }
-                }
-            });
-            for (VehicleTree tree : children1) {
-                List<VehicleTree> children2 = tree.getChildren();
-                if (children2.size() < 2) {
-                    String code = children2.get(0).getCode();
-                    tree.setCode(code);
-                    children2.remove(0);
-                } else {
-                    for (VehicleTree vehicleTree1 : children2) {
-                        count = count + 1;
-                        vehicleTree1.setName("相机" + count);
-                    }
-                    count = 0;
-                }
-            }
-        }
-        return success(vehicleTree);
+        return AjaxResult.success(baseDeviceDynamicManagementService.getPlayInfoByTerminalCode(terminalCode));
     }
 
     /**

+ 34 - 97
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -30,9 +30,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -213,127 +211,66 @@ public class MsgAlarmController extends BaseController {
             msgAlarmVo.setEndMile(msgAlarmVo.getEndMile() * 1000);
         }
         List<MsgAlarm> msgAlarmList = msgAlarmService.msgAlarmList(msgAlarmVo);
-        for (MsgAlarm msgAlarm : msgAlarmList) {
-//            String[] split = msgAlarm.getImageUrl().split(";");
-//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-//            msgAlarm.setImageUrls(objects);
-//            LambdaQueryWrapper<BaseCameraManagement> cameraManagementLambdaQueryWrapper = new LambdaQueryWrapper<BaseCameraManagement>();
-//            if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
-//                cameraManagementLambdaQueryWrapper.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
-//            }
-//            BaseCameraManagement cameraManagement = baseCameraManagementService.getOne(cameraManagementLambdaQueryWrapper);
-//            LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
-//            if (!ObjectUtils.isEmpty(cameraManagement.getRailwayCode())) {
-//                queryWrapper.eq(BaseRailwayManagement::getRailwayCode, cameraManagement.getRailwayCode());
-//            }
-//            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
-//            msgAlarm.setRailwayName(baseRailwayManagement.getRailwayName());
-//            if (StringUtils.isNotEmpty(msgAlarm.getReleasedBy())) {
-//                BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
-//                msgAlarm.setReleasedByName(user.getNickName());
-//            }
-//            String mils = AppendUtils.stringAppend(cameraManagement.getInstallMile());
-//            msgAlarm.setAlarmMiles(mils);
-//            String end = AppendUtils.stringAppend(cameraManagement.getEndMile());
-//            msgAlarm.setEndMile(end);
-//            String begin = AppendUtils.stringAppend(cameraManagement.getBeginMile());
-//            msgAlarm.setBeginMile(begin);
-//            LambdaQueryWrapper<MsgAlarmFrequency> wrapper = new LambdaQueryWrapper<MsgAlarmFrequency>();
-//            if (!ObjectUtils.isEmpty(msgAlarm.getAlarmId())) {
-//                wrapper.eq(MsgAlarmFrequency::getAlarmId, msgAlarm.getAlarmId());
-//            }
-//            msgAlarm.setAlarmCount((int) msgAlarmFrequencyService.count(wrapper));
-//            msgAlarm.setLineDirName(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
-//            msgAlarm.setIsReleaseName(msgAlarm.getIsRelease() == 1 ? "已解除" : "未解除");
-//            msgAlarm.setAlarmTypeName("泥石流");
+        for (MsgAlarm o : msgAlarmList) {
+            LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<>();
+            if (!StringUtils.isEmptySunhh(o.getRailwayCode())) {
+                queryWrapper.eq(BaseRailwayManagement::getRailwayCode, o.getRailwayCode());
+            }
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+            if (!StringUtils.isEmptySunhh(baseRailwayManagement) && !StringUtils.isEmptySunhh(baseRailwayManagement.getRailwayName())) {
+                o.setRailwayName(baseRailwayManagement.getRailwayName());
+            }
+            if (StringUtils.isNotEmpty(o.getReleasedBy())) {
+                BaseUser user = baseUserService.getUser(o.getReleasedBy());
+                o.setReleasedByName(user.getNickName());
+            }
+            String mils = AppendUtils.stringAppend(o.getAlarmMile());
+            o.setAlarmMiles(mils);
+            o.setLineDirName(o.getLineDir() == 1 ? "上行" : "下行");
+            o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵线" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
+            o.setIsReleaseName(o.getIsRelease() == 1 ? "已解除" : (o.getIsRelease() == 2 ? "未解除" : "未知"));
+            List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
+            data.stream().forEach(sysDictData -> {
+                if (sysDictData.getDictValue().equals(o.getAlarmType().toString())) {
+                    o.setAlarmTypeName(sysDictData.getDictLabel());
+                }
+            });
         }
         ExcelUtil<MsgAlarm> util = new ExcelUtil<>(MsgAlarm.class);
         util.exportExcel(response, msgAlarmList, "报警信息管理");
     }
 
-    @GetMapping(value = "/getByAlarmId/{alarmId}")
-    @ApiOperation("根据报警信息ID获取详细信息-app")
-    @Log(title = "报警信息管理", businessType = BusinessType.MESSAGE)
-    public AjaxResult getByAlarmId(@PathVariable String alarmId) {
-        MsgAlarm msgAlarm = msgAlarmService.getByAlarmId(alarmId);
-        if (!ObjectUtils.isEmpty(msgAlarm)) {
-//            LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
-//            if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
-//                lw.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
-//            }
-//            BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(lw);
-//            LambdaQueryWrapper<BaseRailwayManagement> wrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
-//            if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
-//                wrapper.eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode());
-//            }
-//            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
-            MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
-//            String[] split = msgAlarm.getImageUrl().split(";");
-//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-//            msgAlarm.setImageUrls(objects);
-//            if (StringUtils.isNotEmpty(msgAlarm.getReleasedBy())) {
-//                BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
-//                msgAlarm.setReleasedByName(user.getNickName());
-//            }
-//            BeanUtils.copyProperties(msgAlarm, msgAlarmResp);
-//            msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
-//            msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
-//            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-//            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-//            String endMile = begin + "-" + end;
-//            msgAlarmResp.setBeginMile(endMile);
-//            String mile = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-//            msgAlarmResp.setAlarmMile(mile);
-//            msgAlarmResp.setInstallLongitude(baseCameraManagement.getInstallLongitude() + "," + baseCameraManagement.getInstallLatitude());
-            return AjaxResult.success(msgAlarmResp);
-        } else {
-            return success("无报警信息数据");
-        }
-    }
-
     @GetMapping(value = "/{id}")
     @ApiOperation("根据报警信息ID获取详细信息")
     @Log(title = "报警信息管理", businessType = BusinessType.MESSAGE)
     public AjaxResult getInfo(@PathVariable Long id) {
         MsgAlarm msgAlarm = msgAlarmService.getById(id);
         if (!ObjectUtils.isEmpty(msgAlarm)) {
-//            LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
-//            if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
-//                lw.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
-//            }
-//            BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(lw);
             LambdaQueryWrapper<BaseRailwayManagement> wrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
             if (!ObjectUtils.isEmpty(msgAlarm.getRailwayCode())) {
                 wrapper.eq(BaseRailwayManagement::getRailwayCode, msgAlarm.getRailwayCode());
             }
             BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
             MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
-//            String[] split = msgAlarm.getImageUrl().split(";");
-//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-//            msgAlarm.setImageUrls(objects);
-//            if (StringUtils.isNotEmpty(msgAlarm.getReleasedBy())) {
-//                BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
-//                msgAlarm.setReleasedByName(user.getNickName());
-//            }
             BeanUtils.copyProperties(msgAlarm, msgAlarmResp);
-            msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
-//            msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
-//            String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-//            String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-//            String endMile = "[" + begin + "]-[" + end + "]";
-//            msgAlarmResp.setBeginMile(endMile);
+            if (!StringUtils.isEmptySunhh(msgAlarm.getReleasedBy())) {
+                BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
+                msgAlarmResp.setReleasedByName(user.getNickName());
+            }
+            if (!StringUtils.isEmptySunhh(baseRailwayManagement) && !StringUtils.isEmptySunhh(baseRailwayManagement.getRailwayName())) {
+                msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
+            }
             String mile = AppendUtils.stringAppend(msgAlarm.getAlarmMile());
             msgAlarmResp.setAlarmMile(mile);
             msgAlarmResp.setLineDirStr(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
+            msgAlarmResp.setAlarmTypeStr(msgAlarm.getAlarmType() == 1 ? "泥石流" : (msgAlarm.getAlarmType() == 2 ? "异物侵线" : (msgAlarm.getAlarmType() == 3 ? "断轨监测" : "未知")));
+            msgAlarmResp.setIsReleaseName(msgAlarm.getIsRelease() == 1 ? "已解除" : (msgAlarm.getIsRelease() == 2 ? "未解除" : "未知"));
             List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
             data.stream().forEach(sysDictData -> {
                 if (sysDictData.getDictValue().equals(msgAlarm.getAlarmType().toString())) {
                     msgAlarmResp.setAlarmTypeName(sysDictData.getDictLabel());
                 }
             });
-//            msgAlarmResp.setInstallLongitude(msgAlarm.getInstallLongitude() + "," + baseCameraManagement.getInstallLatitude());
-//            SysDept sysDept = deptService.selectDeptById(baseCameraManagement.getDeptId());
-//            msgAlarmResp.setDeptName(sysDept.getDeptName());
             return AjaxResult.success(msgAlarmResp);
         } else {
             return success("无报警信息数据");

+ 4 - 2
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysLoginInfoController.java

@@ -71,10 +71,12 @@ public class SysLoginInfoController extends BaseController {
             wrapper.eq(SysLoginInfo::getStatus, sysLoginInfoVo.getStatus());
         }
         if (!ObjectUtils.isEmpty(sysLoginInfoVo.getStartTime())) {
-            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getStartTime()), "date_format(login_time,'%y%m%d') >= date_format('" + sysLoginInfoVo.getStartTime() + "','%y%m%d')");
+//            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getStartTime()), "date_format(login_time,'%y%m%d') >= date_format('" + sysLoginInfoVo.getStartTime() + "','%y%m%d')");
+            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getStartTime()), "to_char(login_time,'YYYYMMDD') >= to_char('" + sysLoginInfoVo.getStartTime() + "','YYYYMMDD')");
         }
         if (!ObjectUtils.isEmpty(sysLoginInfoVo.getEndTime())) {
-            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getEndTime()), "date_format(login_time,'%y%m%d') <= date_format('" + sysLoginInfoVo.getEndTime() + "','%y%m%d')");
+//            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getEndTime()), "date_format(login_time,'%y%m%d') <= date_format('" + sysLoginInfoVo.getEndTime() + "','%y%m%d')");
+            wrapper.apply(StringUtils.isNotBlank(sysLoginInfoVo.getEndTime()), "to_char(login_time,'YYYYMMDD') <= to_char('" + sysLoginInfoVo.getEndTime() + "','YYYYMMDD')");
         }
         wrapper.orderByDesc(SysLoginInfo::getLoginTime);
         IPage<SysLoginInfo> page = logininforService.page(new Page<>(sysLoginInfoVo.getPageNum(), sysLoginInfoVo.getPageSize()), wrapper);

+ 4 - 2
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysOperlogController.java

@@ -68,10 +68,12 @@ public class SysOperlogController extends BaseController {
             wrapper.like(SysOperLog::getTitle, sysOperlogVo.getTitle());
         }
         if (!ObjectUtils.isEmpty(sysOperlogVo.getStartTime())) {
-            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getStartTime()), "date_format(oper_time,'%y%m%d') >= date_format('" + sysOperlogVo.getStartTime() + "','%y%m%d')");
+//            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getStartTime()), "date_format(oper_time,'%y%m%d') >= date_format('" + sysOperlogVo.getStartTime() + "','%y%m%d')");
+            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getStartTime()), "TO_CHAR(oper_time, 'YYYYMMDD') >= TO_CHAR('" + sysOperlogVo.getStartTime() + "','YYYYMMDD')");
         }
         if (!ObjectUtils.isEmpty(sysOperlogVo.getEndTime())) {
-            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getEndTime()), "date_format(oper_time,'%y%m%d') <= date_format('" + sysOperlogVo.getEndTime() + "','%y%m%d')");
+//            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getEndTime()), "date_format(oper_time,'%y%m%d') <= date_format('" + sysOperlogVo.getEndTime() + "','%y%m%d')");
+            wrapper.apply(StringUtils.isNotBlank(sysOperlogVo.getEndTime()), "TO_CHAR(oper_time,'YYYYMMDD') <= TO_CHAR('" + sysOperlogVo.getEndTime() + "','YYYYMMDD')");
         }
         if (!ObjectUtils.isEmpty(sysOperlogVo.getBusinessType())) {
             wrapper.eq(SysOperLog::getBusinessType, sysOperlogVo.getBusinessType());

+ 140 - 105
vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java

@@ -54,6 +54,7 @@ import com.ozs.service.VehiclePositionService;
 import com.ozs.system.mapper.SysUserMapper;
 import com.ozs.web.common.Constant;
 import com.ozs.web.controller.monitor.SysUserOnlineController;
+import com.ozs.web.controller.websocket.WebSocketCommon;
 import com.ozs.web.controller.websocket.WebSocketServer;
 import com.ozs.web.core.util.CameraUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -86,6 +87,8 @@ import java.util.Map;
 public class GeoHazardMonitorTokenController {
     public static final String PATTERN = "^([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+)$";
     public static final String PATTERNS = "^[0-9]*$";
+
+    public static final String KEY = "58792429c08c43e9";
     @Resource
     private ApiTokenUtils apiTokenUtils;
     @Autowired
@@ -126,6 +129,8 @@ public class GeoHazardMonitorTokenController {
     private BaseTerminalService baseTerminalService;
     @Resource
     private SysUserMapper sysUserMapper;
+    @Autowired
+    WebSocketCommon webSocketCommon;
 
     /**
      * 获取web访问令牌
@@ -143,25 +148,25 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("resultCode", 0);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "客户端编号不能为空");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
-        }
-        if (!ObjectUtils.isEmpty(svcAddress.getGrantType())) {
-            if (!svcAddress.getGrantType().toString().matches(PATTERNS)) {
-                jsonObject.put("resultCode", 0);
-                jsonObject.put("message", "失败");
-                jsonObject.put("data", "授权类型填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
-            }
-        } else {
-            jsonObject.put("resultCode", 0);
-            jsonObject.put("message", "失败");
-            jsonObject.put("data", "授权类型不能为空");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), svcAddress.getClientSecret());
         }
         SvcAddress serviceOne = svcAddressService.getOne(lw);
         if (!ObjectUtils.isEmpty(serviceOne)) {
-            String clientSecret = SM4Utils.decryptData_ECB(serviceOne.getClientSecret(), "4370780c9a8c43e5");
+            String clientSecret = SM4Utils.decryptData_ECB(serviceOne.getClientSecret(), KEY);
             if (clientSecret.equals(svcAddress.getClientSecret())) {
+                if (!ObjectUtils.isEmpty(svcAddress.getGrantType())) {
+                    if (!svcAddress.getGrantType().toString().matches(PATTERNS)) {
+                        jsonObject.put("resultCode", 0);
+                        jsonObject.put("message", "失败");
+                        jsonObject.put("data", "授权类型填写错误");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), svcAddress.getClientSecret());
+                    }
+                } else {
+                    jsonObject.put("resultCode", 0);
+                    jsonObject.put("message", "失败");
+                    jsonObject.put("data", "授权类型不能为空");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), svcAddress.getClientSecret());
+                }
                 ArrayList<String> objects = apiTokenUtils.createGeoHazardMonitorToken(svcAddress.getGrantType().toString(), svcAddress.getClientId(), svcAddress.getClientSecret());
                 if (objects.size() > 0) {
                     RespGeoHazardMonitorVo respGeoHazardMonitorVo = new RespGeoHazardMonitorVo();
@@ -172,24 +177,24 @@ public class GeoHazardMonitorTokenController {
                     jsonObject.put("resultCode", 1);
                     jsonObject.put("message", "ok");
                     jsonObject.put("data", respGeoHazardMonitorVo);
-                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), svcAddress.getClientSecret());
                 } else {
                     jsonObject.put("resultCode", 0);
                     jsonObject.put("message", "失败");
                     jsonObject.put("data", "生成token失败");
-                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), svcAddress.getClientSecret());
                 }
             } else {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "客户端密钥错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return JSONObject.toJSONString(jsonObject);
             }
         } else {
             jsonObject.put("resultCode", 0);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "参数验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -204,27 +209,29 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             ReqMsgAlarmVo reqMsgAlarmVo = JSON.parseObject(s, ReqMsgAlarmVo.class);
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmAttr())) {
                 if (!reqMsgAlarmVo.getAlarmAttr().matches(PATTERN)) {
                     jsonObject.put("resultCode", 0);
                     jsonObject.put("message", "失败");
                     jsonObject.put("data", "你填写的报警病害属性不符合规则!!!");
-                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                 }
             }
             if (!reqMsgAlarmVo.getAlarmMile().toString().matches(PATTERNS)) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警里程位置填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (reqMsgAlarmVo.getLineDir() != 1 && reqMsgAlarmVo.getLineDir() != 2) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "行别填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmRailway())) {
@@ -235,42 +242,42 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "填写的报警线路编码不存在");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmId())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警的唯一标识不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmTime())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警时间不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (reqMsgAlarmVo.getAlarmType() < 1 || reqMsgAlarmVo.getAlarmType() > 3) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警病害类型填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (!reqMsgAlarmVo.getAlarmLevel().toString().matches(PATTERNS)) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警级别填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (reqMsgAlarmVo.getAlarmTime().toString().length() == 10) {
                 reqMsgAlarmVo.setAlarmTime(reqMsgAlarmVo.getAlarmTime() * 1000);
             }
             log.info("reqMsgAlarmVo:{}", reqMsgAlarmVo);
 
-            RespMsgAlarmVo respMsgAlarmVo = new RespMsgAlarmVo();
             LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmMile())) {
                 wrapper.le(BaseCameraManagement::getBeginMile, reqMsgAlarmVo.getAlarmMile());
                 wrapper.ge(BaseCameraManagement::getEndMile, reqMsgAlarmVo.getAlarmMile());
+                wrapper.eq(BaseCameraManagement::getLineDir, reqMsgAlarmVo.getLineDir());
             }
             List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(wrapper);
             log.info("baseCameraManagement:{}", baseCameraManagementList);
@@ -278,7 +285,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警里程位置没有可用的相机!!!");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<MsgAlarm> lw = new LambdaQueryWrapper<MsgAlarm>();
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmId())) {
@@ -306,13 +313,13 @@ public class GeoHazardMonitorTokenController {
                             jsonObject.put("resultCode", 0);
                             jsonObject.put("message", "失败");
                             jsonObject.put("data", "上传文件地址不能为空");
-                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
                         if (files1[i].fileType < 1 || files1[i].fileType > 3) {
                             jsonObject.put("resultCode", 0);
                             jsonObject.put("message", "失败");
                             jsonObject.put("data", "文件类型填写错误");
-                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
                         MsgAlarmExt msgAlarmExt = new MsgAlarmExt();
                         msgAlarmExt.setAlarmId(msgAlarm.getAlarmId());
@@ -326,6 +333,7 @@ public class GeoHazardMonitorTokenController {
                 msgAlarmVice.setRailwayCode(reqMsgAlarmVo.getAlarmRailway());
                 msgAlarmVice.setAlarmTime(new Date(reqMsgAlarmVo.getAlarmTime()));
                 msgAlarmFrequencyService.save(msgAlarmVice);
+                webSocketCommon.publish(msgAlarm);
                 for (BaseCameraManagement baseCameraManagement : baseCameraManagementList) {
                     String invite = CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
                     if ("304".equals(invite) || "200".equals(invite)) {
@@ -338,19 +346,19 @@ public class GeoHazardMonitorTokenController {
                             jsonObject.put("resultCode", 0);
                             jsonObject.put("message", "失败");
                             jsonObject.put("data", "视频录制失败:请确认流是否存在!!!");
-                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
                         if (!baseCameraManagementService.updateById(baseCameraManagement)) {
                             jsonObject.put("resultCode", 0);
                             jsonObject.put("message", "失败");
                             jsonObject.put("data", "开启录制视频失败!!!");
-                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
                     } else {
                         jsonObject.put("resultCode", 0);
                         jsonObject.put("message", "失败");
                         jsonObject.put("data", "视频邀约失败,视频中心没有该相机编码或通道编码的摄像头!!!");
-                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                     }
                 }
 
@@ -379,12 +387,12 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", null);
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -402,31 +410,33 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             ReleaseAlarmVo releaseAlarmVo = JSON.parseObject(s, ReleaseAlarmVo.class);
             if (ObjectUtils.isEmpty(releaseAlarmVo.getAlarmId())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警的唯一标识不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(releaseAlarmVo.getReleaseTime())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "解除报警时间不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(releaseAlarmVo.getReleaseContent())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "解除原因不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(releaseAlarmVo.getReleaseTime())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "解除人不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(MsgAlarm::getAlarmId, releaseAlarmVo.getAlarmId());
@@ -435,7 +445,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "不存在该报警的唯一标识的数据");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (releaseAlarmVo.getReleaseTime().toString().length() == 10) {
                 releaseAlarmVo.setReleaseTime(releaseAlarmVo.getReleaseTime() * 1000);
@@ -458,12 +468,12 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", map);
             }
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -485,33 +495,35 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
             //  1.  解密参数
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             //  2、 心跳参数
             HeartbeatVo heartbeatVo = JSON.parseObject(s, HeartbeatVo.class);
             if (ObjectUtils.isEmpty(heartbeatVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (!heartbeatVo.getCurrentMile().toString().matches(PATTERNS)) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "当前里程位置填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(heartbeatVo.getLatitude())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "当前所在纬度不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(heartbeatVo.getLongitude())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "当前所在经度不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<BaseRailwayManagement> railway = new LambdaQueryWrapper<BaseRailwayManagement>();
             if (!ObjectUtils.isEmpty(heartbeatVo.getRailwayCode())) {
@@ -522,26 +534,25 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "填写的线路编码不存在");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (heartbeatVo.getLineDir() != 1 && heartbeatVo.getLineDir() != 2) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "行别填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (!heartbeatVo.getVisualDistance().toString().matches(PATTERNS)) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "司机目视距离填写错误");
-                //  todo   请把目视距离写入到缓存(Redis)中  ,key 为终端编码+盐值  每次心跳监测都修改。
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (heartbeatVo.getSignalStrength() != 1 && heartbeatVo.getSignalStrength() != 2) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "信号强度填写错误");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             VehiclePosition vehiclePosition = new VehiclePosition();
             BeanUtils.copyProperties(heartbeatVo, vehiclePosition);
@@ -552,7 +563,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "关联表中没有改终端编码的信息");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             vehiclePosition.setTravelMile(heartbeatVo.getCurrentMile());
             vehiclePosition.setVehicleCode(baseTerminal.getVehicleCode());
@@ -597,6 +608,7 @@ public class GeoHazardMonitorTokenController {
                 queryWrapper.ge(MsgAlarm::getAlarmMile, heartbeatVo.getCurrentMile());
                 queryWrapper.le(MsgAlarm::getAlarmMile, (heartbeatVo.getCurrentMile() + 10000));
                 queryWrapper.eq(MsgAlarm::getLineDir, heartbeatVo.getLineDir());
+                queryWrapper.eq(MsgAlarm::getRailwayCode,heartbeatVo.getRailwayCode());
                 queryWrapper.orderByAsc(MsgAlarm::getAlarmMile);
                 List<MsgAlarm> list = msgAlarmService.list(queryWrapper);
                 //有报警信息的时候
@@ -642,7 +654,7 @@ public class GeoHazardMonitorTokenController {
                         jsonObject.put("resultCode", 0);
                         jsonObject.put("message", "失败");
                         jsonObject.put("data", "报警里程无可用相机");
-                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                     }
                     for (int i = 0; i < list.size(); i++) {
                         //获取剩余的报警信息
@@ -691,7 +703,7 @@ public class GeoHazardMonitorTokenController {
                             jsonObject.put("resultCode", 0);
                             jsonObject.put("message", "失败");
                             jsonObject.put("data", "报警里程无可用相机");
-                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
                     }
                     AlarmListVo[] array = listVos.toArray(new AlarmListVo[]{});
@@ -700,11 +712,23 @@ public class GeoHazardMonitorTokenController {
                     //没有报警信息的时候
                     distance = heartbeatVo.getVisualDistance() + heartbeatVo.getCurrentMile();
                     LambdaQueryWrapper<BaseCameraManagement> base = new LambdaQueryWrapper<>();
-                    base.gt(BaseCameraManagement::getInstallMile, distance);
+                    if (heartbeatVo.getLineDir() == 1) {
+                        base.gt(BaseCameraManagement::getInstallMile, distance);
+                    }
+                    if (heartbeatVo.getLineDir() == 2) {
+                        base.lt(BaseCameraManagement::getInstallMile, distance);
+                    }
                     base.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                    base.eq(BaseCameraManagement::getRailwayCode,heartbeatVo.getRailwayCode());
                     base.orderByAsc(BaseCameraManagement::getInstallMile);
                     base.last("limit 4");
                     List<BaseCameraManagement> list1 = baseCameraManagementService.list(base);
+                    if (list1.size()<=0){
+                        jsonObject.put("resultCode", 0);
+                        jsonObject.put("message", "失败");
+                        jsonObject.put("data", "没有监控里程的相机");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
+                    }
                     CameraUtil.invite(list1.get(0).getCameraCode(), list1.get(0).getChannel());
                     String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
                     twoMap.put("currentStream", flv);
@@ -719,23 +743,24 @@ public class GeoHazardMonitorTokenController {
                     respHeartbeatVo.setAlarmList(null);
                     respHeartbeatVo.setAlarmInfo(null);
                 }
+                twoMap.put("visualDistance", heartbeatVo.getVisualDistance().toString());
                 String string = JSON.toJSONString(twoMap);
-                heartbeatUtils.createHeartbeat(Constant.HERTBEA_KEY+heartbeatVo.getTerminalCode(), string);
+                heartbeatUtils.createHeartbeat(Constant.HERTBEA_KEY + heartbeatVo.getTerminalCode(), string);
                 jsonObject.put("resultCode", 1);
                 jsonObject.put("message", "ok");
                 jsonObject.put("data", respHeartbeatVo);
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             } else {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "心跳机制交互失败");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
 
     }
@@ -755,19 +780,21 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             TerminalIgnoreVo terminalIgnoreVo = JSON.parseObject(s, TerminalIgnoreVo.class);
             if (ObjectUtils.isEmpty(terminalIgnoreVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(terminalIgnoreVo.getAlarmId())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警唯一UUID不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             map.put("terminalCode", terminalIgnoreVo.getTerminalCode());
             map.put("alarmId", terminalIgnoreVo.getAlarmId());
@@ -779,7 +806,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", map);
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             TerminalIgnoreAlarm terminalIgnoreAlarm = new TerminalIgnoreAlarm();
             terminalIgnoreAlarm.setAlarmId(terminalIgnoreVo.getAlarmId());
@@ -800,12 +827,12 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", map);
             }
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -823,13 +850,15 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             CameraVo cameraVo = JSON.parseObject(s, CameraVo.class);
             if (ObjectUtils.isEmpty(cameraVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<>();
             if (!ObjectUtils.isEmpty(cameraVo.getRailwayCode())) {
@@ -843,7 +872,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "没有该线路编码或行别的相机信息");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             for (BaseCameraManagement baseCameraManagement : list) {
                 LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
@@ -855,7 +884,7 @@ public class GeoHazardMonitorTokenController {
                     jsonObject.put("resultCode", 0);
                     jsonObject.put("message", "失败");
                     jsonObject.put("data", "没有该线路编码的线路信息");
-                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                 }
                 baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
             }
@@ -885,12 +914,12 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", cameraVos);
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -909,19 +938,21 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             CameraPlayVo cameraPlayVo = JSON.parseObject(s, CameraPlayVo.class);
             if (ObjectUtils.isEmpty(cameraPlayVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(cameraPlayVo.getCameraCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "相机编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
             lw.eq(BaseCameraManagement::getCameraCode, cameraPlayVo.getCameraCode());
@@ -930,19 +961,19 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "没有该相机编码的相机");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             String flv = CameraUtil.getPlayFlvRtsp(one.getCameraCode(), one.getChannel(), false);
             map.put("url", flv);
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", map);
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -961,13 +992,15 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             CameraVo cameraVo = JSON.parseObject(s, CameraVo.class);
             if (ObjectUtils.isEmpty(cameraVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
             if (!ObjectUtils.isEmpty(cameraVo.getRailwayCode())) {
@@ -981,7 +1014,7 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "没有该报警线路或行别的报警信息");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             QueryAlarmVo queryAlarmVo = new QueryAlarmVo();
             List<RespAlarmList> listVos = new ArrayList<>();
@@ -1014,12 +1047,12 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", queryAlarmVo);
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
 
@@ -1039,19 +1072,21 @@ public class GeoHazardMonitorTokenController {
         log.info("parameter:{}", parameterVo);
         JSONObject jsonObject = new JSONObject();
         if (StringUtils.isNotEmpty(token)) {
-            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "4370780c9a8c43e5");
+            String[] split = token.split("-");
+            String key = split[split.length - 1];
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), key);
             TerminalIgnoreVo terminalIgnoreVo = JSON.parseObject(s, TerminalIgnoreVo.class);
             if (ObjectUtils.isEmpty(terminalIgnoreVo.getTerminalCode())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "车载终端编码不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             if (ObjectUtils.isEmpty(terminalIgnoreVo.getAlarmId())) {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "报警唯一UUID不能为空");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
             LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(MsgAlarm::getAlarmId, terminalIgnoreVo.getAlarmId());
@@ -1060,13 +1095,13 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 0);
                 jsonObject.put("message", "失败");
                 jsonObject.put("data", "没有该报警唯一UUID的报警数据");
-                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             } else {
                 if (ObjectUtils.isEmpty(one.getReleasedUrl())) {
                     //获取报警里程所监控的所有相机
                     LambdaQueryWrapper<BaseCameraManagement> camera = new LambdaQueryWrapper<BaseCameraManagement>();
-                    camera.ge(BaseCameraManagement::getBeginMile, one.getAlarmMile());
-                    camera.le(BaseCameraManagement::getEndMile, one.getAlarmMile());
+                    camera.le(BaseCameraManagement::getBeginMile, one.getAlarmMile());
+                    camera.ge(BaseCameraManagement::getEndMile, one.getAlarmMile());
                     camera.eq(BaseCameraManagement::getLineDir, one.getLineDir());
                     camera.orderByAsc(BaseCameraManagement::getInstallMile);
                     List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
@@ -1081,7 +1116,7 @@ public class GeoHazardMonitorTokenController {
                                     one.getAlarmTime(),
                                     one.getReleasedTime(),
                                     true);
-                        }else {
+                        } else {
                             url = CameraUtil.historyPlayListStr(baseCameraManagement.getChannel(),
                                     one.getAlarmTime(),
                                     new Date(),
@@ -1093,7 +1128,7 @@ public class GeoHazardMonitorTokenController {
                         jsonObject.put("resultCode", 0);
                         jsonObject.put("message", "失败");
                         jsonObject.put("data", "没有该报警里程位置的相机");
-                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                     }
                 }
             }
@@ -1101,30 +1136,30 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", map);
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
         } else {
             jsonObject.put("resultCode", 2);
             jsonObject.put("message", "失败");
             jsonObject.put("data", "token验证失败");
-            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            return JSONObject.toJSONString(jsonObject);
         }
     }
-    
+
     @GetMapping("/test/{key}")
-    public void test(@PathVariable String key){
+    public void test(@PathVariable String key) {
         String heartbeat = heartbeatUtils.getHeartbeat(key);
-        Map maps2 = JSON.parseObject(heartbeat,Map.class);
+        Map maps2 = JSON.parseObject(heartbeat, Map.class);
         System.out.println(maps2);
     }
 
     @GetMapping("/testi")
-    public void testi(){
-        Map<String,String> map = new HashMap<>();
-        map.put("age","18");
-        map.put("name","小明");
-        map.put("gender","男");
+    public void testi() {
+        Map<String, String> map = new HashMap<>();
+        map.put("age", "18");
+        map.put("name", "小明");
+        map.put("gender", "男");
         String string = JSON.toJSONString(map);
-        heartbeatUtils.createHeartbeat("key",string);
+        heartbeatUtils.createHeartbeat("key", string);
     }
 
     private String objStr(HeartbeatVo heartbeatVoCH) {

+ 27 - 6
vehicle-admin/src/main/java/com/ozs/web/controller/system/SysDeptController.java

@@ -170,13 +170,34 @@ public class SysDeptController extends BaseController {
         return toAjax(deptService.deleteDeptById(deptId));
     }
 
-    @Log(title = "部门管理", businessType = BusinessType.EXPORT)
-    @PreAuthorize("@ss.hasPermi('system:role:export')")
-    @PostMapping("/export")
+    @Log(title = "部门导出", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dept:export')")
     @ApiOperation("部门管理")
-    public void export(HttpServletResponse response, SysDept dept) {
-        List<SysDept> list = deptService.selectDeptListAll(dept);
+    @GetMapping("/export")
+    public void export(SysDept dept, HttpServletResponse response) {
+        List<SysDept> list = forDeptList(dept);
         ExcelUtil<SysDept> util = new ExcelUtil<SysDept>(SysDept.class);
-        util.exportExcel(response, list, "角色数据");
+        util.exportExcel(response, list, "部门数据");
+    }
+
+    /**
+     * 遍历列表,给字段赋值
+     */
+    private List<SysDept> forDeptList(SysDept dept) {
+        List<SysDept> list = deptService.selectDeptListAll(dept);
+        for (SysDept sysDept : list) {
+            for (SysDept dept1 : list) {
+                if (dept1.getDeptId().equals(sysDept.getParentId())) {
+                    sysDept.setParentName(dept1.getDeptName());
+                    break;
+                }
+            }
+        }
+        for (SysDept sysDept : list) {
+            if (ObjectUtils.isEmpty(sysDept.getParentName())) {
+                sysDept.setParentName(sysDept.getDeptName());
+            }
+        }
+        return list;
     }
 }

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

@@ -10,6 +10,7 @@ import com.ozs.common.core.domain.model.LoginUser;
 import com.ozs.common.core.redis.RedisCache;
 import com.ozs.common.utils.SecurityUtils;
 import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.stateSecrets.SymmetryTest;
 import com.ozs.framework.web.service.SysLoginService;
 import com.ozs.framework.web.service.SysPermissionService;
 import com.ozs.framework.web.service.TokenService;
@@ -55,8 +56,9 @@ public class SysLoginController extends BaseController {
     @PostMapping("/login")
     public AjaxResult login(@RequestBody LoginBody loginBody) {
         AjaxResult ajax = AjaxResult.success();
+        String decrypt = SymmetryTest.decrypt(loginBody.getPassword(), "1234567890abcdef");
         // 生成令牌
-        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
+        String token = loginService.login(loginBody.getUsername(), decrypt, loginBody.getCode(),
                 loginBody.getUuid());
         ajax.put(Constants.TOKEN, token);
         LoginUser loginedUser = tokenService.getLoginedUserByToken(token);

+ 0 - 470
vehicle-admin/src/main/java/com/ozs/web/controller/websocket/JPushUtil.java

@@ -1,470 +0,0 @@
-package com.ozs.web.controller.websocket;
-
-import cn.jiguang.common.resp.APIConnectionException;
-import cn.jiguang.common.resp.APIRequestException;
-import cn.jpush.api.JPushClient;
-import cn.jpush.api.push.PushResult;
-import cn.jpush.api.push.model.Message;
-import cn.jpush.api.push.model.Options;
-import cn.jpush.api.push.model.Platform;
-import cn.jpush.api.push.model.PushPayload;
-import cn.jpush.api.push.model.audience.Audience;
-import cn.jpush.api.push.model.notification.AndroidNotification;
-import cn.jpush.api.push.model.notification.IosNotification;
-import cn.jpush.api.push.model.notification.Notification;
-import cn.jpush.api.schedule.ScheduleResult;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * @Author : sunhh
- * @create 2023/3/14 11:20
- */
-@Slf4j
-@Component
-public class JPushUtil {
-
-    private final static String APPKER = "1712ced750e33d75d18cb577";
-    private final static String MASTERSECRET = "e4b8ba2eda2acd0f75177b88";
-    // 极光demo
-    // private final static String APPKER = "2a59ed096611fb4b82f08a44";
-    // private final static String MASTERSECRET = "a121413e4b89b0a4b3998fe0";
-
-    /**
-     * 推送给设备标识参数的用户
-     */
-    public static int sendToRegistrationId(List<String> alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectAllAliasAlertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
-            PushResult pushResult = jPushClient.sendPush(pushPayload);
-            if (pushResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]PushResult result is " + pushResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 推送给指定设备标识参数的用户(自定义消息通知)
-     *
-     * @param alias              设备标识 用户ID 别名
-     * @param notification_title 通知内容标题
-     * @param msg_title          消息内容标题
-     * @param msg_content        消息内容
-     * @param extrasparam        扩展字段(通常传跳转的链接)
-     * @return 0推送失败,1推送成功
-     */
-    public static int sendToRegistrationId(String alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObject_all_alias_alertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
-            PushResult pushResult = jPushClient.sendPush(pushPayload);
-            if (pushResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]PushResult result is " + pushResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 推送给设备标识参数的用户(定时)
-     */
-    public static int sendToRegistrationId2(List<String> alias, String notification_title, String msg_title, String msg_content, String extrasparam, String time) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectAllAliasAlertWithTitle(alias, notification_title, msg_title, msg_content, extrasparam);
-            ScheduleResult scheduleResult = jPushClient.createSingleSchedule("测试", time, pushPayload);
-            if (scheduleResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]ScheduleResult result is " + scheduleResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 发送给所有安卓用户
-     */
-    public static int sendToAllAndroid(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectAndroidAllAlertWithTitle(notification_title, msg_title, msg_content, extrasparam);
-            PushResult pushResult = jPushClient.sendPush(pushPayload);
-            if (pushResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]PushResult result is " + pushResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 发送给所有IOS用户
-     */
-    public static int sendToAllIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectIosAllAlertWithTitle(notification_title, msg_title, msg_content, extrasparam);
-            PushResult pushResult = jPushClient.sendPush(pushPayload);
-            if (pushResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]PushResult result is " + pushResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 发送给所有用户
-     */
-    public static int sendToAll(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectAndroidAndIos(notification_title, msg_title, msg_content, extrasparam);
-            PushResult pushResult = jPushClient.sendPush(pushPayload);
-            if (pushResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]PushResult result is " + pushResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 发送给所有用户(定时推送)
-     */
-    public static int sendToAll2(String notification_title, String msg_title, String msg_content, String extrasparam, String time) {
-        JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKER);
-        int result = 0;
-        try {
-            PushPayload pushPayload = JPushUtil.buildPushObjectAndroidAndIos(notification_title, msg_title, msg_content, extrasparam);
-            ScheduleResult scheduleResult = jPushClient.createSingleSchedule("测试", time, pushPayload);
-            if (scheduleResult.getResponseCode() == 200) {
-                result = 1;
-            }
-            log.info("[极光推送]scheduleResult result is " + scheduleResult);
-        } catch (APIConnectionException e) {
-            log.error("[极光推送]Connection error. Should retry later. ", e);
-        } catch (APIRequestException e) {
-            log.error("[极光推送]Error response from JPush server. Should review and fix it. ", e);
-            log.info("[极光推送]HTTP Status: " + e.getStatus());
-            log.info("[极光推送]Error Code: " + e.getErrorCode());
-            log.info("[极光推送]Error Message: " + e.getErrorMessage());
-        }
-        return result;
-    }
-
-    /**
-     * 推送自定义消息 指定别名推送
-     *
-     * @param alias
-     * @param notification_title
-     * @param msg_title
-     * @param msg_content
-     * @param extrasparam
-     * @return
-     */
-    private static PushPayload buildPushObject_all_alias_alertWithTitle(String alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
-        //创建一个IosAlert对象,可指定APNs的alert、title等字段
-        //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
-        return PushPayload.newBuilder()
-                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
-                .setPlatform(Platform.all())
-                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
-                .setAudience(Audience.alias(alias))
-                //.setAudience(Audience.all()) //所有人
-                //.setAudience(Audience.registrationId(registrationId)) //注册ID
-                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
-                .setNotification(Notification.newBuilder()
-                        //指定当前推送的android通知
-                        .addPlatformNotification(AndroidNotification.newBuilder()
-                                .setAlert(msg_content)
-                                .setTitle(notification_title)
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                .build())
-                        //指定当前推送的iOS通知
-                        .addPlatformNotification(IosNotification.newBuilder()
-                                //传一个IosAlert对象,指定apns title、title、subtitle等
-                                .setAlert(msg_content)
-                                //直接传alert
-                                //此项是指定此推送的badge自动加1
-                                .incrBadge(1)
-                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
-                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
-                                .setSound("sound.caf")
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
-                                //取消此注释,消息推送时ios将无法在锁屏情况接收
-                                // .setContentAvailable(true)
-                                .build())
-                        .build())
-                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
-                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
-                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
-                .setMessage(Message.newBuilder()
-                        .setMsgContent(msg_content)
-                        .setTitle(msg_title)
-                        //.addExtra("url", extrasparam) //释放该字段会发送两次消息,第二次消息内容是扩展字段
-                        .build())
-                .setOptions(Options.newBuilder()
-                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
-                        .setApnsProduction(true)
-                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
-                        .setSendno(1)
-                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天; 秒为单位
-                        .setTimeToLive(1 * 60 * 60 * 24)
-                        .build())
-                .build();
-    }
-
-    public static PushPayload buildPushObjectAndroidAndIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        return PushPayload.newBuilder()
-                .setPlatform(Platform.android_ios())
-                .setAudience(Audience.all())
-                .setNotification(Notification.newBuilder()
-                        .setAlert(msg_content)
-                        .addPlatformNotification(AndroidNotification.newBuilder()
-                                .setAlert(msg_content)
-                                .setTitle(notification_title)
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                .build()
-                        )
-                        .addPlatformNotification(IosNotification.newBuilder()
-                                //传一个IosAlert对象,指定apns title、title、subtitle等
-                                .setAlert(msg_content)
-                                //直接传alert
-                                //此项是指定此推送的badge自动加1
-                                .incrBadge(1)
-                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
-                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
-                                .setSound("sound.caf")
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
-                                // .setContentAvailable(true)
-                                .build()
-                        )
-                        .build()
-                )
-                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
-                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
-                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
-                .setMessage(Message.newBuilder()
-                        .setMsgContent(msg_content)
-                        .setTitle(msg_title)
-                        .addExtra("url", extrasparam)
-                        .build())
-                .setOptions(Options.newBuilder()
-                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
-                        .setApnsProduction(true)
-                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
-                        .setSendno(1)
-                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
-                        .setTimeToLive(86400)
-                        .build()
-                )
-                .build();
-    }
-
-    private static PushPayload buildPushObjectAllAliasAlertWithTitle(List<String> alias, String notification_title, String msg_title, String msg_content, String extrasparam) {
-        //创建一个IosAlert对象,可指定APNs的alert、title等字段
-        //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
-        return PushPayload.newBuilder()
-                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
-                .setPlatform(Platform.all())
-                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
-                .setAudience(Audience.registrationId(alias))
-//                .setAudience(Audience.registrationId(registrationId))
-                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
-                .setNotification(Notification.newBuilder()
-                        //指定当前推送的android通知
-                        .addPlatformNotification(AndroidNotification.newBuilder()
-                                .setAlert(msg_content)
-                                .setTitle(notification_title)
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                .build())
-                        //指定当前推送的iOS通知
-                        .addPlatformNotification(IosNotification.newBuilder()
-                                //传一个IosAlert对象,指定apns title、title、subtitle等
-                                .setAlert(msg_content)
-                                //直接传alert
-                                //此项是指定此推送的badge自动加1
-                                .incrBadge(1)
-                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
-                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
-                                .setSound("sound.caf")
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
-                                //取消此注释,消息推送时ios将无法在锁屏情况接收
-                                // .setContentAvailable(true)
-                                .build())
-                        .build())
-                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
-                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
-                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
-                .setMessage(Message.newBuilder()
-                        .setMsgContent(msg_content)
-                        .setTitle(msg_title)
-                        .addExtra("url", extrasparam)
-                        .build())
-                .setOptions(Options.newBuilder()
-                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
-                        .setApnsProduction(true)
-                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
-                        .setSendno(1)
-                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
-                        .setTimeToLive(86400)
-                        .build())
-                .build();
-    }
-
-    private static PushPayload buildPushObjectAndroidAllAlertWithTitle(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        return PushPayload.newBuilder()
-                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
-                .setPlatform(Platform.android())
-                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
-                .setAudience(Audience.all())
-                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
-                .setNotification(Notification.newBuilder()
-                        //指定当前推送的android通知
-                        .addPlatformNotification(AndroidNotification.newBuilder()
-                                .setAlert(msg_content)
-                                .setTitle(notification_title)
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                .build())
-                        .build()
-                )
-                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
-                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
-                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
-                .setMessage(Message.newBuilder()
-                        .setMsgContent(msg_content)
-                        .setTitle(msg_title)
-                        .addExtra("url", extrasparam)
-                        .build())
-                .setOptions(Options.newBuilder()
-                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
-                        .setApnsProduction(true)
-                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
-                        .setSendno(1)
-                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
-                        .setTimeToLive(86400)
-                        .build())
-                .build();
-    }
-
-    private static PushPayload buildPushObjectIosAllAlertWithTitle(String notification_title, String msg_title, String msg_content, String extrasparam) {
-        return PushPayload.newBuilder()
-                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
-                .setPlatform(Platform.ios())
-                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
-                .setAudience(Audience.all())
-                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
-                .setNotification(Notification.newBuilder()
-                        //指定当前推送的android通知
-                        .addPlatformNotification(IosNotification.newBuilder()
-                                //传一个IosAlert对象,指定apns title、title、subtitle等
-                                .setAlert(msg_content)
-                                //直接传alert
-                                //此项是指定此推送的badge自动加1
-                                .incrBadge(1)
-                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
-                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
-                                .setSound("sound.caf")
-                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
-                                .addExtra("url", extrasparam)
-                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
-                                // .setContentAvailable(true)
-                                .build())
-                        .build()
-                )
-                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
-                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
-                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
-                .setMessage(Message.newBuilder()
-                        .setMsgContent(msg_content)
-                        .setTitle(msg_title)
-                        .addExtra("url", extrasparam)
-                        .build())
-                .setOptions(Options.newBuilder()
-                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
-                        .setApnsProduction(true)
-                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
-                        .setSendno(1)
-                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
-                        .setTimeToLive(86400)
-                        .build())
-                .build();
-    }
-
-//    public static void main(String[] args) {
-//        List<String> alias = new ArrayList<String>();
-//        alias.add("sunhh");
-////        alias.add("wangyy");
-//        //sendToRegistrationId(alias, "中奖通知", "中奖通知", "恭喜你中了100个亿!", "https://www.baidu.com");
-//        //sendToRegistrationId2(alias,"中奖通知", "中奖通知", "恭喜你中了100个亿!", "https://www.baidu.com","2021-07-14 17:54:00");
-////        sendToAllAndroid("中奖通知!!!!", "中奖通知!!!!!", "恭喜你中了100000000个亿!!!!", "https://www.baidu.com");
-//         sendToAllIos("中奖通知", "中奖通知", "恭喜你中了100个亿", "https://www.baidu.com");
-//         // sendToAll("中奖通知", "中奖通知", "恭喜你中了100个亿!", "https://www.baidu.com");
-//        //sendToAll2("中奖通知", "中奖通知", "恭喜你中了100个亿!", "https://www.baidu.com","2021-07-14 17:54:00");
-//    }
-}

+ 144 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketCommon.java

@@ -0,0 +1,144 @@
+package com.ozs.web.controller.websocket;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.core.domain.entity.SysUser;
+import com.ozs.common.utils.AppendUtils;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.entity.MsgAlarm;
+import com.ozs.entity.MsgWebPush;
+import com.ozs.entity.vo.MsgAlarmResp;
+import com.ozs.service.BaseRailwayManagementService;
+import com.ozs.service.BaseUserService;
+import com.ozs.service.MsgWebPushService;
+import com.ozs.system.service.ISysDictDataService;
+import com.ozs.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @Author : sunhh
+ * @create 2023/6/5 17:04
+ */
+@Slf4j
+@Component
+public class WebSocketCommon {
+
+    @Autowired
+    private WebSocketServer webSocketServer;
+    @Resource
+    private BaseRailwayManagementService baseRailwayManagementService;
+    @Autowired
+    private ISysUserService userService;
+    @Autowired
+    private MsgWebPushService msgWebPushService;
+    @Autowired
+    private BaseUserService baseUserService;
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    public Map publish(@RequestBody MsgAlarm msgAlarm) {
+        String endMile = null;
+        log.info("消息推送:" + msgAlarm.toString());
+//        LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
+//        if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
+//            wrapper.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
+//        }
+//        BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(wrapper);
+//        log.info("baseCameraManagement-----" + baseCameraManagement);
+
+//        String[] list = set.toArray(new String[set.size()]);
+//        List<String> userIdList = new ArrayList<>(set);
+        MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
+        if (!StringUtils.isEmptySunhh(msgAlarm.getEndMile()) && !StringUtils.isEmptySunhh((msgAlarm.getBeginMile()))) {
+            String begin = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getBeginMile()));
+            String end = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getEndMile()));
+            endMile = begin + "-" + end;
+            msgAlarmResp.setBeginMile(endMile);
+        }
+        msgAlarmResp.setAlarmType(msgAlarm.getAlarmType());
+        String mile = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getAlarmMile()));
+        msgAlarmResp.setAlarmMile(mile);
+//        String cameraCode = msgAlarm.getCameraCode();
+//        msgAlarmResp.setCameraCode(cameraCode);
+
+        String cameraName = baseRailwayManagementService.getCameraNameByCameraCode(msgAlarm.getRailwayCode());
+        msgAlarmResp.setRailwayName(cameraName != null ? cameraName : "");
+        msgAlarmResp.setLineDirStr(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
+        msgAlarmResp.setAlarmTime(msgAlarm.getAlarmTime() != null ? msgAlarm.getAlarmTime() : new Date());
+        // 图片
+        if (!StringUtils.isEmptySunhh(msgAlarm.getImageUrls())) {
+            msgAlarmResp.setImageUrls(msgAlarm.getImageUrls());
+        }
+        if (!StringUtils.isEmptySunhh(msgAlarm.getId())) {
+            msgAlarmResp.setId(msgAlarm.getId());
+        }
+        String userIdLogin = "admin编码";
+        SysUser user = userService.selectUserById(1L);
+        if (!ObjectUtils.isEmpty(user)) {
+            userIdLogin = user.getUserId();
+        }
+        String alarmId = msgAlarm.getAlarmId();
+        msgAlarmResp.setAlarmId(alarmId);
+
+        LambdaQueryWrapper<MsgWebPush> lwMsgWebPush = new LambdaQueryWrapper<MsgWebPush>();
+        if (!ObjectUtils.isEmpty(msgAlarm.getAlarmId())) {
+            lwMsgWebPush.eq(MsgWebPush::getAlarmId, msgAlarm.getAlarmId());
+        }
+        List<MsgWebPush> msgWebPushList = msgWebPushService.list(lwMsgWebPush);
+
+        // 获取推送人ID列表
+//        log.info("publish-----" + baseCameraManagement.getCreateBy() + "-------------" + baseCameraManagement.getDeptId());
+        List<String> usetIdList = baseUserService.getUserListAll();
+        log.info("set-----" + usetIdList);
+        if (StringUtils.isEmpty(msgWebPushList) || msgWebPushList.size() == 0) {
+            for (String userid : usetIdList) {
+                String pushId = UUID.randomUUID().toString();
+                msgAlarmResp.setPushId(pushId);
+                String content = objStr(msgAlarmResp);
+                log.info("WEBcontent-----" + content);
+                log.info("WEBuserid-----" + userid);
+                // 存入数据
+                MsgWebPush msgWebPush = new MsgWebPush();
+                // 推送消息reqMsgAlarmVo
+                boolean userOnline = webSocketServer.userOnline(userid);
+                log.info("userOnline-userOnline-userOnline-userOnline-----::::::" + userOnline);
+                if (userOnline) {
+                    webSocketServer.sendOneMessage(userid, content);
+                    msgWebPush.setOnline("1");
+                } else {
+                    // online 是否推送,1:推送,2:未推
+                    msgWebPush.setOnline("2");
+                }
+                msgWebPush.setRemark(content);
+                // 状态:1未读;2已读
+                msgWebPush.setStatus(1);
+                msgWebPush.setPushId(pushId);
+                msgWebPush.setAlarmId(alarmId);
+                msgWebPush.setReceiveBy(userid);
+                msgWebPush.setCreateBy(userIdLogin);
+                msgWebPush.setCreateTime(new Date());
+                msgWebPush.setUpdateBy(userIdLogin);
+                msgWebPush.setUpdateTime(new Date());
+                msgWebPushService.save(msgWebPush);
+            }
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("code", 200);
+        return map;
+    }
+
+    private String objStr(MsgAlarmResp msgAlarmResp) {
+        JSONObject obj = new JSONObject();
+        obj.put("data", msgAlarmResp); //data
+        obj.put("code", 110); //code
+        log.info("【websocket消息】 单点消息:" + obj.toJSONString());
+        return obj.toJSONString();
+    }
+}

+ 185 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketConteoller.java

@@ -0,0 +1,185 @@
+package com.ozs.web.controller.websocket;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.entity.SysUser;
+import com.ozs.common.utils.AppendUtils;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.entity.*;
+import com.ozs.entity.vo.MsgAlarmResp;
+import com.ozs.service.BaseRailwayManagementService;
+import com.ozs.service.BaseUserService;
+import com.ozs.service.MsgWebPushService;
+import com.ozs.system.service.ISysDictDataService;
+import com.ozs.system.service.ISysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @Author : sunhh
+ * @create 2023/6/5 15:36
+ */
+@Slf4j
+@Controller
+@RequestMapping("/sdk")
+public class WebSocketConteoller extends BaseController {
+    @Autowired
+    private WebSocketServer webSocketServer;
+    @Resource
+    private BaseRailwayManagementService baseRailwayManagementService;
+    @Autowired
+    private ISysUserService userService;
+    @Autowired
+    private MsgWebPushService msgWebPushService;
+    @Autowired
+    private BaseUserService baseUserService;
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 获取项目名称
+     */
+    @ResponseBody
+    @GetMapping("/projectName")
+    public String projectName() {
+        String projectName = dictDataService.selectDictLabel("sys_name", "name");
+//        HashMap<String, Object> map = new HashMap<>();
+//        map.put("name", projectName);
+        return projectName;
+    }
+
+    /**
+     * web 登陆时查询 未登陆时推送的消息 重新推送
+     *
+     * @return
+     */
+    @ResponseBody
+    @GetMapping("/getMessage")
+    public Map publishWeb() {
+        String userId = getUserId();
+        List<MsgWebPush> msgWebPushList = msgWebPushService.getByUserId(userId);
+        for (MsgWebPush msgWebPush : msgWebPushList) {
+            webSocketServer.sendOneMessage(userId, msgWebPush.getRemark());
+            msgWebPush.setOnline("1");
+            msgWebPushService.updateById(msgWebPush);
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("code", 200);
+        return map;
+    }
+
+    /**
+     * 推送消息
+     *
+     * @param msgAlarm
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/publish")
+    public Map publish(@RequestBody MsgAlarm msgAlarm) {
+        String endMile = null;
+        log.info("消息推送:" + msgAlarm.toString());
+//        LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
+//        if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
+//            wrapper.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
+//        }
+//        BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(wrapper);
+//        log.info("baseCameraManagement-----" + baseCameraManagement);
+
+//        String[] list = set.toArray(new String[set.size()]);
+//        List<String> userIdList = new ArrayList<>(set);
+        MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
+        if (!StringUtils.isEmptySunhh(msgAlarm.getEndMile()) && !StringUtils.isEmptySunhh((msgAlarm.getBeginMile()))) {
+            String begin = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getBeginMile()));
+            String end = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getEndMile()));
+            endMile = begin + "-" + end;
+            msgAlarmResp.setBeginMile(endMile);
+        }
+        msgAlarmResp.setAlarmType(msgAlarm.getAlarmType());
+        String mile = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getAlarmMile()));
+        msgAlarmResp.setAlarmMile(mile);
+//        String cameraCode = msgAlarm.getCameraCode();
+//        msgAlarmResp.setCameraCode(cameraCode);
+
+        String cameraName = baseRailwayManagementService.getCameraNameByCameraCode(msgAlarm.getRailwayCode());
+        msgAlarmResp.setRailwayName(cameraName != null ? cameraName : "");
+        msgAlarmResp.setLineDirStr(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
+        msgAlarmResp.setAlarmTime(msgAlarm.getAlarmTime() != null ? msgAlarm.getAlarmTime() : new Date());
+        // 图片
+        if (!StringUtils.isEmptySunhh(msgAlarm.getImageUrls())) {
+            msgAlarmResp.setImageUrls(msgAlarm.getImageUrls());
+        }
+        if (!StringUtils.isEmptySunhh(msgAlarm.getId())) {
+            msgAlarmResp.setId(msgAlarm.getId());
+        }
+        String userIdLogin = "admin编码";
+        SysUser user = userService.selectUserById(1L);
+        if (!ObjectUtils.isEmpty(user)) {
+            userIdLogin = user.getUserId();
+        }
+        String alarmId = msgAlarm.getAlarmId();
+        msgAlarmResp.setAlarmId(alarmId);
+
+        LambdaQueryWrapper<MsgWebPush> lwMsgWebPush = new LambdaQueryWrapper<MsgWebPush>();
+        if (!ObjectUtils.isEmpty(msgAlarm.getAlarmId())) {
+            lwMsgWebPush.eq(MsgWebPush::getAlarmId, msgAlarm.getAlarmId());
+        }
+        List<MsgWebPush> msgWebPushList = msgWebPushService.list(lwMsgWebPush);
+
+        // 获取推送人ID列表
+//        log.info("publish-----" + baseCameraManagement.getCreateBy() + "-------------" + baseCameraManagement.getDeptId());
+        List<String> usetIdList = baseUserService.getUserListAll();
+        log.info("set-----" + usetIdList);
+        if (StringUtils.isEmpty(msgWebPushList) || msgWebPushList.size() == 0) {
+            for (String userid : usetIdList) {
+                String pushId = UUID.randomUUID().toString();
+                msgAlarmResp.setPushId(pushId);
+                String content = objStr(msgAlarmResp);
+                log.info("WEBcontent-----" + content);
+                log.info("WEBuserid-----" + userid);
+                // 存入数据
+                MsgWebPush msgWebPush = new MsgWebPush();
+                // 推送消息reqMsgAlarmVo
+                boolean userOnline = webSocketServer.userOnline(userid);
+                log.info("userOnline-userOnline-userOnline-userOnline-----::::::" + userOnline);
+                if (userOnline) {
+                    webSocketServer.sendOneMessage(userid, content);
+                    msgWebPush.setOnline("1");
+                } else {
+                    // online 是否推送,1:推送,2:未推
+                    msgWebPush.setOnline("2");
+                }
+                msgWebPush.setRemark(content);
+                // 状态:1未读;2已读
+                msgWebPush.setStatus(1);
+                msgWebPush.setPushId(pushId);
+                msgWebPush.setAlarmId(alarmId);
+                msgWebPush.setReceiveBy(userid);
+                msgWebPush.setCreateBy(userIdLogin);
+                msgWebPush.setCreateTime(new Date());
+                msgWebPush.setUpdateBy(userIdLogin);
+                msgWebPush.setUpdateTime(new Date());
+                msgWebPushService.save(msgWebPush);
+            }
+        }
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("code", 200);
+        return map;
+    }
+
+    private String objStr(MsgAlarmResp msgAlarmResp) {
+        JSONObject obj = new JSONObject();
+        obj.put("data", msgAlarmResp); //data
+        obj.put("code", 110); //code
+        log.info("【websocket消息】 单点消息:" + obj.toJSONString());
+        return obj.toJSONString();
+    }
+}

+ 57 - 0
vehicle-admin/src/main/resources/application-dmdruid.yml

@@ -0,0 +1,57 @@
+# 数据源配置
+spring:
+    datasource:
+        type: com.alibaba.druid.pool.DruidDataSource
+        driverClassName: dm.jdbc.driver.DmDriver
+        druid:
+            # 主库数据源
+            master:
+                url: jdbc:dm://124.70.58.209:5236/vehicle
+                username: VEHICLE
+                password: VEHICLE
+            # 从库数据源
+            slave:
+                # 从数据源开关/默认关闭
+                enabled: false
+                url:
+                username:
+                password:
+            # 初始连接数
+            initialSize: 5
+            # 最小连接池数量
+            minIdle: 10
+            # 最大连接池数量
+            maxActive: 20
+            # 配置获取连接等待超时的时间
+            maxWait: 60000
+            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+            timeBetweenEvictionRunsMillis: 60000
+            # 配置一个连接在池中最小生存的时间,单位是毫秒
+            minEvictableIdleTimeMillis: 300000
+            # 配置一个连接在池中最大生存的时间,单位是毫秒
+            maxEvictableIdleTimeMillis: 900000
+            # 配置检测连接是否有效
+            validationQuery: SELECT 1 FROM DUAL
+            testWhileIdle: true
+            testOnBorrow: false
+            testOnReturn: false
+            webStatFilter:
+                enabled: true
+            statViewServlet:
+                enabled: true
+                # 设置白名单,不填则允许所有访问
+                allow:
+                url-pattern: /druid/*
+                # 控制台管理用户名和密码
+                login-username: ruoyi
+                login-password: 123456
+            filter:
+                stat:
+                    enabled: true
+                    # 慢SQL记录
+                    log-slow-sql: true
+                    slow-sql-millis: 1000
+                    merge-sql: true
+                wall:
+                    config:
+                        multi-statement-allow: true

+ 2 - 1
vehicle-admin/src/main/resources/application.yml

@@ -15,6 +15,7 @@ base:
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: math
   #  sqlType: kingbasees  # 数据库类型
+  sqlType: dm  # 数据库类型
   dbname: vehicle #数据库名
   #图片路径前缀
   imgUrl: http://124.71.171.71:18801/picbucket
@@ -63,7 +64,7 @@ spring:
     basename: i18n/messages
   profiles:
     #    active: kdruid
-    active: druid
+    active: dmdruid
   # 文件上传
   servlet:
      multipart:

binární
vehicle-admin/src/main/resources/template/baseCameraManagement.xlsx