融合通信
parent
8b41028448
commit
43652655de
|
|
@ -28,7 +28,7 @@ datasource:
|
|||
|
||||
spring:
|
||||
datasource:
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
|
||||
dynamic:
|
||||
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
||||
|
|
@ -37,18 +37,35 @@ spring:
|
|||
seata: ${seata.enabled}
|
||||
# 严格模式 匹配不到数据源则报错
|
||||
strict: true
|
||||
hikari:
|
||||
# 最大连接池数量
|
||||
maxPoolSize: 20
|
||||
# 最小空闲线程数量
|
||||
# Druid数据源配置
|
||||
druid:
|
||||
# 初始化连接数
|
||||
initialSize: 5
|
||||
# 最小空闲连接数
|
||||
minIdle: 10
|
||||
# 配置获取连接等待超时的时间
|
||||
connectionTimeout: 30000
|
||||
# 校验超时时间
|
||||
validationTimeout: 5000
|
||||
# 空闲连接存活最大时间,默认10分钟
|
||||
idleTimeout: 600000
|
||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||
maxLifetime: 1800000
|
||||
# 多久检查一次连接的活性
|
||||
keepaliveTime: 30000
|
||||
# 最大连接数
|
||||
maxActive: 20
|
||||
# 获取连接等待超时的时间
|
||||
maxWait: 60000
|
||||
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
|
||||
timeBetweenEvictionRunsMillis: 60000
|
||||
# 配置一个连接在池中最小生存的时间,单位是毫秒
|
||||
minEvictableIdleTimeMillis: 300000
|
||||
# 配置一个连接在池中最大生存的时间,单位是毫秒
|
||||
maxEvictableIdleTimeMillis: 900000
|
||||
# 配置检测连接是否有效
|
||||
validationQuery: SELECT 1
|
||||
# 申请连接时执行validationQuery检测连接是否有效
|
||||
testWhileIdle: true
|
||||
# 申请连接时执行validationQuery检测连接是否有效
|
||||
testOnBorrow: false
|
||||
# 归还连接时执行validationQuery检测连接是否有效
|
||||
testOnReturn: false
|
||||
# 是否缓存preparedStatement,也就是PSCache
|
||||
poolPreparedStatements: true
|
||||
# 配置监控统计拦截的filters
|
||||
filters: stat,wall,slf4j
|
||||
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
|
||||
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
|
||||
# 合并多个DruidDataSource的监控数据
|
||||
useGlobalDataSourceStat: true
|
||||
|
|
|
|||
|
|
@ -1,28 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||
<!-- 日志存放路径 -->
|
||||
<property name="log.path" value="logs/${project.artifactId}" />
|
||||
<property name="log.path" value="logs" />
|
||||
<property name="log.file" value="location" />
|
||||
<property name="MAX_FILE_SIZE" value="10MB" />
|
||||
<property name="MAX_HISTORY" value="30" />
|
||||
<!-- 日志输出格式 -->
|
||||
<property name="console.log.pattern"
|
||||
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
|
||||
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- INFO日志Appender -->
|
||||
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/info.${log.file}.log</file>
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/info/info.${log.file}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||||
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||||
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${console.log.pattern}</pattern>
|
||||
<charset>utf-8</charset>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<include resource="logback-common.xml" />
|
||||
<!-- ERROR日志Appender -->
|
||||
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/error.${log.file}.log</file>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>ERROR</level>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/error/error.${log.file}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
|
||||
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
||||
<maxHistory>${MAX_HISTORY}</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<include resource="logback-logstash.xml" />
|
||||
|
||||
<!-- 开启 skywalking 日志收集 -->
|
||||
<include resource="logback-skylog.xml" />
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<appender-ref ref="console" />
|
||||
<!-- 根Logger配置(禁用控制台输出) -->
|
||||
<root level="INFO">
|
||||
<appender-ref ref="FILE_INFO" />
|
||||
<appender-ref ref="FILE_ERROR" />
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
|
|
|
|||
|
|
@ -115,6 +115,31 @@
|
|||
<version>1.5.1-RELEASE</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 系统监控oshi -->
|
||||
<dependency>
|
||||
<groupId>com.github.oshi</groupId>
|
||||
<artifactId>oshi-core</artifactId>
|
||||
<version>6.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Druid监控 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
<version>1.2.21</version> <!-- 或者 1.2.22 -->
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid</artifactId>
|
||||
<version>1.2.21</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
package org.dromara.system.controller.system;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.bo.MapPolygonBo;
|
||||
import org.dromara.system.domain.vo.MapPolygonVo;
|
||||
import org.dromara.system.service.IMapPolygonService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电子围栏控制器
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/mapPolygon")
|
||||
public class MapPolygonController extends BaseController {
|
||||
|
||||
private final IMapPolygonService mapPolygonService;
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<MapPolygonVo> list(MapPolygonBo mapPolygonBo, PageQuery pageQuery) {
|
||||
return mapPolygonService.queryPageList(mapPolygonBo, pageQuery);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取电子围栏详细信息
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public R<MapPolygonVo> getInfo(@PathVariable Integer id) {
|
||||
return R.ok(mapPolygonService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增电子围栏
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:add")
|
||||
@Log(title = "电子围栏管理", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated @RequestBody MapPolygonBo mapPolygonBo) {
|
||||
return toAjax(mapPolygonService.insertByBo(mapPolygonBo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改电子围栏
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:edit")
|
||||
@Log(title = "电子围栏管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public R<Void> edit(@Validated @RequestBody MapPolygonBo mapPolygonBo) {
|
||||
return toAjax(mapPolygonService.updateByBo(mapPolygonBo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除电子围栏
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:remove")
|
||||
@Log(title = "电子围栏管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@PathVariable Integer[] ids) {
|
||||
return toAjax(mapPolygonService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
@SaCheckPermission("system:mapPolygon:edit")
|
||||
@Log(title = "电子围栏管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/changeStatus")
|
||||
public R<Void> changeStatus(@RequestBody MapPolygonBo mapPolygonBo) {
|
||||
return toAjax(mapPolygonService.updateStatus(mapPolygonBo.getId(), mapPolygonBo.getStatus()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
package org.dromara.system.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* 电子围栏实体
|
||||
*
|
||||
* @author luya
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("map_polygon")
|
||||
public class MapPolygon extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@TableId(value = "id")
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private Short type;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private String deptId;
|
||||
|
||||
/**
|
||||
* 地址
|
||||
*/
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 地图数据
|
||||
*/
|
||||
private String geometryLocation;
|
||||
|
||||
/**
|
||||
* 图层ID
|
||||
*/
|
||||
private Integer layerId;
|
||||
|
||||
/**
|
||||
* 图层名称
|
||||
*/
|
||||
private String layerName;
|
||||
|
||||
/**
|
||||
* 创建用户ID
|
||||
*/
|
||||
private Integer createUserId;
|
||||
|
||||
/**
|
||||
* 创建用户名称
|
||||
*/
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 样式
|
||||
*/
|
||||
private String style;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Short status;
|
||||
|
||||
/**
|
||||
* 中心点坐标
|
||||
*/
|
||||
private String centerPoint;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String deptName;
|
||||
|
||||
/**
|
||||
* 0禁入 1禁出
|
||||
*/
|
||||
private Short ruleType;
|
||||
|
||||
/**
|
||||
* 生效范围
|
||||
*/
|
||||
private Integer range;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package org.dromara.system.domain.bo;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.system.domain.MapPolygon;
|
||||
|
||||
/**
|
||||
* 电子围栏业务对象
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = MapPolygon.class, reverseConvertGenerate = false)
|
||||
public class MapPolygonBo extends MapPolygon {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
@NotBlank(message = "围栏名称不能为空")
|
||||
@Size(min = 0, max = 254, message = "围栏名称不能超过{max}个字符")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 地址
|
||||
*/
|
||||
@Size(min = 0, max = 254, message = "地址不能超过{max}个字符")
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@Size(min = 0, max = 254, message = "备注不能超过{max}个字符")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 地图数据
|
||||
*/
|
||||
@NotBlank(message = "地图数据不能为空")
|
||||
private String geometryLocation;
|
||||
|
||||
/**
|
||||
* 图层名称
|
||||
*/
|
||||
@Size(min = 0, max = 50, message = "图层名称不能超过{max}个字符")
|
||||
private String layerName;
|
||||
|
||||
/**
|
||||
* 样式
|
||||
*/
|
||||
@Size(min = 0, max = 200, message = "样式不能超过{max}个字符")
|
||||
private String style;
|
||||
|
||||
/**
|
||||
* 中心点坐标
|
||||
*/
|
||||
@Size(min = 0, max = 200, message = "中心点坐标不能超过{max}个字符")
|
||||
private String centerPoint;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
@Size(min = 0, max = 255, message = "部门名称不能超过{max}个字符")
|
||||
private String deptName;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
package org.dromara.system.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.system.domain.MapPolygon;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 电子围栏视图对象
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = MapPolygon.class)
|
||||
public class MapPolygonVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
@ExcelProperty(value = "ID")
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
@ExcelProperty(value = "名称")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
@ExcelProperty(value = "类型")
|
||||
private Short type;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
@ExcelProperty(value = "部门ID")
|
||||
private String deptId;
|
||||
|
||||
/**
|
||||
* 地址
|
||||
*/
|
||||
@ExcelProperty(value = "地址")
|
||||
private String address;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@ExcelProperty(value = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ExcelProperty(value = "更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 地图数据
|
||||
*/
|
||||
@ExcelProperty(value = "地图数据")
|
||||
private String geometryLocation;
|
||||
|
||||
/**
|
||||
* 图层ID
|
||||
*/
|
||||
@ExcelProperty(value = "图层ID")
|
||||
private Integer layerId;
|
||||
|
||||
/**
|
||||
* 图层名称
|
||||
*/
|
||||
@ExcelProperty(value = "图层名称")
|
||||
private String layerName;
|
||||
|
||||
/**
|
||||
* 创建用户ID
|
||||
*/
|
||||
@ExcelProperty(value = "创建用户ID")
|
||||
private Integer createUserId;
|
||||
|
||||
/**
|
||||
* 创建用户名称
|
||||
*/
|
||||
@ExcelProperty(value = "创建用户名称")
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 样式
|
||||
*/
|
||||
@ExcelProperty(value = "样式")
|
||||
private String style;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@ExcelProperty(value = "状态")
|
||||
private Short status;
|
||||
|
||||
/**
|
||||
* 中心点坐标
|
||||
*/
|
||||
@ExcelProperty(value = "中心点坐标")
|
||||
private String centerPoint;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
@ExcelProperty(value = "部门名称")
|
||||
private String deptName;
|
||||
|
||||
/**
|
||||
* 0禁入 1禁出
|
||||
*/
|
||||
@ExcelProperty(value = "规则类型")
|
||||
private Short ruleType;
|
||||
|
||||
/**
|
||||
* 生效范围
|
||||
*/
|
||||
@ExcelProperty(value = "生效范围")
|
||||
private Integer range;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package org.dromara.system.mapper;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.system.domain.MapPolygon;
|
||||
import org.dromara.system.domain.vo.MapPolygonVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电子围栏Mapper接口
|
||||
*
|
||||
* @author luya
|
||||
*/
|
||||
@DS("slave")
|
||||
public interface MapPolygonMapper extends BaseMapperPlus<MapPolygon, MapPolygonVo> {
|
||||
|
||||
/**
|
||||
* 插入电子围栏,使用ST_GeomFromText转换geometryLocation
|
||||
*
|
||||
* @param mapPolygon 电子围栏实体
|
||||
* @return 影响行数
|
||||
*/
|
||||
int insertWithGeometry(MapPolygon mapPolygon);
|
||||
|
||||
/**
|
||||
* 更新电子围栏,使用ST_GeomFromText转换geometryLocation
|
||||
*
|
||||
* @param mapPolygon 电子围栏实体
|
||||
* @return 影响行数
|
||||
*/
|
||||
int updateWithGeometry(MapPolygon mapPolygon);
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表,使用ST_AsGeoJSON转换geometryLocation
|
||||
*
|
||||
* @param mapPolygon 查询条件
|
||||
* @return 电子围栏列表
|
||||
*/
|
||||
List<MapPolygonVo> selectListWithGeometry(@Param("mapPolygon") MapPolygon mapPolygon);
|
||||
|
||||
/**
|
||||
* 分页查询电子围栏列表,使用ST_AsGeoJSON转换geometryLocation
|
||||
*
|
||||
* @param page 分页对象
|
||||
* @param mapPolygon 查询条件
|
||||
* @return 电子围栏列表
|
||||
*/
|
||||
List<MapPolygonVo> selectPageWithGeometry(Page<?> page, @Param("mapPolygon") MapPolygon mapPolygon);
|
||||
|
||||
/**
|
||||
* 根据ID查询电子围栏,使用ST_AsGeoJSON转换geometryLocation
|
||||
*
|
||||
* @param id 电子围栏ID
|
||||
* @return 电子围栏视图对象
|
||||
*/
|
||||
MapPolygonVo selectByIdWithGeometry(@Param("id") Integer id);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package org.dromara.system.service;
|
||||
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.bo.MapPolygonBo;
|
||||
import org.dromara.system.domain.vo.MapPolygonVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电子围栏Service接口
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
public interface IMapPolygonService {
|
||||
|
||||
/**
|
||||
* 查询电子围栏
|
||||
*/
|
||||
MapPolygonVo queryById(Integer id);
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表
|
||||
*/
|
||||
TableDataInfo<MapPolygonVo> queryPageList(MapPolygonBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表
|
||||
*/
|
||||
List<MapPolygonVo> queryList(MapPolygonBo bo);
|
||||
|
||||
/**
|
||||
* 新增电子围栏
|
||||
*/
|
||||
Boolean insertByBo(MapPolygonBo bo);
|
||||
|
||||
/**
|
||||
* 修改电子围栏
|
||||
*/
|
||||
Boolean updateByBo(MapPolygonBo bo);
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
int updateStatus(Integer id, Short status);
|
||||
|
||||
/**
|
||||
* 校验并批量删除电子围栏信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
package org.dromara.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.MapPolygon;
|
||||
import org.dromara.system.domain.bo.MapPolygonBo;
|
||||
import org.dromara.system.domain.vo.MapPolygonVo;
|
||||
import org.dromara.system.mapper.MapPolygonMapper;
|
||||
import org.dromara.system.service.IMapPolygonService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电子围栏Service实现
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class MapPolygonServiceImpl implements IMapPolygonService {
|
||||
|
||||
private final MapPolygonMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询电子围栏
|
||||
*/
|
||||
@Override
|
||||
public MapPolygonVo queryById(Integer id) {
|
||||
return baseMapper.selectByIdWithGeometry(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<MapPolygonVo> queryPageList(MapPolygonBo bo, PageQuery pageQuery) {
|
||||
// 构建查询条件
|
||||
MapPolygon query = new MapPolygon();
|
||||
query.setId(bo.getId());
|
||||
query.setName(bo.getName());
|
||||
query.setType(bo.getType());
|
||||
query.setDeptId(bo.getDeptId());
|
||||
query.setLayerId(bo.getLayerId());
|
||||
query.setStatus(bo.getStatus());
|
||||
query.setRuleType(bo.getRuleType());
|
||||
|
||||
// 使用数据库分页查询
|
||||
Page<MapPolygonVo> page = pageQuery.build();
|
||||
List<MapPolygonVo> records = baseMapper.selectPageWithGeometry(page, query);
|
||||
page.setRecords(records);
|
||||
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询电子围栏列表
|
||||
*/
|
||||
@Override
|
||||
public List<MapPolygonVo> queryList(MapPolygonBo bo) {
|
||||
// 构建查询条件
|
||||
MapPolygon query = new MapPolygon();
|
||||
query.setId(bo.getId());
|
||||
query.setName(bo.getName());
|
||||
query.setType(bo.getType());
|
||||
query.setDeptId(bo.getDeptId());
|
||||
query.setLayerId(bo.getLayerId());
|
||||
query.setStatus(bo.getStatus());
|
||||
query.setRuleType(bo.getRuleType());
|
||||
|
||||
return baseMapper.selectListWithGeometry(query);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<MapPolygon> buildQueryWrapper(MapPolygonBo bo) {
|
||||
LambdaQueryWrapper<MapPolygon> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getId() != null, MapPolygon::getId, bo.getId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getName()), MapPolygon::getName, bo.getName());
|
||||
lqw.eq(bo.getType() != null, MapPolygon::getType, bo.getType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), MapPolygon::getDeptId, bo.getDeptId());
|
||||
lqw.eq(bo.getLayerId() != null, MapPolygon::getLayerId, bo.getLayerId());
|
||||
lqw.eq(bo.getStatus() != null, MapPolygon::getStatus, bo.getStatus());
|
||||
lqw.eq(bo.getRuleType() != null, MapPolygon::getRuleType, bo.getRuleType());
|
||||
lqw.orderByAsc(MapPolygon::getId);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增电子围栏
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(MapPolygonBo bo) {
|
||||
MapPolygon add = org.dromara.common.core.utils.MapstructUtils.convert(bo, MapPolygon.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insertWithGeometry(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改电子围栏
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(MapPolygonBo bo) {
|
||||
MapPolygon update = org.dromara.common.core.utils.MapstructUtils.convert(bo, MapPolygon.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateWithGeometry(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
@Override
|
||||
public int updateStatus(Integer id, Short status) {
|
||||
return baseMapper.update(null,
|
||||
new LambdaUpdateWrapper<MapPolygon>()
|
||||
.set(MapPolygon::getStatus, status)
|
||||
.eq(MapPolygon::getId, id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(MapPolygon entity) {
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除电子围栏信息
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) {
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package org.dromara.system.utils;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* <p>description: </p>
|
||||
*
|
||||
* @author chenle
|
||||
* @date 2021-12-30 9:54
|
||||
*/
|
||||
|
||||
|
||||
public class IPUtils {
|
||||
/**
|
||||
* 获取用户真实IP地址,不使用request.getRemoteAddr()的原因是有可能用户使用了代理软件方式避免真实IP地址,
|
||||
* 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值
|
||||
*
|
||||
* @return ip
|
||||
*/
|
||||
public static String getRealIP(HttpServletRequest request) {
|
||||
String ip = request.getHeader("x-forwarded-for");
|
||||
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
|
||||
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
|
||||
if( ip.indexOf(",")!=-1 ){
|
||||
ip = ip.split(",")[0];
|
||||
}
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("Proxy-Client-IP");
|
||||
System.out.println("Proxy-Client-IP ip: " + ip);
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||
System.out.println("WL-Proxy-Client-IP ip: " + ip);
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("HTTP_CLIENT_IP");
|
||||
System.out.println("HTTP_CLIENT_IP ip: " + ip);
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||||
System.out.println("HTTP_X_FORWARDED_FOR ip: " + ip);
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("X-Real-IP");
|
||||
System.out.println("X-Real-IP ip: " + ip);
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
||||
ip = request.getRemoteAddr();
|
||||
System.out.println("getRemoteAddr ip: " + ip);
|
||||
}
|
||||
return ip;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.MapPolygonMapper">
|
||||
|
||||
<!-- 基础结果映射 -->
|
||||
<resultMap id="BaseResultMap" type="org.dromara.system.domain.vo.MapPolygonVo">
|
||||
<id column="id" property="id" />
|
||||
<result column="name" property="name" />
|
||||
<result column="type" property="type" />
|
||||
<result column="dept_id" property="deptId" />
|
||||
<result column="address" property="address" />
|
||||
<result column="remark" property="remark" />
|
||||
<result column="geometry_location" property="geometryLocation" />
|
||||
<result column="layer_id" property="layerId" />
|
||||
<result column="layer_name" property="layerName" />
|
||||
<result column="create_user_id" property="createUserId" />
|
||||
<result column="create_user_name" property="createUserName" />
|
||||
<result column="style" property="style" />
|
||||
<result column="status" property="status" />
|
||||
<result column="center_point" property="centerPoint" />
|
||||
<result column="dept_name" property="deptName" />
|
||||
<result column="rule_type" property="ruleType" />
|
||||
<result column="range" property="range" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 基础列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, name, type, dept_id, address, remark,
|
||||
geometry_location, layer_id, layer_name, create_user_id, create_user_name,
|
||||
style, status, center_point, dept_name, rule_type, range
|
||||
</sql>
|
||||
|
||||
<!-- 插入电子围栏,使用ST_GeomFromText转换geometryLocation -->
|
||||
<insert id="insertWithGeometry" parameterType="org.dromara.system.domain.MapPolygon">
|
||||
INSERT INTO map_polygon (
|
||||
name, type, dept_id, address, remark,
|
||||
geometry_location, layer_id, layer_name, create_user_id, create_user_name,
|
||||
style, status, center_point, dept_name, rule_type, range
|
||||
) VALUES (
|
||||
#{name}, #{type}, #{deptId}, #{address}, #{remark},
|
||||
ST_GeomFromText(#{geometryLocation}), #{layerId}, #{layerName}, #{createUserId}, #{createUserName},
|
||||
#{style}, #{status}, #{centerPoint}, #{deptName}, #{ruleType}, #{range}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 更新电子围栏,使用ST_GeomFromText转换geometryLocation -->
|
||||
<update id="updateWithGeometry" parameterType="org.dromara.system.domain.MapPolygon">
|
||||
UPDATE map_polygon
|
||||
<set>
|
||||
<if test="name != null">name = #{name},</if>
|
||||
<if test="type != null">type = #{type},</if>
|
||||
<if test="deptId != null">dept_id = #{deptId},</if>
|
||||
<if test="address != null">address = #{address},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="geometryLocation != null">geometry_location = ST_GeomFromText(#{geometryLocation}),</if>
|
||||
<if test="layerId != null">layer_id = #{layerId},</if>
|
||||
<if test="layerName != null">layer_name = #{layerName},</if>
|
||||
<if test="createUserId != null">create_user_id = #{createUserId},</if>
|
||||
<if test="createUserName != null">create_user_name = #{createUserName},</if>
|
||||
<if test="style != null">style = #{style},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="centerPoint != null">center_point = #{centerPoint},</if>
|
||||
<if test="deptName != null">dept_name = #{deptName},</if>
|
||||
<if test="ruleType != null">rule_type = #{ruleType},</if>
|
||||
<if test="range != null">range = #{range},</if>
|
||||
</set>
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<!-- 查询电子围栏列表,使用ST_AsGeoJSON转换geometryLocation -->
|
||||
<select id="selectListWithGeometry" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
id, name, type, dept_id, address, remark,create_time,update_time,
|
||||
ST_AsGeoJSON(geometry_location) AS geometry_location,
|
||||
layer_id, layer_name, create_user_id, create_user_name,
|
||||
style, status, center_point, dept_name, rule_type, range
|
||||
FROM map_polygon
|
||||
<where>
|
||||
<if test="id != null">AND id = #{id}</if>
|
||||
<if test="name != null and name != ''">AND name LIKE '%' || #{name,jdbcType=VARCHAR} || '%'</if>
|
||||
<if test="type != null">AND type = #{type}</if>
|
||||
<if test="deptId != null and deptId != ''">AND dept_id = #{deptId,jdbcType=VARCHAR}</if>
|
||||
<if test="layerId != null">AND layer_id = #{layerId}</if>
|
||||
<if test="status != null">AND status = #{status}</if>
|
||||
<if test="ruleType != null">AND rule_type = #{ruleType}</if>
|
||||
</where>
|
||||
ORDER BY id ASC
|
||||
</select>
|
||||
|
||||
<!-- 分页查询电子围栏列表,使用ST_AsGeoJSON转换geometryLocation -->
|
||||
<select id="selectPageWithGeometry" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
id, name, type, dept_id, address, remark,create_time,update_time,
|
||||
ST_AsGeoJSON(geometry_location) AS geometry_location,
|
||||
layer_id, layer_name, create_user_id, create_user_name,
|
||||
style, status, center_point, dept_name, rule_type, range
|
||||
FROM map_polygon
|
||||
<where>
|
||||
<if test="mapPolygon.id != null">AND id = #{mapPolygon.id}</if>
|
||||
<if test="mapPolygon.name != null and mapPolygon.name != ''">AND name LIKE '%' || #{mapPolygon.name,jdbcType=VARCHAR} || '%'</if>
|
||||
<if test="mapPolygon.type != null">AND type = #{mapPolygon.type}</if>
|
||||
<if test="mapPolygon.deptId != null and mapPolygon.deptId != ''">AND dept_id = #{mapPolygon.deptId,jdbcType=VARCHAR}</if>
|
||||
<if test="mapPolygon.layerId != null">AND layer_id = #{mapPolygon.layerId}</if>
|
||||
<if test="mapPolygon.status != null">AND status = #{mapPolygon.status}</if>
|
||||
<if test="mapPolygon.ruleType != null">AND rule_type = #{mapPolygon.ruleType}</if>
|
||||
</where>
|
||||
ORDER BY id ASC
|
||||
</select>
|
||||
|
||||
<!-- 根据ID查询电子围栏,使用ST_AsGeoJSON转换geometryLocation -->
|
||||
<select id="selectByIdWithGeometry" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
id, name, type, dept_id, address, remark,create_time,update_time,
|
||||
ST_AsGeoJSON(geometry_location) AS geometry_location,
|
||||
layer_id, layer_name, create_user_id, create_user_name,
|
||||
style, status, center_point, dept_name, rule_type, range
|
||||
FROM map_polygon
|
||||
WHERE id = #{id}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
|
@ -30,7 +30,7 @@ server.port=8848
|
|||
### Specify local server's IP:
|
||||
# nacos.inetutils.ip-address=
|
||||
|
||||
spring.application.name=ruoyi-nacos
|
||||
spring.application.name=rhtx-nacos
|
||||
#*************** Config Module Related Configurations ***************#
|
||||
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
|
||||
# spring.datasource.platform=mysql
|
||||
|
|
@ -87,7 +87,7 @@ nacos.naming.empty-service.clean.period-time-ms=30000
|
|||
#*************** Metrics Related Configurations ***************#
|
||||
# 指向 ruoyi-monitor 监控
|
||||
spring.boot.admin.client.url=http://127.0.0.1:9100
|
||||
spring.boot.admin.client.username=ruoyi
|
||||
spring.boot.admin.client.username=rhtx
|
||||
spring.boot.admin.client.password=123456
|
||||
spring.boot.admin.client.instance.service-host-type=IP
|
||||
|
||||
|
|
@ -111,13 +111,14 @@ management.metrics.export.influx.enabled=false
|
|||
#spring.security.enabled=false
|
||||
|
||||
### The ignore urls of auth, is deprecated in 1.2.0:
|
||||
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
||||
#nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
||||
nacos.security.ignore.urls=/**
|
||||
|
||||
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
|
||||
nacos.core.auth.system.type=nacos
|
||||
|
||||
### If turn on auth system:
|
||||
nacos.core.auth.enabled=true
|
||||
nacos.core.auth.enabled=false
|
||||
|
||||
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
|
||||
nacos.core.auth.caching.enabled=true
|
||||
|
|
@ -127,9 +128,9 @@ nacos.core.auth.enable.userAgentAuthWhite=false
|
|||
|
||||
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
|
||||
### The two properties is the white list for auth and used by identity the request from other server.
|
||||
### 此处为用户名密码 需要自行修改
|
||||
nacos.core.auth.server.identity.key=serverIdentity
|
||||
nacos.core.auth.server.identity.value=security
|
||||
### 此处为用户名密码 需要自行修改 此处设置无密码
|
||||
#nacos.core.auth.server.identity.key=serverIdentity
|
||||
#nacos.core.auth.server.identity.value=security
|
||||
|
||||
### worked when nacos.core.auth.system.type=nacos
|
||||
### The token expiration in seconds:
|
||||
|
|
@ -137,8 +138,8 @@ nacos.core.auth.plugin.nacos.token.cache.enable=false
|
|||
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
|
||||
### The default token (Base64 string):
|
||||
#nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
|
||||
### 此处为token密钥 需要自行修改
|
||||
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
|
||||
### 此处为token密钥 需要自行修改 此处设置无密码
|
||||
#nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
|
||||
|
||||
### worked when nacos.core.auth.system.type=ldap,{0} is Placeholder,replace login username
|
||||
#nacos.core.auth.ldap.url=ldap://localhost:389
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Expires" content="0">
|
||||
<title>Nacos</title>
|
||||
<title>数据服务中心</title>
|
||||
<link rel="shortcut icon" href="console-ui/public/img/nacos-logo.png" type="image/x-icon">
|
||||
<link rel="stylesheet" type="text/css" href="console-ui/public/css/bootstrap.css">
|
||||
<link rel="stylesheet" type="text/css" href="console-ui/public/css/console1412.css">
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ server:
|
|||
spring:
|
||||
application:
|
||||
# 应用名称
|
||||
name: ruoyi-sentinel-dashboard
|
||||
name: wzhj-sentinel-dashboard
|
||||
profiles:
|
||||
# 环境配置
|
||||
active: @profiles.active@
|
||||
|
|
|
|||
|
|
@ -1,13 +1,10 @@
|
|||
<div class="header">
|
||||
<nav class="navbar navbar-fixed-top navbar-inverse" style="" role="navigation">
|
||||
<div class="navbar-brand">
|
||||
<span style="color: #fff;font-size: 26px;" ng-model="dashboardVersion">Sentinel 控制台 {{dashboardVersion}}</span>
|
||||
<span style="color: #fff;font-size: 26px;" ng-model="dashboardVersion">融合通信 控制台 {{dashboardVersion}}</span>
|
||||
</div>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="https://www.aliyun.com/product/aliware/mse?spm=sentinel-dashboard.topbar.0.0.0" target="_blank"
|
||||
style="margin: 3px 15px 0 0;"><span class="glyphicon glyphicon-cloud"></span> Sentinel 企业版</a>
|
||||
</li>
|
||||
<li ng-show="showLogout">
|
||||
<a href="javascript:void(0);" ng-click="logout()"
|
||||
style="margin: 3px 15px 0 0;"><span class="glyphicon glyphicon-log-out"></span> 注销</a>
|
||||
|
|
@ -16,4 +13,4 @@
|
|||
</nav>
|
||||
<!-- end nav -->
|
||||
<sidebar></sidebar>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<div>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header">欢迎使用 Sentinel 控制台</h1>
|
||||
<h1 class="page-header">欢迎使用融合通信运维监控 控制台</h1>
|
||||
</div>
|
||||
<!-- /.col-lg-12 -->
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue