diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml new file mode 100644 index 0000000..6553b10 --- /dev/null +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -0,0 +1,34 @@ +server: + port: 8085 +# context-path: /callcenter/api +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + flowable: + datasource: + url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml new file mode 100644 index 0000000..6553b10 --- /dev/null +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -0,0 +1,34 @@ +server: + port: 8085 +# context-path: /callcenter/api +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + flowable: + datasource: + url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml new file mode 100644 index 0000000..54d7252 --- /dev/null +++ b/casic-web/src/main/resources/config/application-test.yml @@ -0,0 +1,30 @@ +server: + port: 11307 +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true +# session: +# store-type: redis +casic: + # kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + #flowable数据源和多数据源配置 + flowable: + datasource: + url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! +flowable: + checkProcessDefinitions: false #不校验process文件 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml new file mode 100644 index 0000000..6553b10 --- /dev/null +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -0,0 +1,34 @@ +server: + port: 8085 +# context-path: /callcenter/api +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + flowable: + datasource: + url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml new file mode 100644 index 0000000..54d7252 --- /dev/null +++ b/casic-web/src/main/resources/config/application-test.yml @@ -0,0 +1,30 @@ +server: + port: 11307 +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true +# session: +# store-type: redis +casic: + # kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + #flowable数据源和多数据源配置 + flowable: + datasource: + url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! +flowable: + checkProcessDefinitions: false #不校验process文件 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml new file mode 100644 index 0000000..63cc330 --- /dev/null +++ b/casic-web/src/main/resources/config/application.yml @@ -0,0 +1,33 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB + web: + resources: + static-locations: file:C:\casic\tmp\ +mybatis-plus: + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + map-underscore-to-camel-case: true +casic: + swagger-open: true #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + no-login-urls: /user/login,/kaptcha,/config/baseConfig + file: + uploadPath: C:\casic\tmp\ + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ + knife4j: + groups: 基础业务包:com.casic.missiles.modular.system \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml new file mode 100644 index 0000000..6553b10 --- /dev/null +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -0,0 +1,34 @@ +server: + port: 8085 +# context-path: /callcenter/api +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + flowable: + datasource: + url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml new file mode 100644 index 0000000..54d7252 --- /dev/null +++ b/casic-web/src/main/resources/config/application-test.yml @@ -0,0 +1,30 @@ +server: + port: 11307 +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true +# session: +# store-type: redis +casic: + # kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + #flowable数据源和多数据源配置 + flowable: + datasource: + url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! +flowable: + checkProcessDefinitions: false #不校验process文件 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml new file mode 100644 index 0000000..63cc330 --- /dev/null +++ b/casic-web/src/main/resources/config/application.yml @@ -0,0 +1,33 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB + web: + resources: + static-locations: file:C:\casic\tmp\ +mybatis-plus: + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + map-underscore-to-camel-case: true +casic: + swagger-open: true #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + no-login-urls: /user/login,/kaptcha,/config/baseConfig + file: + uploadPath: C:\casic\tmp\ + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ + knife4j: + groups: 基础业务包:com.casic.missiles.modular.system \ No newline at end of file diff --git a/casic-web/src/main/resources/logback-spring.xml b/casic-web/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/casic-web/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e20bc1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea/ +**/target/** +logs/ +*.iml diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fa98f0 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# casic项目 V2.0.0 + +[^_^]: # (Talk is cheap,Show me the code!) + +## 介绍 +基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus ! +基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块) +可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`! + + +#### 其他 +>* [git地址](http://192.168.0.203:8080/gitbucket) +>* [本地免登地址](http://localhost:8083/route/mockToken) diff --git a/casic-server/pom.xml b/casic-server/pom.xml new file mode 100644 index 0000000..67e7aea --- /dev/null +++ b/casic-server/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + 2.0.0 + ../pom.xml + + + casic-server + 2.0.0 + jar + casic-server + casic 的spring boot版本 + + + + + com.casic + casic-core + ${core.version} + provided + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-export-support + ${extension.version} + + + com.casic + casic-file + 2.0.0.alpha + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + + + + com.baomidou + mybatis-plus-generator + 3.5.1 + + + + org.apache.velocity + velocity-engine-core + 2.3 + + + io.swagger + swagger-annotations + 1.5.18 + compile + + + cn.hutool + hutool-all + 5.8.12 + + + commons-httpclient + commons-httpclient + 3.1 + + + + + + src/main/java + + **/*.xml + + + + + \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java new file mode 100644 index 0000000..b244820 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/CodeGenerator.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery; +import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collections; + +/** + *

+ * mybatisPlus代码生成器 + *

