From 43652655defbee58bdf3a4c111afc3f700e74ca0 Mon Sep 17 00:00:00 2001 From: luyya Date: Mon, 16 Mar 2026 15:19:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=9E=8D=E5=90=88=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/nacos/datasource.yml | 47 ++++-- .../src/main/resources/logback-plus.xml | 55 +++++-- stwzhj-modules/wzhj-system/pom.xml | 25 +++ .../system/MapPolygonController.java | 95 +++++++++++ .../org/dromara/system/domain/MapPolygon.java | 108 +++++++++++++ .../system/domain/bo/MapPolygonBo.java | 72 +++++++++ .../system/domain/vo/MapPolygonVo.java | 141 ++++++++++++++++ .../system/mapper/MapPolygonMapper.java | 61 +++++++ .../system/service/IMapPolygonService.java | 54 +++++++ .../service/impl/MapPolygonServiceImpl.java | 151 ++++++++++++++++++ .../org/dromara/system/utils/IPUtils.java | 54 +++++++ .../mapper/system/MapPolygonMapper.xml | 124 ++++++++++++++ .../src/main/resources/application.properties | 19 +-- .../src/main/resources/static/index.html | 2 +- .../src/main/resources/application.yml | 2 +- .../app/scripts/directives/header/header.html | 7 +- .../resources/app/views/dashboard/home.html | 2 +- 17 files changed, 970 insertions(+), 49 deletions(-) create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/controller/system/MapPolygonController.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/MapPolygon.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/bo/MapPolygonBo.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/vo/MapPolygonVo.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/mapper/MapPolygonMapper.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/IMapPolygonService.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/impl/MapPolygonServiceImpl.java create mode 100644 stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/utils/IPUtils.java create mode 100644 stwzhj-modules/wzhj-system/src/main/resources/mapper/system/MapPolygonMapper.xml diff --git a/config/nacos/datasource.yml b/config/nacos/datasource.yml index bcf6b984..2ecf23ad 100644 --- a/config/nacos/datasource.yml +++ b/config/nacos/datasource.yml @@ -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 diff --git a/stwzhj-modules/wzhj-location/src/main/resources/logback-plus.xml b/stwzhj-modules/wzhj-location/src/main/resources/logback-plus.xml index f39a26de..fcb89dcf 100644 --- a/stwzhj-modules/wzhj-location/src/main/resources/logback-plus.xml +++ b/stwzhj-modules/wzhj-location/src/main/resources/logback-plus.xml @@ -1,28 +1,49 @@ - + + + + - - - - + + + ${log.path}/info.${log.file}.log + + INFO + ACCEPT + DENY + + + ${log.path}/info/info.${log.file}.%d{yyyy-MM-dd}.%i.log.gz + ${MAX_FILE_SIZE} + ${MAX_HISTORY} + - ${console.log.pattern} - utf-8 + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - + + + ${log.path}/error.${log.file}.log + + ERROR + + + ${log.path}/error/error.${log.file}.%d{yyyy-MM-dd}.%i.log.gz + ${MAX_FILE_SIZE} + ${MAX_HISTORY} + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - - - - - - - - + + + + + diff --git a/stwzhj-modules/wzhj-system/pom.xml b/stwzhj-modules/wzhj-system/pom.xml index e36e422c..5c378236 100644 --- a/stwzhj-modules/wzhj-system/pom.xml +++ b/stwzhj-modules/wzhj-system/pom.xml @@ -115,6 +115,31 @@ 1.5.1-RELEASE + + + com.github.oshi + oshi-core + 6.4.0 + + + + + com.alibaba + druid-spring-boot-starter + 1.2.21 + + + com.alibaba + druid + + + + + com.alibaba + druid + 1.2.21 + + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/controller/system/MapPolygonController.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/controller/system/MapPolygonController.java new file mode 100644 index 00000000..69844bc3 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/controller/system/MapPolygonController.java @@ -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 list(MapPolygonBo mapPolygonBo, PageQuery pageQuery) { + return mapPolygonService.queryPageList(mapPolygonBo, pageQuery); + } + + + + /** + * 获取电子围栏详细信息 + */ + @SaCheckPermission("system:mapPolygon:query") + @GetMapping(value = "/{id}") + public R getInfo(@PathVariable Integer id) { + return R.ok(mapPolygonService.queryById(id)); + } + + /** + * 新增电子围栏 + */ + @SaCheckPermission("system:mapPolygon:add") + @Log(title = "电子围栏管理", businessType = BusinessType.INSERT) + @PostMapping + public R add(@Validated @RequestBody MapPolygonBo mapPolygonBo) { + return toAjax(mapPolygonService.insertByBo(mapPolygonBo)); + } + + /** + * 修改电子围栏 + */ + @SaCheckPermission("system:mapPolygon:edit") + @Log(title = "电子围栏管理", businessType = BusinessType.UPDATE) + @PutMapping + public R edit(@Validated @RequestBody MapPolygonBo mapPolygonBo) { + return toAjax(mapPolygonService.updateByBo(mapPolygonBo)); + } + + /** + * 删除电子围栏 + */ + @SaCheckPermission("system:mapPolygon:remove") + @Log(title = "电子围栏管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R 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 changeStatus(@RequestBody MapPolygonBo mapPolygonBo) { + return toAjax(mapPolygonService.updateStatus(mapPolygonBo.getId(), mapPolygonBo.getStatus())); + } + +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/MapPolygon.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/MapPolygon.java new file mode 100644 index 00000000..2acfb73c --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/MapPolygon.java @@ -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; + +} \ No newline at end of file diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/bo/MapPolygonBo.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/bo/MapPolygonBo.java new file mode 100644 index 00000000..e9e803c3 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/bo/MapPolygonBo.java @@ -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; + +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/vo/MapPolygonVo.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/vo/MapPolygonVo.java new file mode 100644 index 00000000..34724ce6 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/domain/vo/MapPolygonVo.java @@ -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; + +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/mapper/MapPolygonMapper.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/mapper/MapPolygonMapper.java new file mode 100644 index 00000000..3d1b7e00 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/mapper/MapPolygonMapper.java @@ -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 { + + /** + * 插入电子围栏,使用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 selectListWithGeometry(@Param("mapPolygon") MapPolygon mapPolygon); + + /** + * 分页查询电子围栏列表,使用ST_AsGeoJSON转换geometryLocation + * + * @param page 分页对象 + * @param mapPolygon 查询条件 + * @return 电子围栏列表 + */ + List selectPageWithGeometry(Page page, @Param("mapPolygon") MapPolygon mapPolygon); + + /** + * 根据ID查询电子围栏,使用ST_AsGeoJSON转换geometryLocation + * + * @param id 电子围栏ID + * @return 电子围栏视图对象 + */ + MapPolygonVo selectByIdWithGeometry(@Param("id") Integer id); +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/IMapPolygonService.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/IMapPolygonService.java new file mode 100644 index 00000000..f26ebfc9 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/IMapPolygonService.java @@ -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 queryPageList(MapPolygonBo bo, PageQuery pageQuery); + + /** + * 查询电子围栏列表 + */ + List queryList(MapPolygonBo bo); + + /** + * 新增电子围栏 + */ + Boolean insertByBo(MapPolygonBo bo); + + /** + * 修改电子围栏 + */ + Boolean updateByBo(MapPolygonBo bo); + + /** + * 修改状态 + */ + int updateStatus(Integer id, Short status); + + /** + * 校验并批量删除电子围栏信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/impl/MapPolygonServiceImpl.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/impl/MapPolygonServiceImpl.java new file mode 100644 index 00000000..51faba66 --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/service/impl/MapPolygonServiceImpl.java @@ -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 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 page = pageQuery.build(); + List records = baseMapper.selectPageWithGeometry(page, query); + page.setRecords(records); + + return TableDataInfo.build(page); + } + + /** + * 查询电子围栏列表 + */ + @Override + public List 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 buildQueryWrapper(MapPolygonBo bo) { + LambdaQueryWrapper 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() + .set(MapPolygon::getStatus, status) + .eq(MapPolygon::getId, id)); + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(MapPolygon entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除电子围栏信息 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + +} + diff --git a/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/utils/IPUtils.java b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/utils/IPUtils.java new file mode 100644 index 00000000..9b17b35b --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/java/org/dromara/system/utils/IPUtils.java @@ -0,0 +1,54 @@ +package org.dromara.system.utils; + +import jakarta.servlet.http.HttpServletRequest; + +/** + *

description:

+ * + * @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; + } +} diff --git a/stwzhj-modules/wzhj-system/src/main/resources/mapper/system/MapPolygonMapper.xml b/stwzhj-modules/wzhj-system/src/main/resources/mapper/system/MapPolygonMapper.xml new file mode 100644 index 00000000..1ff8189f --- /dev/null +++ b/stwzhj-modules/wzhj-system/src/main/resources/mapper/system/MapPolygonMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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} + ) + + + + + UPDATE map_polygon + + name = #{name}, + type = #{type}, + dept_id = #{deptId}, + address = #{address}, + remark = #{remark}, + geometry_location = ST_GeomFromText(#{geometryLocation}), + layer_id = #{layerId}, + layer_name = #{layerName}, + create_user_id = #{createUserId}, + create_user_name = #{createUserName}, + style = #{style}, + status = #{status}, + center_point = #{centerPoint}, + dept_name = #{deptName}, + rule_type = #{ruleType}, + range = #{range}, + + WHERE id = #{id} + + + + + + + + + + + + + diff --git a/stwzhj-visual/stwzhj-nacos/src/main/resources/application.properties b/stwzhj-visual/stwzhj-nacos/src/main/resources/application.properties index 72a9c9e5..4177209d 100644 --- a/stwzhj-visual/stwzhj-nacos/src/main/resources/application.properties +++ b/stwzhj-visual/stwzhj-nacos/src/main/resources/application.properties @@ -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 diff --git a/stwzhj-visual/stwzhj-nacos/src/main/resources/static/index.html b/stwzhj-visual/stwzhj-nacos/src/main/resources/static/index.html index b5d23e5e..a78a2ae7 100644 --- a/stwzhj-visual/stwzhj-nacos/src/main/resources/static/index.html +++ b/stwzhj-visual/stwzhj-nacos/src/main/resources/static/index.html @@ -25,7 +25,7 @@ - Nacos + 数据服务中心 diff --git a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/resources/application.yml b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/resources/application.yml index 9ae2e003..f79d1eea 100644 --- a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/resources/application.yml +++ b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/resources/application.yml @@ -6,7 +6,7 @@ server: spring: application: # 应用名称 - name: ruoyi-sentinel-dashboard + name: wzhj-sentinel-dashboard profiles: # 环境配置 active: @profiles.active@ diff --git a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html index b72294da..b2bc5119 100644 --- a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html +++ b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/header/header.html @@ -1,13 +1,10 @@
-
\ No newline at end of file + diff --git a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html index 9a81bf5b..579878cb 100644 --- a/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html +++ b/stwzhj-visual/stwzhj-sentinel-dashboard/src/main/webapp/resources/app/views/dashboard/home.html @@ -1,7 +1,7 @@
-

欢迎使用 Sentinel 控制台

+

欢迎使用融合通信运维监控 控制台