融合通信

ds-hefei
luyya 2026-03-16 15:19:16 +08:00
parent 8b41028448
commit 43652655de
17 changed files with 970 additions and 49 deletions

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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()));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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_GeomFromTextgeometryLocation
*
* @param mapPolygon
* @return
*/
int insertWithGeometry(MapPolygon mapPolygon);
/**
* 使ST_GeomFromTextgeometryLocation
*
* @param mapPolygon
* @return
*/
int updateWithGeometry(MapPolygon mapPolygon);
/**
* 使ST_AsGeoJSONgeometryLocation
*
* @param mapPolygon
* @return
*/
List<MapPolygonVo> selectListWithGeometry(@Param("mapPolygon") MapPolygon mapPolygon);
/**
* 使ST_AsGeoJSONgeometryLocation
*
* @param page
* @param mapPolygon
* @return
*/
List<MapPolygonVo> selectPageWithGeometry(Page<?> page, @Param("mapPolygon") MapPolygon mapPolygon);
/**
* ID使ST_AsGeoJSONgeometryLocation
*
* @param id ID
* @return
*/
MapPolygonVo selectByIdWithGeometry(@Param("id") Integer id);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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-ForIP
*
* @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;
}
}

View File

@ -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>

View File

@ -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

View File

@ -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">

View File

@ -6,7 +6,7 @@ server:
spring:
application:
# 应用名称
name: ruoyi-sentinel-dashboard
name: wzhj-sentinel-dashboard
profiles:
# 环境配置
active: @profiles.active@

View File

@ -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>&nbsp;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>&nbsp;注销</a>
@ -16,4 +13,4 @@
</nav>
<!-- end nav -->
<sidebar></sidebar>
</div>
</div>

View File

@ -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>