+ * + * @author zt + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/code") +public class CodeGenerator { + + @GetMapping("generator") + public static void main(String [] args) { + run(); + } + + public static void run() { + + FastAutoGenerator.create( + //数据源配置,url需要修改 + new DataSourceConfig.Builder("jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true", "root", "Casic203") + .dbQuery(new MySqlQuery()) + .schema("schema") + .typeConvert(new MySqlTypeConvert()) + .keyWordsHandler(new MySqlKeyWordsHandler()) + ) + + //全局配置 + .globalConfig(builder -> { + builder.author("zt") // 设置作者 + .disableOpenDir()//禁止打开输出目录 + .enableSwagger() // 开启 swagger 模式 + .fileOverride() // 覆盖已生成文件 + .outputDir(System.getProperty("user.dir") + "/casic-server/src/main/java"); // 指定输出目录 + }) + + //包配置 + .packageConfig(builder -> { + builder.parent("com.casic.missiles.modular") // 设置父包名,根据实制项目路径修改 + .moduleName("system") // 父包名路径下再新建的文件夹 + .entity("entity") // 后面这些是sys文件夹里新建的各分类文件夹 + .service("service") + .serviceImpl("service.impl") + .mapper("mapper") + .xml("mapper.xml") + .controller("controller") + //.other("other") + .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/casic-server/src/main/java/mapper/xml")); // 存放mapper.xml路径 + }) + + //策略配置 + .strategyConfig(builder -> { + builder.addInclude("patrol_log", "robot_dog_info", "route_info","route_info_detail") // 设置需要生成的表名 + .addTablePrefix() // 设置过滤表前缀 + .entityBuilder() //实体类配置 + .enableLombok() //使用lombok + .enableTableFieldAnnotation()//实体类字段注解 + .controllerBuilder()//controller配置 + .enableRestStyle()//开启restcontroller + .mapperBuilder() + .enableMapperAnnotation()//开启mapper注解 + .enableBaseResultMap()//启用 BaseResultMap 生成 + .enableBaseColumnList();//启用 BaseColumnList + }) + //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板 + .execute(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java new file mode 100644 index 0000000..b277154 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/PatrolLogController.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RestController +@RequestMapping("/system/patrolLog") +public class PatrolLogController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java new file mode 100644 index 0000000..09bdbd2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveAlgorithmDataController.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收算法数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/algorithm") +public class ReceiveAlgorithmDataController { + private final IPatrolLogService iPatrolLogService; + + @ApiOperation("接收算法数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody List mapList) { + if (mapList == null || mapList.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收算法数据 <<<<<<: {}", mapList.toString()); + + CompletableFuture.runAsync(() -> { + iPatrolLogService.savePatrolLog(mapList); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java new file mode 100644 index 0000000..80e4f5c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceiveDeviceDataController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +@Api(tags = "接收设备数据接口") +@Slf4j +@RequiredArgsConstructor +@RestController +@RequestMapping("/device") +public class ReceiveDeviceDataController { + + @ApiOperation("接收设备数据入口") + @PostMapping("/receiveData") + @ResponseBody + public ReturnDTO getProcessResult(@RequestBody Map map) { + if (map == null || map.isEmpty()) { + log.warn("接收到空或无效的数据"); + return ReturnUtil.failed("接收到空或无效的数据"); + } + + log.info(">>>>>> 接收数据 <<<<<<: {}", map.toString()); + + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + return ReturnUtil.success(); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java new file mode 100644 index 0000000..baffa6f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RobotDogInfoController.java @@ -0,0 +1,81 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RobotDogInfoDTO; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 机器人信息管理 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "设备管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/robotDogInfo") +public class RobotDogInfoController extends ExportController { + + private final IRobotDogInfoService iRobotDogInfoService; + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RobotDogInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like(ObjectUtil.isNotEmpty(requestDTO.getRobotName()), "robot_name", requestDTO.getRobotName()); + queryWrapper.eq("robot_status", "1"); + return ReturnUtil.success(super.packForBT(iRobotDogInfoService.page(page,queryWrapper))); + } + + @ApiOperation("增加设备类型") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RobotDogInfo robotDogInfo) { + + return ReturnUtil.success(iRobotDogInfoService.save(robotDogInfo)); + } + + @ApiOperation("编辑设备类型") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RobotDogInfo robotDogInfo) { + Assert.isFalse(Objects.isNull(robotDogInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.updateById(robotDogInfo)); + } + + @ApiOperation("批量删除") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRobotDogInfoService.batchDeleteDogs(idsDTO.getIds())); + } +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java new file mode 100644 index 0000000..d6ccb8e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoController.java @@ -0,0 +1,88 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.system.dto.IdsDTO; +import com.casic.missiles.modular.system.dto.ReturnDTO; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import com.casic.missiles.modular.system.exception.BusinessException; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.ReturnUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfo") +public class RouteInfoController extends ExportController { + + private final IRouteInfoService iRouteInfoService; + + @ApiOperation("增加巡航线接口") + @PostMapping("/add") + @ResponseBody + public ReturnDTO add(@RequestBody RouteInfo routeInfo) { + + return ReturnUtil.success(iRouteInfoService.saveRouteInfo(routeInfo)); + } + + + @ApiOperation("查询分页接口") + @PostMapping("/listPage") + @ResponseBody + public ReturnDTO listPage(@RequestBody RouteInfoDTO requestDTO) { + Page page = PageFactory.defaultPage(); + return ReturnUtil.success(super.packForBT(iRouteInfoService.pageList(page, requestDTO))); + } + + @ApiOperation("批量删除,需要提示已关联预置点信息!!!") + @PostMapping("/batchDelete") + @ResponseBody + public ReturnDTO batchDelete(@RequestBody IdsDTO idsDTO) { + Assert.isFalse(Objects.isNull(idsDTO.getIds()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.batchDeleteRouteInfos(idsDTO.getIds())); + } + + @ApiOperation("编辑巡航线信息") + @PostMapping("/edit") + @ResponseBody + public ReturnDTO edit(@RequestBody RouteInfo routeInfo) { + Assert.isFalse(Objects.isNull(routeInfo.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iRouteInfoService.editRouteInfo(routeInfo)); + } + + @ApiOperation("控制指令类型(startRecordMap-开始地图录制,endRecordMap-完成地图录制," + + "startRecordRoutInfo-开始巡检线路录入,endRecordRoutInfo-结束巡检线路录入,"+ + "startPatrol-开始巡检,stopPatrol-结束巡检") + @PostMapping("/control") + @ResponseBody + public ResponseDataDTO control(String command, Long robotDogId) { + iRouteInfoService.control(command, robotDogId); + return ResponseDataDTO.success(); + } + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java new file mode 100644 index 0000000..401a118 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/RouteInfoDetailController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 线路信息管理(其他关联信息待定) 前端控制器 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Api(tags = "巡航线预置点位管理模块") +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/routeInfoDetail") +public class RouteInfoDetailController { + +} + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java new file mode 100644 index 0000000..f027b31 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/PatrolLogMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface PatrolLogMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java new file mode 100644 index 0000000..bdf4553 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RobotDogInfoMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 机器人信息管理 Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RobotDogInfoMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java new file mode 100644 index 0000000..88a83a7 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoDetailMapper.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoDetailMapper extends BaseMapper { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java new file mode 100644 index 0000000..bae594b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RouteInfoMapper.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 线路信息管理(其他关联信息待定) Mapper 接口 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Mapper +public interface RouteInfoMapper extends BaseMapper { + + Page listPage(@Param("page") Page page, + @Param("requestDTO") RouteInfoDTO requestDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml new file mode 100644 index 0000000..30aebdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/PatrolLogMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, route_info_id, patrol_type, patrol_content, patrol_picture, route_number, route_x, route_y, gps_x, gps_y, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml new file mode 100644 index 0000000..182ca3d --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RobotDogInfoMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, robot_name, robot_code, robot_ip, robot_port, robot_status, robot_cell, route_id, update_time, create_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml new file mode 100644 index 0000000..1e36465 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoDetailMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, route_info_id, route_number, route_x, route_y, gps_x, gps_y, create_time, uptime_time + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml new file mode 100644 index 0000000..2542993 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/RouteInfoMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + id, community_name, community_address, route_name, robot_id, uptime_time, create_time + + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java new file mode 100644 index 0000000..03e2c93 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class IdDTO { + @NotNull(message = "主键ID不能为空") + @ApiModelProperty("任务id") + private Long id; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java new file mode 100644 index 0000000..bdbcfb2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/IdsDTO.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class IdsDTO { + @NotNull + private List ids; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java new file mode 100644 index 0000000..9656851 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/ReturnDTO.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:51 + */ +@Data +@ApiModel +public class ReturnDTO implements Serializable { + @ApiModelProperty(value = "返回码", dataType = "String") + private Integer code; + @ApiModelProperty(value = "提示信息", dataType = "String") + private String message; + @ApiModelProperty(value = "返回值", dataType = "Object") + private T data; + + public ReturnDTO(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ReturnDTO(Integer code, String message) { + this.code = code; + this.message = message; + } + + public ReturnDTO() { + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java new file mode 100644 index 0000000..99f94ff --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RobotDogInfoDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RobotDogInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("设备名称") + private String robotName; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java new file mode 100644 index 0000000..e4bced2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/RouteInfoDTO.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.system.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class RouteInfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("机器人名称") + private String robotName; + @ApiModelProperty("巡航线名称") + private String routeName; + @ApiModelProperty("小区名称") + private String communityName; + @ApiModelProperty("小区地址") + private String communityAddress; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java new file mode 100644 index 0000000..dcaa713 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/StateDTO.java @@ -0,0 +1,19 @@ +package com.casic.missiles.modular.system.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @Description: for batch use + * @Author: zt + * @Date: 2022/11/26 9:51 + */ +@Data +public class StateDTO { + @NotNull + private List ids; + + private String state; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java new file mode 100644 index 0000000..ea37177 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/PatrolLog.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("patrol_log") +@ApiModel(value = "PatrolLog对象", description = "线路信息管理(其他关联信息待定)") +public class PatrolLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡航线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("巡检类型") + @TableField("patrol_type") + private String patrolType; + + @ApiModelProperty("巡检内容") + @TableField("patrol_content") + private String patrolContent; + + @ApiModelProperty("路径名称") + @TableField("patrol_picture") + private String patrolPicture; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + public PatrolLog() { + } + + public PatrolLog(Long routeInfoId, String patrolType, + String patrolContent, String patrolPicture, + String routeNumber, + String gpsX, String gpsY) { + this.routeInfoId = routeInfoId; + this.patrolType = patrolType; + this.patrolContent = patrolContent; + this.patrolPicture = patrolPicture; + this.routeNumber = routeNumber; + this.gpsX = gpsX; + this.gpsY = gpsY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java new file mode 100644 index 0000000..454b1bc --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RobotDogInfo.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 机器人信息管理 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("robot_dog_info") +@ApiModel(value = "RobotDogInfo对象", description = "机器人信息管理") +public class RobotDogInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("机器狗名称") + @TableField("robot_name") + private String robotName; + + @ApiModelProperty("机器狗编号") + @TableField("robot_code") + private String robotCode; + + @ApiModelProperty("机器狗ip") + @TableField("robot_ip") + private String robotIp; + + @ApiModelProperty("机器狗端口") + @TableField("robot_port") + private Integer robotPort; + + @ApiModelProperty("机器狗状态(1,有效,0无效)") + @TableField("robot_status") + private String robotStatus; + + @ApiModelProperty("电量") + @TableField("robot_cell") + private String robotCell; + + @ApiModelProperty("正在执行路线id") + @TableField("route_id") + private Long routeId; + + @ApiModelProperty("修改时间") + @TableField("update_time") + private Date updateTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java new file mode 100644 index 0000000..9b88a35 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfo.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info") +@ApiModel(value = "RouteInfo对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableField("id") + private Long id; + + @ApiModelProperty("小区名称") + @TableField("community_name") + private String communityName; + + @ApiModelProperty("小区地址") + @TableField("community_address") + private String communityAddress; + + @ApiModelProperty("路径名称") + @TableField("route_name") + private String routeName; + + @ApiModelProperty("机器人ID") + @TableField("robot_id") + private Long robotId; + + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + + @ApiModelProperty("巡航预置点信息集合") + @TableField(exist = false) + private List routeInfoDetailList; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java new file mode 100644 index 0000000..be1d98a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/entity/RouteInfoDetail.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 线路信息管理(其他关联信息待定) + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Getter +@Setter +@TableName("route_info_detail") +@ApiModel(value = "RouteInfoDetail对象", description = "线路信息管理(其他关联信息待定)") +public class RouteInfoDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("巡线ID") + @TableField("route_info_id") + private Long routeInfoId; + + @ApiModelProperty("点位编号") + @TableField("route_number") + private String routeNumber; + + @ApiModelProperty("巡检点相当位置x") + @TableField("route_x") + private String routeX; + + @ApiModelProperty("巡检点相当位置y") + @TableField("route_y") + private String routeY; + + @ApiModelProperty("gps_x坐标") + @TableField("gps_x") + private String gpsX; + + @ApiModelProperty("gps_y坐标") + @TableField("gps_y") + private String gpsY; + + @ApiModelProperty("创建时间") + @TableField("create_time") + private Date createTime; + + @ApiModelProperty("更新时间") + @TableField("uptime_time") + private Date uptimeTime; + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java new file mode 100644 index 0000000..7924c30 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/enums/BusinessExceptionEnum.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.system.enums; + +import com.casic.missiles.model.exception.AbstractBaseExceptionEnum; + +/** + * @Description: + */ +public enum BusinessExceptionEnum implements AbstractBaseExceptionEnum { + + ID_NULL(2400, "主键不能为空"), + + HANDLE_FAILED(500, "操作失败"), + + ALARM_CODE_FAILED(5003, "报警编号不能为空"), + + CODE_NULL(501, "字典code不能为空"), + + SAVE_FAILED(400, "保存失败"), + + TEST_URL_NULL(2090, "测试地址为空!"), + + PARAM_IS_NULL(2080, "参数有误!"), + + FILE_NULL(2091, "导入文件为空!"), + + RECORD_NULL(2093, "未查询到相关记录!"), + + FILE_READ_ROW_FAILED(2092, "读入excel异常!"), + + MONITOR_VALID_FAILED(2099, "云台登录地址重复"), + + DEVICE_DUPLICATE(2011, "设备编号重复"); + + + private Integer code; + private String message; + + BusinessExceptionEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + @Override + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java new file mode 100644 index 0000000..c6ed867 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.event; + +import com.casic.missiles.model.application.event.core.ModelEvent; +import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum; +import com.casic.missiles.modular.system.model.User; + +/** + * 用户事件 + * + * @author lwh + */ +public class UserEvent extends ModelEvent { + /** + * Create a new {@code ApplicationEvent}. + * + * @param type 事件类型 + * @param source the object on which the event initially occurred or with + * which the event is associated (never {@code null}) + */ + public UserEvent(AbstractEventTypeEnum type, User source) { + super(type, source); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java new file mode 100644 index 0000000..4480ef2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.core.application.event.UserLoginEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserOneListener { + @EventListener + public void onApplicationEvent(UserLoginEvent event) { + log.debug("用户1订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java new file mode 100644 index 0000000..8447a22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.event.listener; + +import com.casic.missiles.model.application.event.core.EventSubscriber; +import com.casic.missiles.modular.system.event.UserEvent; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * 用户事件订阅 + * + * @author lwh + */ +@Slf4j +@Component +public class UserTwoListener extends EventSubscriber { + @Override + public void onApplicationEvent(UserEvent event) { + log.debug("用户2订阅:{}", event); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java new file mode 100644 index 0000000..c636688 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/exception/BusinessException.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.exception; + + +import com.casic.missiles.modular.system.enums.BusinessExceptionEnum; +import lombok.Getter; +import lombok.Setter; + +/** + * @Description: 业务异常 + * @Author: wangpeng + * @Date: 2022/11/24 17:52 + */ +public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + + @Getter + @Setter + private Integer code; + @Getter + @Setter + private String message; + + public BusinessException(Integer code, String message) { + super(message); + this.code = code; + this.message = message; + } + + public BusinessException(BusinessExceptionEnum exceptionEnum) { + super(exceptionEnum.getMessage()); + this.code = exceptionEnum.getCode(); + this.message = exceptionEnum.getMessage(); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..dc2f09b --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/handler/GlobalExceptionHandler.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.handler; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.exception.BusinessException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.annotation.Order; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Slf4j +@Order(1) +@ControllerAdvice +public class GlobalExceptionHandler { + + /** + * 业务异常捕获处理 + */ + @ResponseBody + @ExceptionHandler({BusinessException.class}) + public Object handleError(BusinessException exception) { + return ResponseData.error(exception.getCode(), exception.getMessage()); + } + +// /** +// * 编号重复异常捕获处理 +// */ +// @ResponseBody +// @ExceptionHandler({DuplicateKeyException.class}) +// public Object handleDuplicateKeyException() { +// return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage()); +// } +// +// /** +// * 参数校验失败异常 +// */ +// @ResponseBody +// @ExceptionHandler({MethodArgumentNotValidException.class}) +// public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) { +// return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage()); +// } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java new file mode 100644 index 0000000..8dde9b4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IPatrolLogService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IPatrolLogService extends IService { + + void savePatrolLog(List mapList); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java new file mode 100644 index 0000000..1c6f24e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRobotDogInfoService.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRobotDogInfoService extends IService { + + boolean batchDeleteDogs(List ids); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java new file mode 100644 index 0000000..29ead22 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoDetailService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoDetailService extends IService { + + List getRouteInfoDetailList(Long routeInfoId); + + boolean deleteByRouteInfoIds(List routeInfoIds); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java new file mode 100644 index 0000000..814ffde --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRouteInfoService.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +public interface IRouteInfoService extends IService { + + boolean saveRouteInfo(RouteInfo routeInfo); + + boolean batchDeleteRouteInfos(List ids); + + boolean editRouteInfo(RouteInfo routeInfo); + + void control(String command,Long robotDogId); + + Page pageList(Page page , RouteInfoDTO requestDTO); + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java new file mode 100644 index 0000000..07c7ca3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/PatrolLogServiceImpl.java @@ -0,0 +1,70 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.modular.system.dao.PatrolLogMapper; +import com.casic.missiles.modular.system.entity.PatrolLog; +import com.casic.missiles.modular.system.service.IPatrolLogService; +import com.casic.missiles.modular.system.util.CommonUtil; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class PatrolLogServiceImpl extends ServiceImpl implements IPatrolLogService { + + private static final Logger logger = LoggerFactory.getLogger(PatrolLogServiceImpl.class); + @Resource + private ICommonFileService commonFileService; + + /** + * 存储算法上报的消息 + * + * @param mapList + */ + @Override + public void savePatrolLog(List mapList) { + try { + List patrolLogList = new ArrayList<>(); + for (Map map : mapList) { + String picture = CommonUtil.getString(map, "picture"); + String picturePath = ""; + if (ObjectUtil.isNotEmpty(picture)) { + picturePath = commonFileService.saveFileBase64Image("data:image/png;base64,"+picture); + } + patrolLogList.add(new PatrolLog(1L, CommonUtil.getString(map, "reportType"), + CommonUtil.getString(map, "reportContent"), + picturePath, + CommonUtil.getString(map, "routeNumber"), + "", "")); + } + this.saveBatch(patrolLogList); + + //推送第三方 + CompletableFuture.runAsync(() -> { +// ResponseResolver.makeResponse(map); + } + ); + } catch (Exception e) { + logger.error("Unexpected error: {}", e.getMessage(), e); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java new file mode 100644 index 0000000..ad9caa9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RobotDogInfoServiceImpl.java @@ -0,0 +1,31 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RobotDogInfoMapper; +import com.casic.missiles.modular.system.entity.RobotDogInfo; +import com.casic.missiles.modular.system.service.IRobotDogInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 机器人信息管理 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RobotDogInfoServiceImpl extends ServiceImpl implements IRobotDogInfoService { + + + @Override + public boolean batchDeleteDogs(List ids) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("id", ids); + updateWrapper.set("robot_status", "0"); + return this.update(updateWrapper); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java new file mode 100644 index 0000000..ca9d08e --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoDetailServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoDetailMapper; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@Service +public class RouteInfoDetailServiceImpl extends ServiceImpl implements IRouteInfoDetailService { + + @Override + public List getRouteInfoDetailList(Long routeInfoId) { + if (routeInfoId != null) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("route_info_id", routeInfoId); + return baseMapper.selectList(queryWrapper); + } + return null; + } + + @Override + public boolean deleteByRouteInfoIds(List routeInfoIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (routeInfoIds != null && routeInfoIds.size() > 0) { + queryWrapper.in("route_info_id", routeInfoIds); + return baseMapper.delete(queryWrapper) > 0; + } + return true; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java new file mode 100644 index 0000000..7d85040 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RouteInfoServiceImpl.java @@ -0,0 +1,112 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RouteInfoMapper; +import com.casic.missiles.modular.system.dto.RouteInfoDTO; +import com.casic.missiles.modular.system.entity.RouteInfo; +import com.casic.missiles.modular.system.entity.RouteInfoDetail; +import com.casic.missiles.modular.system.service.IRouteInfoDetailService; +import com.casic.missiles.modular.system.service.IRouteInfoService; +import com.casic.missiles.modular.system.util.SnowFlakeUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 线路信息管理(其他关联信息待定) 服务实现类 + *

+ * + * @author zt + * @since 2025-03-14 + */ +@RequiredArgsConstructor +@Service +public class RouteInfoServiceImpl extends ServiceImpl implements IRouteInfoService { + + private final IRouteInfoDetailService detailService; + + @Transactional + @Override + public boolean saveRouteInfo(RouteInfo routeInfo) { + + //先保存巡航线路信息 + Long routeInfoId = SnowFlakeUtil.getId(); + routeInfo.setId(routeInfoId); + this.save(routeInfo); + //再保存巡航预置点信息 + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfoId); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return true; + } + + + @Override + public Page pageList(Page page, RouteInfoDTO requestDTO) { + + Page pipelinePage = this.baseMapper.listPage(page, requestDTO); + if (ObjectUtil.isNotEmpty(pipelinePage.getRecords())) { + for (RouteInfo routeInfo : pipelinePage.getRecords()) { + routeInfo.setRouteInfoDetailList(detailService.getRouteInfoDetailList(routeInfo.getId())); + } + } + return pipelinePage; + } + + @Transactional + @Override + public boolean batchDeleteRouteInfos(List ids) { + //先删除巡航线预置点信息 + detailService.deleteByRouteInfoIds(ids); + //再删除巡航线信息 + return this.removeByIds(ids); + } + + @Transactional + @Override + public boolean editRouteInfo(RouteInfo routeInfo) { + + if (ObjectUtil.isNotEmpty(routeInfo.getRouteInfoDetailList())) { + detailService.deleteByRouteInfoIds(Arrays.asList(routeInfo.getId())); + for (RouteInfoDetail routeInfoDetail : routeInfo.getRouteInfoDetailList()) { + routeInfoDetail.setRouteInfoId(routeInfo.getId()); + } + detailService.saveBatch(routeInfo.getRouteInfoDetailList()); + } + return this.updateById(routeInfo); + } + + @Override + public void control(String command, Long robotDogId) { + switch (command) { + case "startRecordMap": +// this.deviceInit(detectorId); + break; + case "endRecordMap": +// this.pressurize(detectorId); + break; + case "startRecordRoutInfo": +// this.depress(detectorId); + break; + case "startPatrol": +// this.depress(detectorId); + break; + case "stopPatrol": +// this.depress(detectorId); + break; + case "endRecordRoutInfo": + + default: + break; + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java new file mode 100644 index 0000000..8729846 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/CommonUtil.java @@ -0,0 +1,47 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; + +public class CommonUtil { + public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static boolean isNumber(String str) { + if (StrUtil.isNotEmpty(str)) { + return str.matches("-?\\d+(\\.\\d+)?"); + } + return false; + } + + public static String DateFormat(String dataString) { + + String strymd = dataString.substring(0, 8); + String str1 = strymd.substring(0, 4) + "-" + strymd.substring(4, 6) + "-" + strymd.substring(6, 8) + " "; + String strhms = dataString.substring(8); + String str2 = strhms.substring(0, 2) + ":" + strhms.substring(2, 4) + ":" + strhms.substring(4, 6); + dataString = str1 + str2; + return dataString; + } + + + public static String getString(Map objMap, String name) { + + return ObjectUtil.isNotNull(objMap.get(name)) ? objMap.get(name).toString() : ""; + + } + + public static Predicate distinctByProperty(Function keyExtractor) { + Map map = new ConcurrentHashMap<>(); + return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java new file mode 100644 index 0000000..d1ff9eb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/HttpClientUtils.java @@ -0,0 +1,138 @@ +package com.casic.missiles.modular.system.util; + + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; + +import java.io.IOException; + +public class HttpClientUtils { + + /** + * ���� post������ʱ���Ӧ�ò����ݴ��ݲ�����ͬ���ز�ͬ���
+ */ + public static String post(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + // for (Map.Entry entry : headers.entrySet()) { + method.addRequestHeader("Content-type", + "application/json; charset=utf-8"); + method.addRequestHeader("Accept", "application/json"); +// method.addRequestHeader("J-WSSE", JWSSE); + // method.setEntity(new StringEntity(jsonParam.toString(), + // Charset.forName("UTF-8"))); + + // method.setRequestHeader(entry.getKey(), entry.getValue()); + // method.setRequestHeader("Accept-Charset", "UTF-8"); + // } + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * post�ύ�� + */ + public static String postForm(String uri, String body) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + PostMethod method = new PostMethod(uri); + method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// + method.addRequestHeader("Accept", "application/json"); + method.setRequestBody(body); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return new String(method.getResponseBody(), "UTF-8"); +// return method.getResponseBodyAsString(); + // return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return e.getMessage(); + } + return null; + } + + /** + * ���� get���� + */ + @SuppressWarnings("deprecation") + public static String get(String uri) { + HttpClient client = new HttpClient(); + client.setTimeout(6000); + GetMethod method = new GetMethod(uri); + try { + int statusCode = client.executeMethod(method); + if (statusCode == HttpStatus.SC_OK) { + return method.getResponseBodyAsString(); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + public static void main(String[] args) throws Exception { + // try { + // System.out + // .println(HTTP + // .get("http://v.juhe.cn/sms/send?mobile=13691291634&tpl_id=42731&tpl_value=%23username%23%3D%E4%BD%99%E4%BD%B3%E5%BB%BA%26%23startTime%23%3D2017-08-15+14%3A30%26%23endTime%23%3D2017-08-15+17%3A00&dtype=json&key=302dc9a8655b1de25b1e1258db99f4ea")); + // } catch (Exception e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // + // String uri = "http://wrs.tunnel.qydev.com/ga_webservice/zdryPort"; + // + // String xml = + // "" + // + "" + // + "" + // + "" + // + " " + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "1" + // + "" + // + "" + ""; + // Map headers = new HashMap(); + // // headers.put("Content-Type", "text/xml;utf-8"); +// String uri = "http://22.192.40.34:8080/qlimg/imgserver/uploadBase64"; +// String body = "data:image/png," +// + Img.img2base64("d:/111.png"); +// String re = HTTP.post(uri, body); +// System.out.println(re); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java new file mode 100644 index 0000000..52a1138 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/InConditionDriver.java @@ -0,0 +1,27 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.ibatis.mapping.SqlSource; +import org.apache.ibatis.scripting.LanguageDriver; +import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver; +import org.apache.ibatis.session.Configuration; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 解决mybatis in条件写得难看的问题 + */ +public class InConditionDriver extends XMLLanguageDriver + implements LanguageDriver { + private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); + + public SqlSource createSqlSource(Configuration configuration, String script, Class parameterType) { + Matcher matcher = inPattern.matcher(script); + if (matcher.find()) { + script = matcher.replaceAll("(#{__item})"); + } + script = ""; + return super.createSqlSource(configuration, script, parameterType); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java new file mode 100644 index 0000000..2f5abbd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/JsonUtil.java @@ -0,0 +1,135 @@ +/* + * Copyright Notice: + * Copyright 1998-2008, Huawei Technologies Co., Ltd. ALL Rights Reserved. + * + * Warning: This computer software sourcecode is protected by copyright law + * and international treaties. Unauthorized reproduction or distribution + * of this sourcecode, or any portion of it, may result in severe civil and + * criminal penalties, and will be prosecuted to the maximum extent + * possible under the law. + */ + +package com.casic.missiles.modular.system.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import java.io.IOException; + +public class JsonUtil { + + private static ObjectMapper objectMapper; + + static { + objectMapper = new ObjectMapper(); + + // 设置FAIL_ON_EMPTY_BEANS属性,当序列化空对象不要抛异常 + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + // 设置FAIL_ON_UNKNOWN_PROPERTIES属性,当JSON字符串中存在Java对象没有的属性,忽略 + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * Convert Object to JsonString + * + * @param jsonObj + * @return + */ + public static String jsonObj2Sting(Object jsonObj) { + String jsonString = null; + + try { + jsonString = objectMapper.writeValueAsString(jsonObj); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonString; + } + + /** + * Convert JsonString to Simple Object + * + * @param jsonString + * @param cls + * @return + */ + public static T jsonString2SimpleObj(String jsonString, Class cls) { + T jsonObj = null; + + try { + jsonObj = objectMapper.readValue(jsonString, cls); + } catch (IOException e) { + System.out.printf("pasre json Object[{}] to string failed.",jsonString); + } + + return jsonObj; + } + + /** + * Method that will convert object to the ObjectNode. + * + * the source data; if null, will return null. + * @return the ObjectNode data after converted. + */ + public static ObjectNode convertObject2ObjectNode(T object) + throws Exception { + if (null == object) { + return null; + } + + ObjectNode objectNode = null; + + if (object instanceof String) { + objectNode = convertJsonStringToObject((String) object, + ObjectNode.class); + } else { + objectNode = convertValue(object, ObjectNode.class); + } + + return objectNode; + } + + /** + * Method that will convert the json string to destination by the type(cls). + * + * @param jsonString + * the source json string; if null, will return null. + * @param cls + * the destination data type. + * @return + */ + public static T convertJsonStringToObject(String jsonString, + Class cls) throws Exception { + if (null == jsonString || jsonString.equalsIgnoreCase("") == true) { + return null; + } + + try { + T object = objectMapper.readValue(jsonString, cls); + return object; + } catch (Exception e) { + throw new Exception(e); + } + } + + /** + * Method that will convert from given value into instance of given value + * type. + * + * @param fromValue + * @param toValueType + * @return + */ + private static T convertValue(Object fromValue, Class toValueType) + throws Exception { + try { + return objectMapper.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new Exception(e); + } + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java new file mode 100644 index 0000000..7d9318c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/LonlatConver.java @@ -0,0 +1,219 @@ +package com.casic.missiles.modular.system.util; + + +public class LonlatConver { +// public static void main(String[] args) { +// Double lat = 116.078682; +// Double lon = 27.751289; +// double[] doubleArr1 = wgs84_To_Gcj02(lat, lon); +// System.out.println(doubleArr1[0]+"===="+doubleArr1[1]); +// double[] doubleArr = gcj02_To_Bd09(doubleArr1[0], doubleArr1[1]); +//// double[] doubleArr = gcj02_To_Bd09(lat, lon); +// System.out.println(doubleArr[0]+"===="+doubleArr[1]); +// +// double[] doubleArr2 = gcj02_To_Wgs84(lat, lon); +// System.out.println(doubleArr2[0]+""+"===="+doubleArr2[1]+""); +// +// } + + /** + * a + */ + public final static double a = 6378245.0; + /** + * ee + */ + public final static double ee = 0.00669342162296594323; + + //圆周率 GCJ_02_To_WGS_84 + public final static double pi = 3.14159265358979324; + /** + * @Description WGS84 to 火星坐标系 (GCJ-02) + * @param lon 经度 + * @param lat 纬度 + * @return + */ + public static double[] wgs84_To_Gcj02(double lon, double lat) { + if (outOfChina(lat, lon)) { + return null; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLon, mgLat }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to WGS84 + * @param lon + * @param lat + * @return + */ + public static double[] gcj02_To_Wgs84(double lon, double lat) { + double[] gps = transform(lat, lon); + double lontitude = lon * 2 - gps[1]; + double latitude = lat * 2 - gps[0]; + return new double[] { lontitude, latitude }; + } + + /** + * @Description 火星坐标系 (GCJ-02) to 百度坐标系 (BD-09) + * @param gg_lon + * @param gg_lat + * @return + */ + public static double[] gcj02_To_Bd09(double gg_lon, double gg_lat) { + double x = gg_lon, y = gg_lat; + double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi); + double bd_lon = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[] { bd_lon, bd_lat }; + } + + /** + * @Description 百度坐标系 (BD-09) to 火星坐标系 (GCJ-02) + * @param bd_lon + * @param bd_lat + * @return + */ + public static double[] bd09_To_Gcj02(double bd_lon, double bd_lat) { + double x = bd_lon - 0.0065, y = bd_lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi); + double gg_lon = z * Math.cos(theta); + double gg_lat = z * Math.sin(theta); + return new double[] { gg_lon, gg_lat }; + } + /** + * @Description 百度坐标系 (BD-09) to WGS84 + * @param bd_lat + * @param bd_lon + * @return + */ + public static double[] bd09_To_Wgs84(double bd_lon,double bd_lat) { + + double[] gcj02 = LonlatConver.bd09_To_Gcj02(bd_lon, bd_lat); + double[] map84 = LonlatConver.gcj02_To_Wgs84(gcj02[0], gcj02[1]); + return map84; + + } + + /** + * @Description 判断是否在中国范围内 + * @param lat + * @param lon + * @return + */ + public static boolean outOfChina(double lat, double lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + } + + /** + * @Description transform + * @param lat + * @param lon + * @return + */ + private static double[] transform(double lat, double lon) { + if (outOfChina(lat, lon)) { + return new double[] { lat, lon }; + } + double dLat = transformLat(lon - 105.0, lat - 35.0); + double dLon = transformLon(lon - 105.0, lat - 35.0); + double radLat = lat / 180.0 * pi; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); + double mgLat = lat + dLat; + double mgLon = lon + dLon; + return new double[] { mgLat, mgLon }; + } + + /** + * @Description transformLat + * @param x + * @param y + * @return + */ + private static double transformLat(double x, double y) { + double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0; + return ret; + } + + /** + * @Description transformLon + * @param x + * @param y + * @return + */ + public static double transformLon(double x, double y) { + double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 + * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 + * pi)) * 2.0 / 3.0; + return ret; + } + + /** + * GPS经纬度转换为 度(3114.1717,12122.1067 → 121.37300779,31.23436014) + * @param dms 坐标 + * @param type 坐标类型 E/N + * @return String 解析后的经纬度 + */ + public static String gpsToWgs84(String dms, String type) { + if (dms == null || dms.equals("")) { + return "0.0"; + } + double result = 0.0D; + String temp = ""; + + if (type.equals("E")) {//经度 + String e1 = dms.substring(0, 3);//截取3位数字,经度共3位,最多180度 + //经度是一伦敦为点作南北两极的线为0度,所有往西和往东各180度 + String e2 = dms.substring(3, dms.length());//需要运算的小数 + + result = Double.parseDouble(e1); +/* System.out.println("e2===="+e2); + System.out.println("===="+Double.parseDouble(e2) / 60.0D);*/ + result += (Double.parseDouble(e2) / 60.0D); + temp = String.valueOf(result); + if (temp.length() > 11) { + temp = e1 + temp.substring(temp.indexOf("."), 11); + } + } else if (type.equals("N")) { //纬度,纬度是以赤道为基准,相当于把地球分两半,两个半球面上的点和平面夹角0~90度 + String n1 = dms.substring(0, 2);//截取2位,纬度共2位,最多90度 + String n2 = dms.substring(2, dms.length()); + + result = Double.parseDouble(n1); +/* System.out.println("n2===="+n2); + System.out.println("===="+Double.parseDouble(n2) / 60.0D);*/ + result += Double.parseDouble(n2) / 60.0D; + temp = String.valueOf(result); + if (temp.length() > 10) { + temp = n1 + temp.substring(temp.indexOf("."), 10); + } + } + return temp; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java new file mode 100644 index 0000000..9806fe2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/PositionUtil.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.util; + +public class PositionUtil { + /** + * 方法四:(高德地图计算方法) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static Double getDistance4(double longitude1, double latitude1, double longitude2, double latitude2) { + if (longitude1 == 0 || latitude1 == 0 || latitude2 == 0 || longitude2 == 0) { + return 0.0; + } + longitude1 *= 0.01745329251994329; + latitude1 *= 0.01745329251994329; + longitude2 *= 0.01745329251994329; + latitude2 *= 0.01745329251994329; + double var1 = Math.sin(longitude1); + double var2 = Math.sin(latitude1); + double var3 = Math.cos(longitude1); + double var4 = Math.cos(latitude1); + double var5 = Math.sin(longitude2); + double var6 = Math.sin(latitude2); + double var7 = Math.cos(longitude2); + double var8 = Math.cos(latitude2); + double[] var10 = new double[3]; + double[] var20 = new double[3]; + var10[0] = var4 * var3; + var10[1] = var4 * var1; + var10[2] = var2; + var20[0] = var8 * var7; + var20[1] = var8 * var5; + var20[2] = var6; + + return Math.asin(Math.sqrt((var10[0] - var20[0]) * (var10[0] - var20[0]) + (var10[1] - var20[1]) * (var10[1] - var20[1]) + (var10[2] - var20[2]) * (var10[2] - var20[2])) / 2.0) * 1.27420015798544E7; + // 结果四舍五入 保留2位小数 + //return new BigDecimal(distance).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java new file mode 100644 index 0000000..5167e08 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/RegUtil.java @@ -0,0 +1,68 @@ +package com.casic.missiles.modular.system.util; + + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.util.regex.Pattern.compile; + +/** + * Created by test203 on 2019/5/23. + */ +public class RegUtil{ + + + public static boolean isDecimal2(String str) {// 判断小数点后2位的数字的正则表达式 + + Pattern pattern = compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); +// Pattern pattern = Pattern.compile("^\\\\d{0,8}\\\\.{0,1}(\\\\d{1,2})?$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isNumOrLetter(String str) {// 判断字母或数字 + + Pattern pattern = compile("^\\w+$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isIp(String str) {// 判断iP + if (StrUtil.isBlank(str)) { + return false; + } + + Pattern pattern = compile("([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + public static boolean isPort(String str) {// 判断端口号 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + + public static boolean isInteger(String str) {// 判断整数 + if (StrUtil.isBlank(str)) { + return false; + } + Pattern pattern = compile("^[1-9]\\d*$"); + Matcher match = pattern.matcher(str); + return match.matches(); + + } + + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java new file mode 100644 index 0000000..1e8c12a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/ReturnUtil.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.system.util; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.ReturnDTO; + +/** + * @Description: for return + * @Author: wangpeng + * @Date: 2022/11/27 00:56 + */ +public class ReturnUtil { + public ReturnUtil() { + } + + public static ReturnDTO success() { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE); + } + + public static ReturnDTO success(Object data) { + return new ReturnDTO(ResponseData.DEFAULT_SUCCESS_CODE, ResponseData.DEFAULT_SUCCESS_MESSAGE, data); + } + + public static ReturnDTO success(Integer code, String message) { + return new ReturnDTO(code, message); + } + + public static ReturnDTO failed() { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, ResponseData.DEFAULT_ERROR_MESSAGE); + } + + public static ReturnDTO failed(String message) { + return new ReturnDTO(ResponseData.DEFAULT_ERROR_CODE, message); + } + + public static ReturnDTO failed(Integer code, String message) { + return new ReturnDTO(code, message); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java new file mode 100644 index 0000000..b241c29 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SnowFlakeUtil.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +import javax.annotation.Resource; + +@Resource +public class SnowFlakeUtil { + private long machineId ; + private long dataCenterId ; + + + public SnowFlakeUtil(long machineId, long dataCenterId) { + this.machineId = machineId; + this.dataCenterId = dataCenterId; + } + + /** + * 成员类,SnowFlakeUtil的实例对象的保存域 + */ + private static class IdGenHolder { + private static final SnowFlakeUtil instance = new SnowFlakeUtil(); + } + + /** + * 外部调用获取SnowFlakeUtil的实例对象,确保不可变 + */ + public static SnowFlakeUtil get() { + return IdGenHolder.instance; + } + + /** + * 初始化构造,无参构造有参函数,默认节点都是0 + */ + public SnowFlakeUtil() { + this(0L, 0L); + } + + private Snowflake snowflake = IdUtil.createSnowflake(machineId,dataCenterId); + + public synchronized long id(){ + return snowflake.nextId(); + } + + public static Long getId() { + return SnowFlakeUtil.get().id(); + } +} + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java new file mode 100644 index 0000000..fe5db6a --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/SpringContextUtil.java @@ -0,0 +1,102 @@ +package com.casic.missiles.modular.system.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ForkJoinPool; +import java.util.function.Function; + + +@Component +public class SpringContextUtil implements BeanFactoryPostProcessor, ApplicationContextAware { + /** + * Spring应用上下文环境 + */ + private static ApplicationContext applicationContext; + + private static ConfigurableListableBeanFactory beanFactory; + + /** + * 实现ApplicationContextAware接口的回调方法,设置上下文环境 + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtil.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringContextUtil.beanFactory = beanFactory; + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + +// public static Object getBean(String beanId) throws BeansException { +// return applicationContext.getBean(beanId); +// } + + public static T getBean(Class requiredType) { + return (T) applicationContext.getBean(requiredType); + } + + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + public static T registerBean(String beanName, Class clazz, Function function) { + // 生成bean定义 + BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); + // 执行bean处理函数 + AbstractBeanDefinition beanDefinition = function.apply(beanDefinitionBuilder); + BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) SpringContextUtil.beanFactory; + // 判断是否通过beanName注册 + if (StringUtils.isNotBlank(beanName) && !containsBean(beanName)) { + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); + } else { + // 非命名bean注册 + String name = BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, beanFactory); + return getBean(name); + } + } + + public static T registerBean(String beanName, Class clazz, List args, Map property) { + return registerBean(beanName, clazz, beanDefinitionBuilder -> { + // 放入构造参数 + if (!CollectionUtils.isEmpty(args)) { + args.forEach(beanDefinitionBuilder::addConstructorArgValue); + } + // 放入属性 + if (!CollectionUtils.isEmpty(property)) { + property.forEach(beanDefinitionBuilder::addPropertyValue); + } + return beanDefinitionBuilder.getBeanDefinition(); + }); + } + + @Bean + public ForkJoinPool forkJoinPool() { + return new ForkJoinPool(100); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java new file mode 100644 index 0000000..0af459c --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/util/TimeConvertUtil.java @@ -0,0 +1,85 @@ +package com.casic.missiles.modular.system.util; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + + +public class TimeConvertUtil { + public static String TimeConverter(String totalMinutesStr){ + if(ObjectUtil.isNotEmpty(totalMinutesStr)){ + int totalMinutes = Integer.valueOf(totalMinutesStr); + int days = totalMinutes/(24*60); + int hours = (totalMinutes%(24*60))/60; + int minutes = totalMinutes%60; + return String.format("%d天%d时%d分",days,hours,minutes); + } + return ""; + } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + for(int i=0;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } + + public static List getPastSevenDays() { + List dates = new ArrayList<>(); + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (int i = 6; i >= 0; i--) { + String date = currentDate.minusDays(i).format(formatter); + dates.add(date); + } + return dates; + } + + public static List getYearMonth() { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + List list = new ArrayList<>(); + for (int i = 1; i < 13; i++) { + String month = i + ""; + if (i < 10) { + month = "0" + i; + } + list.add(year + "-" + month); + } + return list; + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml new file mode 100644 index 0000000..34c2189 --- /dev/null +++ b/casic-web/pom.xml @@ -0,0 +1,177 @@ + + + 4.0.0 + + com.casic + casic-robot-dog + ../pom.xml + 2.0.0 + + casic-web + 2.0.0 + jar + casic-web + casic web启动入口 + + + + dev + + true + + + dev + + + + test + + test + + + + prod + + prod + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + io.micrometer + micrometer-core + + + + + org.springframework.boot + spring-boot-starter-jdbc + + + + com.casic + casic-core + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + + + io.springfox + springfox-swagger-ui + + + + + com.casic + casic-admin-support + ${admin.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + com.dameng + DmJdbcDriver18 + 1.8 + + + com.casic + casic-area-starter + ${admin.version} + + + + com.casic + casic-server + ${pro.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + /config/*-*.yml + **/MockController.class + + + + com.casic.missiles.CasicApplication + true + ./ + + + + + + org.apache.maven.plugins + maven-assembly-plugin + ${maven.assembly.plugin.version} + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + + src/main/resources + + + /config/*/* + /config/*-*.yml + + true + + + src/main/java + + **/*.xml + + true + + + + \ No newline at end of file diff --git a/casic-web/src/main/build/bin/start.bat b/casic-web/src/main/build/bin/start.bat new file mode 100644 index 0000000..1db4e88 --- /dev/null +++ b/casic-web/src/main/build/bin/start.bat @@ -0,0 +1,4 @@ +@echo off +title ${project.build.finalName} +java -jar ./lib/${project.build.finalName}.jar +@pause diff --git a/casic-web/src/main/build/bin/start.sh b/casic-web/src/main/build/bin/start.sh new file mode 100644 index 0000000..c00b1ef --- /dev/null +++ b/casic-web/src/main/build/bin/start.sh @@ -0,0 +1,2 @@ +java -jar ./lib/${project.build.finalName}.jar + diff --git a/casic-web/src/main/build/package.xml b/casic-web/src/main/build/package.xml new file mode 100644 index 0000000..c9259ad --- /dev/null +++ b/casic-web/src/main/build/package.xml @@ -0,0 +1,43 @@ + + + package + + zip + tar.gz + + true + + + + true + true + lib + runtime + + + + + src/main/build/bin + + start.bat + start.sh + + true + 0744 + / + + + src/main/resources/config + true + + *.yml + /*/* + + /config + + + src/main/resources/i18n + / + + + \ No newline at end of file diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java new file mode 100644 index 0000000..739eb99 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -0,0 +1,28 @@ +package com.casic.missiles; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + * SpringBoot方式启动类 + * + * @author lwh + * @Date 2021/06/06 12:06 + */ +@SpringBootApplication +@EnableCaching +@EnableTransactionManagement(proxyTargetClass = true) +@EnableAsync +@Slf4j +public class CasicApplication { + public static void main(String[] args) { + SpringApplication.run(CasicApplication.class, args); + log.info("CasicApplication is success!"); + } + +} diff --git a/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java new file mode 100644 index 0000000..e30585b --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/CasicServletInitializer.java @@ -0,0 +1,18 @@ +package com.casic.missiles; + +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * Guns Web程序启动类 + * + * @author fengshuonan + * @date 2017-05-21 9:43 + */ +public class CasicServletInitializer extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CasicApplication.class); + } +} diff --git a/casic-web/src/main/java/com/casic/missiles/controller/MockController.java b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java new file mode 100644 index 0000000..eae6c54 --- /dev/null +++ b/casic-web/src/main/java/com/casic/missiles/controller/MockController.java @@ -0,0 +1,82 @@ +package com.casic.missiles.controller; + +import cn.hutool.core.util.StrUtil; +import com.casic.missiles.core.application.enums.LoginType; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.core.model.auth.CasicCustomToken; +import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.response.SuccessResponseData; +import com.casic.missiles.modular.domain.constants.PermissionConstants; +import com.casic.missiles.modular.interfaces.log.LogManager; +import com.casic.missiles.modular.interfaces.log.factory.LogTaskFactory; +import com.casic.missiles.modular.system.dto.LoginSuccessDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.security.NoSuchAlgorithmException; +import java.util.Map; + +import static com.casic.missiles.core.util.HttpContext.getIp; + + +/** + * 仅为mock登录使用 + * + * @author lenovo + */ +@Controller +@RequestMapping("/route") +@Slf4j +public class MockController extends BaseController { + + /** + * 获取mockToken + */ + @GetMapping("/mockToken") + @ResponseBody + public Object mockToken(String username, String password) { + super.getSession().setAttribute(PermissionConstants.IS_APP, false); + SuccessResponseData resultData = new SuccessResponseData(); + if (StrUtil.hasEmpty(username, password)) { + username = "admin"; + password = "111111"; + } + Subject currentUser = ShiroKit.getSubject(); + + try { + Map key = RSAUtils.genKeyPair(); + ShiroKit.getSession().setAttribute(PermissionConstants.PRIVATE_KEY, key.get(RSAUtils.RSAPrivateKey)); + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + + //token自定义 + CasicCustomToken token = new CasicCustomToken(username, password); + token.setType(LoginType.PASSWORD); + token.setRememberMe(false); + + try { + currentUser.login(token); + } catch (Exception e) { + e.printStackTrace(); + } + AuthUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + resultData.setData(new LoginSuccessDTO(ShiroKit.getSession().getId().toString(), null)); + resultData.setMessage("登录成功"); + return resultData; + } +} diff --git a/casic-web/src/main/resources/META-INF/spring-devtools.properties b/casic-web/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000..e3b0a7f --- /dev/null +++ b/casic-web/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.beetl=/beetl-2.7.15.jar \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml new file mode 100644 index 0000000..be5aa7e --- /dev/null +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -0,0 +1,30 @@ +server: + port: 8085 +################### spring配置 ################### +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://111.198.10.15:11336/casic_robot_dog?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&&serverTimezone=GMT%2B8 + username: root + password: Casic203 +jms: + pub-sub-domain: true +# session: +# store-type: redis +# redis: +# host: 111.198.10.15 +# port: 11412 +# password: ew5T4K3#203lwh +# serializer: org.springframework.data.redis.serializer.StringRedisSerializer +# redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer +casic: + #kaptcha-open: false #是否开启登录时验证码 (true/false) + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/webjars/**,/device/receiveData,/algorithm/receiveData + #flowable数据源和多数据源配置 + db: + init: + enable: false +logging: + level.root: info + level.com.casic: debug + level.org.springframework.web: info \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml new file mode 100644 index 0000000..6553b10 --- /dev/null +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -0,0 +1,34 @@ +server: + port: 8085 +# context-path: /callcenter/api +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://10.18.0.20:3306/casic_smartcity_callcenter?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true + # session: + # store-type: redis + redis: + host: 127.0.0.1 + port: 6379 + password: + +#flowable数据源和多数据源配置 +casic: + kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + flowable: + datasource: + url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml new file mode 100644 index 0000000..54d7252 --- /dev/null +++ b/casic-web/src/main/resources/config/application-test.yml @@ -0,0 +1,30 @@ +server: + port: 11307 +################### spring配置 ################### +spring: + datasource: + url: jdbc:mysql://localhost:3306/casic_template?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! + initial-size: 2 + min-idle: 1 + jms: + pub-sub-domain: true +# session: +# store-type: redis +casic: + # kaptcha-open: false #是否开启登录时验证码 (true/false) + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + #flowable数据源和多数据源配置 + flowable: + datasource: + url: jdbc:mysql://localhost:3306/template_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull + username: root + password: Casic203! +flowable: + checkProcessDefinitions: false #不校验process文件 +logging: + level.root: info + level.com.casic: debug + path: logs/ + file: missiles.log \ No newline at end of file diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml new file mode 100644 index 0000000..63cc330 --- /dev/null +++ b/casic-web/src/main/resources/config/application.yml @@ -0,0 +1,33 @@ +########################################################## +################## 所有profile共有的配置 ################# +########################################################## +spring: + profiles: + active: dev + servlet: + multipart: + max-file-size: 50MB + max-request-size: 80MB + web: + resources: + static-locations: file:C:\casic\tmp\ +mybatis-plus: + configuration: + # 配置结果集属性为空时 是否映射返回结果 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句,调试用 + map-underscore-to-camel-case: true +casic: + swagger-open: true #是否开启swagger (true/false) + kaptcha-open: false #是否开启登录时验证码 (true/false) + muti-datasource-open: false #是否开启多数据源(true/false) + spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) + session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 + session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 + no-login-urls: /user/login,/kaptcha,/config/baseConfig + file: + uploadPath: C:\casic\tmp\ + config: + export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\ + config-path: E:\Develop\IdeaProject\smartcity\casic-smartcity-dcms\casic-web\src\main\resources\config\ + knife4j: + groups: 基础业务包:com.casic.missiles.modular.system \ No newline at end of file diff --git a/casic-web/src/main/resources/logback-spring.xml b/casic-web/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0c7ac9 --- /dev/null +++ b/casic-web/src/main/resources/logback-spring.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf-8 + + + + + + + + ${LOG_PATH}/missiles_error.log + + + + + + ${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + error + ACCEPT + DENY + + + + + + + + ${LOG_PATH}/missiles_total.log + + + + + + ${LOG_PATH}/total/log-total-%d{yyyy-MM-dd}.%i.log + + + + 10MB + + + + + true + + + + ${FILE_LOG_PATTERN} + utf-8 + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a9d3814 --- /dev/null +++ b/pom.xml @@ -0,0 +1,147 @@ + + 4.0.0 + com.casic + casic-robot-dog + 2.0.0 + casic-robot-dog + pom + + casic-web + casic-server + + + com.casic + casic-boot-starter-parent + 2.0.0.alpha + + + UTF-8 + UTF-8 + 1.8 + + 2.0.0 + + 2.0.0.alpha + + 2.0.0.alpha + + + + 2.0.0.alpha + 3.2.1 + 1.7 + 3.6 + 2.6.11 + 1.0.3 + 3.4.5 + + + + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + + + + com.casic + casic-core + ${core.version} + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus-boot-starter} + + + + com.alibaba + druid + ${druid.version} + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven.compiler.plugin.version} + + + + + + + + + + + cn.smallbun.screw + screw-maven-plugin + ${screw.version} + + + + com.zaxxer + HikariCP + ${hikari.version} + + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + + root + + casic203! + + + com.mysql.jdbc.Driver + + jdbc:mysql://localhost:3306/casic_template?useSSL=false + + WORD + + true + + freemarker + + + 基础权限库 + + ${pro.version} + + 基础库文档速查 + + + + compile + + run + + + + + + + + \ No newline at end of file