Browse Source

视频中心相关代码

hanzhengyi 4 months ago
parent
commit
3964812fc4
69 changed files with 3853 additions and 4 deletions
  1. 20 0
      service-cockpit/pom.xml
  2. 146 0
      service-cockpit/service-cockpit-biz/pom.xml
  3. 66 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/RuoYiSystemApplication.java
  4. 13 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/ServletInitializer.java
  5. 118 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/base/BaseController.java
  6. 24 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/CorsConfig.java
  7. 2 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/DateStringConvert.java
  8. 20 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/MybatisPlusConfig.java
  9. 2 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/StringDateConverter.java
  10. 72 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/V2Config.java
  11. 104 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/AjaxResult.java
  12. 84 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/ResultTable.java
  13. 50 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/Tablepar.java
  14. 21 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/interceptor/Interceptor.java
  15. 91 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/interceptor/WebMvcConfig.java
  16. 108 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/MybatisGeneratorUtils.java
  17. 87 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/ApiController.java
  18. 376 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/FileController.java
  19. 257 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/GoviewProjectController.java
  20. 21 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/Indexcontroller.java
  21. 20 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/SysUserController.java
  22. 16 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/GoviewProjectDataMapper.java
  23. 16 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/GoviewProjectMapper.java
  24. 17 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/SysFileMapper.java
  25. 16 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/SysUserMapper.java
  26. 48 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/GoviewProject.java
  27. 39 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/GoviewProjectData.java
  28. 119 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/SysFile.java
  29. 39 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/SysUser.java
  30. 119 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/vo/GoviewProjectVo.java
  31. 70 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/vo/SysFileVo.java
  32. 18 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/IGoviewProjectDataService.java
  33. 16 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/IGoviewProjectService.java
  34. 18 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/ISysFileService.java
  35. 16 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/ISysUserService.java
  36. 33 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/GoviewProjectDataServiceImpl.java
  37. 20 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/GoviewProjectServiceImpl.java
  38. 30 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/SysFileServiceImpl.java
  39. 20 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/SysUserServiceImpl.java
  40. 252 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/ConvertUtil.java
  41. 39 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/MybatisPlusGenerator.java
  42. 74 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/SaTokenUtil.java
  43. 155 0
      service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/SnowflakeIdWorker.java
  44. 16 0
      service-cockpit/service-cockpit-biz/src/main/resources/application-dev.yml
  45. 110 0
      service-cockpit/service-cockpit-biz/src/main/resources/application.yml
  46. 25 0
      service-cockpit/service-cockpit-biz/src/main/resources/bootstrap.yml
  47. 5 0
      service-cockpit/service-cockpit-biz/src/main/resources/mapper/GoviewProjectDataMapper.xml
  48. 5 0
      service-cockpit/service-cockpit-biz/src/main/resources/mapper/GoviewProjectMapper.xml
  49. 5 0
      service-cockpit/service-cockpit-biz/src/main/resources/mapper/SysFileMapper.xml
  50. 5 0
      service-cockpit/service-cockpit-biz/src/main/resources/mapper/SysUserMapper.xml
  51. 4 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java
  52. 91 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcDeviceController.java
  53. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcDeviceGroupController.java
  54. 80 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcStreamController.java
  55. 96 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcDevice.java
  56. 66 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcDeviceGroup.java
  57. 96 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcStream.java
  58. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcDeviceGroupMapper.java
  59. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcDeviceMapper.java
  60. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcStreamMapper.java
  61. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcDeviceGroupService.java
  62. 28 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcDeviceService.java
  63. 24 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcStreamService.java
  64. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcDeviceGroupServiceImpl.java
  65. 76 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcDeviceServiceImpl.java
  66. 61 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcStreamServiceImpl.java
  67. 17 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/VcDeviceGroupMapper.xml
  68. 23 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/VcDeviceMapper.xml
  69. 23 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/VcStreamMapper.xml

+ 20 - 0
service-cockpit/pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>usky-modules</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-iot</artifactId>
+
+    <packaging>pom</packaging>
+    <version>0.0.1</version>
+
+    <modules>
+        <module>service-iot-biz</module>
+        <module>service-iot-api</module>
+    </modules>
+</project>

+ 146 - 0
service-cockpit/service-cockpit-biz/pom.xml

@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service-iot</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-iot-biz</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>common-cloud-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-backend-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-iot-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.5.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+
+        <!--MQTT依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-integration</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+        </dependency>
+        <!--websocket依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-websocket</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-agbox-api</artifactId>
+            <version>0.0.1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-system-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>4.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-alarm-api</artifactId>
+            <version>0.0.1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+        <!--钉钉-->
+        <!--获取企业accessToken(企业内部应用) 新版SDK-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dingtalk</artifactId>
+            <version>2.1.34</version>
+        </dependency>
+        <!--旧版SDK-->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>2.2.6.RELEASE</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>com.github.shalousun</groupId>
+                <artifactId>smart-doc-maven-plugin</artifactId>
+                <version>2.1.1</version>
+                <configuration>
+                    <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
+                    <configFile>./src/main/resources/smart-doc.json</configFile>
+                    <!--指定项目名称-->
+                    <projectName>test</projectName>
+                    <!--                    <excludes>-->
+                    <!--                        <exclude>com.bizmatics:product-service-provider</exclude>-->
+                    <!--                        <exclude>cn.afterturn:easypoi-web</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 66 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/RuoYiSystemApplication.java

@@ -0,0 +1,66 @@
+package com.usky.iot;
+
+
+
+import com.usky.iot.constant.constant;
+import io.swagger.annotations.SwaggerDefinition;
+import lombok.val;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
+import org.mybatis.spring.annotation.MapperScan;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 系统模块
+ * 
+ * @author ruoyi
+ */
+
+//@EnableSwagger2
+@EnableFeignClients(basePackages = "com.usky")
+@MapperScan(value = "com.usky.iot.mapper")
+@ComponentScan("com.usky")
+@SpringBootApplication
+@EnableRabbit
+public class RuoYiSystemApplication
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
+
+    @Bean
+    public WxMpService wxMpService(){
+        WxMpMapConfigImpl wxMpMapConfig = new WxMpMapConfigImpl();
+        wxMpMapConfig.setAppId(constant.WE_CHAT_APP_ID);
+        wxMpMapConfig.setSecret(constant.WE_CHAT_SECRET);
+        val wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpMapConfig);
+
+        return wxMpService;
+    }
+
+    public static void main(String[] args) throws UnknownHostException {
+        ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
+        Environment env = application.getEnvironment();
+        String ip = InetAddress.getLocalHost().getHostAddress();
+        String port = env.getProperty("server.port");
+        String path = env.getProperty("server.servlet.context-path");
+        LOGGER.info("\n----------------------------------------------------------\n\t" +
+                "Application is running! Access URLs:\n\t" +
+                "Local: \t\thttp://localhost:" + port + (null==path?"":path) + "/\n\t" +
+                "External: \thttp://" + ip + ":" + port + (null==path?"":path) + "/\n\t" +
+                "Api: \t\thttp://" + ip + ":" + port + (null==path?"":path) + "/swagger-ui/index.html\n\t" +
+                "----------------------------------------------------------");
+    }
+}

+ 13 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/ServletInitializer.java

@@ -0,0 +1,13 @@
+package cn.com;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+	@Override
+	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+		return application.sources(GogoApplication.class);
+	}
+
+}

+ 118 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/base/BaseController.java

@@ -0,0 +1,118 @@
+package cn.com.v2.common.base;
+
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import cn.com.v2.common.domain.AjaxResult;
+
+import java.beans.PropertyEditorSupport;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * web层通用数据处理
+ * 
+ * @ClassName: BaseController
+ * @author fuce
+ * @date 2018年8月18日
+ *
+ */
+
+public class BaseController {
+
+	/**
+	 * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+	 */
+	@InitBinder
+	public void initBinder(WebDataBinder binder) {
+		// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		// dateFormat.setLenient(false);
+		binder.registerCustomEditor(Date.class, new MyDateEditor());
+	}
+
+	private class MyDateEditor extends PropertyEditorSupport {
+		@Override
+		public void setAsText(String text) throws IllegalArgumentException {
+			// 通过两次异常的处理可以,绑定两次日期的格式
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+			Date date = null;
+			try {
+				date = format.parse(text);
+			} catch (ParseException e) {
+				format = new SimpleDateFormat("yyyy-MM-dd");
+				try {
+					date = format.parse(text);
+				} catch (ParseException e1) {
+					format = new SimpleDateFormat("yyyy/MM/dd H:mm");
+					try {
+						date = format.parse(text);
+					} catch (ParseException e2) {
+						e2.printStackTrace();
+					}
+				}
+			}
+			setValue(date);
+		}
+	}
+
+	/**
+	 * 响应返回结果
+	 * 
+	 * @param rows 影响行数
+	 * @return 操作结果
+	 */
+	protected AjaxResult toAjax(int rows) {
+		return rows > 0 ? success() : error();
+	}
+
+	/**
+	 * 返回成功
+	 */
+	public AjaxResult success() {
+		return AjaxResult.success();
+	}
+
+	/**
+	 * 返回失败消息
+	 */
+	public AjaxResult error() {
+		return AjaxResult.error();
+	}
+
+	public AjaxResult successData(int code, Object value) {
+		AjaxResult json = new AjaxResult();
+		json.put("code", code);
+		json.put("data", value);
+		return json;
+	}
+
+	/**
+	 * 返回成功消息
+	 */
+	public AjaxResult success(String message) {
+		return AjaxResult.success(message);
+	}
+
+	/**
+	 * 返回失败消息
+	 */
+	public AjaxResult error(String message) {
+		return AjaxResult.error(message);
+	}
+
+	/**
+	 * 返回错误码消息
+	 */
+	public AjaxResult error(int code, String message) {
+		return AjaxResult.error(code, message);
+	}
+
+	/**
+	 * 返回object数据
+	 */
+	public AjaxResult retobject(int code, Object data) {
+		return AjaxResult.successData(code, data);
+	}
+
+}

+ 24 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/CorsConfig.java

@@ -0,0 +1,24 @@
+package cn.com.v2.common.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+//重写WebMvcConfigurer实现全局跨域配置
+@Configuration
+public class CorsConfig implements WebMvcConfigurer{
+	@Override
+    public void addCorsMappings(CorsRegistry registry) {
+        	registry.addMapping("/**")
+            // 是否发送Cookie
+            .allowCredentials(true)
+            // 放行哪些原始域
+            .allowedOrigins("*")
+            // 放行哪些请求方式
+            .allowedMethods("GET", "POST", "PUT", "DELETE")
+            // 放行哪些原始请求头部信息
+            .allowedHeaders("*")
+            // 暴露哪些头部信息
+            .exposedHeaders("*");
+    }
+}

+ 2 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/DateStringConvert.java

@@ -0,0 +1,2 @@
+package com.usky.cockpit.common.config;public class DateStringConvert {
+}

+ 20 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/MybatisPlusConfig.java

@@ -0,0 +1,20 @@
+package cn.com.v2.common.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+	 /**
+     * 新的分页插件,一缓和二缓遵循mybatis的规则,
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQLITE));
+        return interceptor;
+    }
+}

+ 2 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/StringDateConverter.java

@@ -0,0 +1,2 @@
+package com.usky.cockpit.common.config;public class StringDateConverter {
+}

+ 72 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/config/V2Config.java

@@ -0,0 +1,72 @@
+package cn.com.v2.common.config;
+
+import java.util.Map;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 读取项目相关配置
+ * 
+ * @author fuce
+ */
+@Component
+@ConfigurationProperties(prefix = "v2")
+public class V2Config {
+
+	/**
+	 * 存储路径
+	 */
+	private String fileurl;
+	/**
+	 * 请求url
+	 */
+	private String httpurl;
+	/**
+	 * 虚拟路径map
+	 */
+	private Map<String, String> xnljmap;
+	
+	/**
+	 * 默认文件格式
+	 */
+	private String defaultFormat;
+	
+
+	public String getFileurl() {
+		return fileurl;
+	}
+
+	public void setFileurl(String fileurl) {
+		this.fileurl = fileurl;
+	}
+
+	
+
+	
+
+	public String getHttpurl() {
+		return httpurl;
+	}
+
+	public void setHttpurl(String httpurl) {
+		this.httpurl = httpurl;
+	}
+
+	public Map<String, String> getXnljmap() {
+		return xnljmap;
+	}
+
+	public void setXnljmap(Map<String, String> xnljmap) {
+		this.xnljmap = xnljmap;
+	}
+
+	public String getDefaultFormat() {
+		return defaultFormat;
+	}
+
+	public void setDefaultFormat(String defaultFormat) {
+		this.defaultFormat = defaultFormat;
+	}
+	
+	
+}

+ 104 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/AjaxResult.java

@@ -0,0 +1,104 @@
+package cn.com.v2.common.domain;
+
+import java.util.HashMap;
+
+/**
+* @ClassName: AjaxResult
+* @Description: ajax操作消息提醒
+* @author fuce
+* @date 2018年8月18日
+*
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 初始化一个新创建的 Message 对象
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @return 错误消息
+     */
+    public static AjaxResult error()
+    {
+        return error(500, "操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 内容
+     * @return 错误消息
+     */
+    public static AjaxResult error(String msg)
+    {
+        return error(500, msg);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param code 错误码
+     * @param msg 内容
+     * @return 错误消息
+     */
+    public static AjaxResult error(int code, String msg)
+    {
+        AjaxResult json = new AjaxResult();
+        json.put("code", code);
+        json.put("msg", msg);
+        return json;
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 内容
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg)
+    {
+        AjaxResult json = new AjaxResult();
+        json.put("msg", msg);
+        json.put("code", 200);
+        return json;
+    }
+    
+    /**
+     * 返回成功消息
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("操作成功");
+    }
+    
+    public static AjaxResult successData(int code, Object value){
+    	 AjaxResult json = new AjaxResult();
+    	 json.put("code", code);
+         json.put("data", value);
+         return json;
+    }
+   
+    
+    /**
+     * 返回成功消息
+     * 
+     * @param key 键值
+     * @param value 内容
+     * @return 成功消息
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+}

+ 84 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/ResultTable.java

@@ -0,0 +1,84 @@
+package cn.com.v2.common.domain;
+
+public class ResultTable {
+     /**
+     * 状态码
+     * */
+    private Integer code;
+
+    /**
+     * 提示消息
+     * */
+    private String msg;
+
+    /**
+     * 消息总量
+     * */
+    private Long count;
+
+    /**
+     * 数据对象
+     * */
+    private Object data;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public Long getCount() {
+        return count;
+    }
+
+    public void setCount(Long count) {
+        this.count = count;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    /**
+     * 构 建
+     * */
+    public static ResultTable pageTable(long count,Object data){
+        ResultTable resultTable = new ResultTable();
+        resultTable.setData(data);
+        resultTable.setCode(0);
+        resultTable.setCount(count);
+        if(data!=null) {
+       	 resultTable.setMsg("获取成功");
+       }else {
+       	 resultTable.setMsg("获取失败");
+       }
+        return resultTable;
+    }
+
+    public static ResultTable dataTable(Object data){
+        ResultTable resultTable = new ResultTable();
+        resultTable.setData(data);
+        resultTable.setCode(0);
+        if(data!=null) {
+        	 resultTable.setMsg("获取成功");
+        }else {
+        	 resultTable.setMsg("获取失败");
+        }
+       
+        return resultTable;
+    }
+}

+ 50 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/domain/Tablepar.java

@@ -0,0 +1,50 @@
+package cn.com.v2.common.domain;
+
+/**
+ * boostrap table post 参数
+ * @author fc
+ *
+ */
+public class Tablepar {
+	private int page;//页码
+	private int limit;//数量
+	private String orderByColumn;//排序字段
+	private String isAsc;//排序字符 asc desc 
+	private String searchText;//列表table里面的搜索
+
+	public int getPage() {
+		return page;
+	}
+
+	public void setPage(int page) {
+		this.page = page;
+	}
+
+	public int getLimit() {
+		return limit;
+	}
+
+	public void setLimit(int limit) {
+		this.limit = limit;
+	}
+
+	public String getOrderByColumn() {
+		return orderByColumn;
+	}
+	public void setOrderByColumn(String orderByColumn) {
+		this.orderByColumn = orderByColumn;
+	}
+	public String getIsAsc() {
+		return isAsc;
+	}
+	public void setIsAsc(String isAsc) {
+		this.isAsc = isAsc;
+	}
+	public String getSearchText() {
+		return searchText;
+	}
+	public void setSearchText(String searchText) {
+		this.searchText = searchText;
+	}
+
+}

+ 21 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/interceptor/Interceptor.java

@@ -0,0 +1,21 @@
+package cn.com.v2.common.interceptor;
+
+import org.springframework.web.servlet.HandlerInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 拦截器
+ */
+public class Interceptor implements HandlerInterceptor {
+    /**
+     * 在请求处理之前进行调用(Controller方法调用之前)
+     */
+	@Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+       
+        return true;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
+        //如果设置为true时,请求将会继续执行后面的操作
+    }
+
+}

+ 91 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/common/interceptor/WebMvcConfig.java

@@ -0,0 +1,91 @@
+package cn.com.v2.common.interceptor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+import cn.com.v2.common.config.V2Config;
+import cn.hutool.core.util.ArrayUtil;
+
+@Configuration
+public class WebMvcConfig extends WebMvcConfigurationSupport {
+ 
+	@Autowired
+	private V2Config v2Config;
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("error.html").addResourceLocations("classpath:/META-INF/resources/static/error.html");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+        
+        List<String> list1=new ArrayList<String>();
+        List<String> list2=new ArrayList<String>();
+        
+        Map<String, String> map= v2Config.getXnljmap();
+        
+        Set<String> set = map.keySet();
+        for (String o : set) {
+            list1.add("/"+o+"/**");
+            list2.add(map.get(o));
+        }
+    	registry.addResourceHandler(ArrayUtil.toArray(list1, String.class)).addResourceLocations(ArrayUtil.toArray(list2, String.class));
+    }
+    
+
+    /**
+     * 重写addCorsMappings()解决跨域问题
+     * 配置:允许http请求进行跨域访问
+     *
+     * @param registry
+     */
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+    	
+    	// 设置允许多个域名请求
+        //String[] allowDomains = {"http://www.toheart.xin","http://192.168.11.213:8080","http://localhost:8080"};
+    	
+        //指哪些接口URL需要增加跨域设置
+        registry.addMapping("/**")
+                //.allowedOrigins("*")//指的是前端哪些域名被允许跨域
+                .allowedOriginPatterns("*")
+                //需要带cookie等凭证时,设置为true,就会把cookie的相关信息带上
+                .allowCredentials(true)
+                //指的是允许哪些方法
+                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
+                //cookie的失效时间,单位为秒(s),若设置为-1,则关闭浏览器就失效
+                .maxAge(3600);
+    }
+    
+    /**
+     * 重写addInterceptors()实现拦截器
+     * 配置:要拦截的路径以及不拦截的路径
+     *
+     * @param registry
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        //注册Interceptor拦截器(Interceptor这个类是我们自己写的拦截器类)
+        InterceptorRegistration registration = registry.addInterceptor(new Interceptor());
+        //addPathPatterns()方法添加需要拦截的路径
+        //所有路径都被拦截
+        registration.addPathPatterns("/**");
+        //excludePathPatterns()方法添加不拦截的路径
+        
+        
+        String[] excludePatterns = new String[]{"/error","/error.html","/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**",
+                "/api", "/api-docs", "/api-docs/**", "/doc.html/**",
+                "/api/file/*"};
+        
+        //添加不拦截路径
+        registration.excludePathPatterns(excludePatterns);
+    }
+ 
+}

+ 108 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/MybatisGeneratorUtils.java

@@ -0,0 +1,108 @@
+package com.usky.iot.controller;//package com.usky.iot.controller;//package com.usky.dm.controller.web.business;//package com.usky.dm.controller.web;
+
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author yq
+ * @date 2021/7/6 11:42
+ */
+public class MybatisGeneratorUtils {
+    public static void main(String[] args) {
+
+            shell("service-iot","service-iot-biz");
+    }
+
+    private static void shell(String parentName,String model) {
+
+        AutoGenerator mpg = new AutoGenerator();
+        //1、全局配置
+        GlobalConfig gc = new GlobalConfig();
+//        File file = new File(model);
+//        String path = file.getAbsolutePath();
+        String projectPath = System.getProperty("user.dir");
+        projectPath+="/"+parentName;
+        projectPath+="/"+model;
+        gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
+        //修改为自己的名字
+        gc.setAuthor("han"); //设置作者
+        gc.setOpen(false);
+        gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
+        gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
+        gc.setBaseResultMap(true); //生成resultMap
+        mpg.setGlobalConfig(gc);
+
+        //2、数据源配置
+        //修改数据源
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-cloud?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setDriverName("com.mysql.jdbc.Driver");
+        dsc.setUsername("usky");
+        dsc.setPassword("Yt#75Usky");
+        mpg.setDataSource(dsc);
+
+        // 3、包配置
+        PackageConfig pc = new PackageConfig();
+        pc.setParent("com.usky.iot");
+        pc.setController("controller.web");
+        pc.setEntity("domain");
+        pc.setMapper("mapper");
+        pc.setService("service");
+        pc.setServiceImpl("service.impl");
+//        pc.setXml("mapper.demo");
+        //pc.setModuleName("test");
+        mpg.setPackageInfo(pc);
+
+        // 4、策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setSuperMapperClass("com.usky.common.mybatis.core.CrudMapper");
+        strategy.setSuperServiceClass("com.usky.common.mybatis.core.CrudService");
+        strategy.setSuperServiceImplClass("com.usky.common.mybatis.core.AbstractCrudService");
+        // strategy.setTablePrefix("t_"); // 表名前缀
+        strategy.setEntityLombokModel(true); //使用lombok
+        //修改自己想要生成的表
+        strategy.setInclude("sys_dept");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        mpg.setStrategy(strategy);
+
+        // 关闭默认 xml 生成,调整生成 至 根目录
+        //修改对应的模块名称
+        TemplateConfig tc = new TemplateConfig();
+        // 自定义配置
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+        //如果模板引擎是 velocity
+        String templatePath = "/templates/mapper.xml.vm";
+        // 自定义输出配置
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+        String finalProjectPath = projectPath;
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+                return finalProjectPath + "/src/main/resources/mapper/iot" + "/"
+                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+        tc.setXml(null);
+        mpg.setTemplate(tc);
+        //5、执行
+        mpg.execute();
+    }
+}

+ 87 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/ApiController.java

@@ -0,0 +1,87 @@
+package cn.com.v2.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+import cn.com.v2.common.base.BaseController;
+import cn.com.v2.common.domain.AjaxResult;
+import cn.com.v2.model.SysUser;
+import cn.com.v2.service.ISysUserService;
+import cn.com.v2.util.SaTokenUtil;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping("/api/goview/sys")
+public class ApiController  extends BaseController {
+	@Autowired
+	private ISysUserService iSysUserService;
+
+	@ApiOperation(value = "登陆", notes = "登陆")
+	@PostMapping("/login")
+	@ResponseBody
+	public AjaxResult APIlogin(@RequestBody SysUser user, HttpServletRequest request) {
+
+		// 判断是否登陆
+		if (StpUtil.isLogin()) {
+
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put("userinfo", SaTokenUtil.getUser());
+			map.put("token", StpUtil.getTokenInfo());
+			return success().put("data", map);
+		} else {
+			if (StrUtil.isNotBlank(user.getUsername()) && StrUtil.isNotBlank(user.getPassword())) {
+				SysUser sysUser = iSysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, user.getUsername()).eq(SysUser::getPassword, SecureUtil.md5(user.getPassword())).last("LIMIT 1"));
+				if (sysUser != null) {
+					StpUtil.login(sysUser.getId());
+					SaTokenUtil.setUser(sysUser);
+					Map<String, Object> map = new HashMap<String, Object>();
+					map.put("userinfo", sysUser);
+					map.put("token", StpUtil.getTokenInfo());
+
+					return success().put("data", map);
+				} else {
+					return error(500, "账户或者密码错误");
+				}
+			} else {
+				return error(500, "账户密码不能为空");
+			}
+		}
+
+	}
+	
+	
+	@ApiOperation(value = "登陆", notes = "登陆")
+	@GetMapping("/logout")
+	@ResponseBody
+	public AjaxResult logout() {
+
+		// 判断是否登陆
+		StpUtil.logout();
+
+		return success();
+
+	}
+	
+	
+	@ApiOperation(value = "获取oss地址", notes = "获取oss地址")
+	@GetMapping("/getOssInfo")
+	@ResponseBody
+	public AjaxResult getOssInfo() {
+
+		return success();
+
+	}
+
+}

+ 376 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/FileController.java

@@ -0,0 +1,376 @@
+package cn.com.v2.controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.Map;
+import java.util.Map.Entry;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import cn.com.v2.common.base.BaseController;
+import cn.com.v2.common.config.V2Config;
+import cn.com.v2.common.domain.AjaxResult;
+import cn.com.v2.model.SysFile;
+import cn.com.v2.model.vo.SysFileVo;
+import cn.com.v2.service.ISysFileService;
+import cn.com.v2.util.SnowflakeIdWorker;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IORuntimeException;
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 文件上传controller
+ * @author fuce 
+ * @date: 2018年9月16日 下午4:23:50
+ */
+@Api(value = "文件上传")
+@RestController
+@RequestMapping("/api/file")
+@Slf4j
+public class FileController extends BaseController{
+
+
+	@Autowired
+	private V2Config v2Config;
+	@Autowired
+	private ISysFileService iSysFileService;
+
+	/**
+	 * 删除文件
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value = "删除", notes = "删除")
+	@DeleteMapping("/remove")
+	public AjaxResult remove(String ids){
+		Boolean b=iSysFileService.removeByIds(StrUtil.split(ids, ',',-1));
+		if(b){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	
+	@ApiOperation(value = "修改", notes = "修改")
+	@PutMapping("/update")
+	public AjaxResult update(String id,@RequestBody MultipartFile object) throws IllegalStateException, IOException{
+		SysFile sysFile=iSysFileService.getById(id);
+		if(sysFile!=null){
+			String fileurl=sysFile.getAbsolutePath()+sysFile.getRelativePath()+File.separator+sysFile.getFileName();
+			object.transferTo(new File(fileurl));
+			return success("修改成功");
+		}else{
+			return error();
+		}
+	}
+
+	/**
+	 * 上传文件
+	 * @param object 文件流对象
+	 * @param bucketName 桶名
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/upload")
+	public AjaxResult upload(@RequestBody MultipartFile object) throws IOException{
+		String fileName = object.getOriginalFilename();
+		//默认文件格式
+		String suffixName=v2Config.getDefaultFormat();
+		String mediaKey="";
+		Long filesize= object.getSize();
+		//文件名字
+		String fileSuffixName="";
+		if(fileName.lastIndexOf(".")!=-1) {//有后缀
+			 suffixName = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
+			 //mediaKey=MD5.create().digestHex(fileName);
+			 mediaKey=SnowflakeIdWorker.getUUID();
+			 fileSuffixName=mediaKey+suffixName;
+		}else {//无后缀
+			//取得唯一id
+			 //mediaKey = MD5.create().digestHex(fileName+suffixName);
+			mediaKey=SnowflakeIdWorker.getUUID();
+			//fileSuffixName=mediaKey+suffixName;
+		}
+		String virtualKey=getFirstNotNull(v2Config.getXnljmap());
+		String absolutePath=v2Config.getXnljmap().get(getFirstNotNull(v2Config.getXnljmap()));
+		SysFile sysFile=new SysFile();
+		sysFile.setId(SnowflakeIdWorker.getUUID());
+		sysFile.setFileName(fileSuffixName);
+		sysFile.setFileSize(Integer.parseInt(filesize+""));
+		sysFile.setFileSuffix(suffixName);
+		sysFile.setCreateTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+		String filepath=DateUtil.formatDate(new Date());
+		sysFile.setRelativePath(filepath);
+		sysFile.setVirtualKey(virtualKey);
+		sysFile.setAbsolutePath(absolutePath.replace("file:",""));
+		iSysFileService.saveOrUpdate(sysFile);
+		File desc = getAbsoluteFile(v2Config.getFileurl()+File.separator+filepath,fileSuffixName);
+		object.transferTo(desc);
+		SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
+		sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
+		return AjaxResult.successData(200, sysFileVo);
+	}
+	
+	
+	/**
+	 * Base64字符串转成图片
+	 * @param str
+	 * @throws IOException 
+	 */
+	@PostMapping("/uploadbase64")
+	public synchronized AjaxResult uploadbase64(String base64str) throws IOException{
+		if(StrUtil.isNotBlank(base64str)){
+			String suffixName=v2Config.getDefaultFormat();
+			String mediaKey=SnowflakeIdWorker.getUUID();
+			String fileSuffixName=mediaKey+suffixName;
+			String virtualKey=getFirstNotNull(v2Config.getXnljmap());
+			String absolutePath=v2Config.getXnljmap().get(getFirstNotNull(v2Config.getXnljmap()));
+			SysFile sysFile=new SysFile();
+			sysFile.setId(SnowflakeIdWorker.getUUID());
+			sysFile.setFileName(fileSuffixName);
+			sysFile.setFileSuffix(suffixName);
+			sysFile.setCreateTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+			String filepath=DateUtil.formatDate(new Date());
+			sysFile.setRelativePath(filepath);
+			sysFile.setVirtualKey(virtualKey);
+			sysFile.setAbsolutePath(absolutePath.replace("file:",""));
+			File desc = getAbsoluteFile(v2Config.getFileurl()+File.separator+filepath,fileSuffixName);
+			File file=null;
+			try {
+				 file=Base64.decodeToFile(base64str, desc);
+			} catch (Exception e) {
+				System.out.println("错误base64:"+base64str);
+				e.printStackTrace();
+			}
+			sysFile.setFileSize(Integer.parseInt(file.length()+""));
+			iSysFileService.saveOrUpdate(sysFile);
+			SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
+			sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
+			return AjaxResult.successData(200, sysFileVo);
+		}
+		return AjaxResult.error();
+		
+	}
+	
+	
+	/**
+	 * 定制方法
+	 * 根据关键字与相对路径获取文件内容 
+	 * @param key 访问关键字
+	 * @param rpf 相对路径+文件名字
+	 * @return
+	 */
+	@PostMapping("/getFileText")
+	public AjaxResult getFileText(String key,String relativePath){
+		String absolutePath= v2Config.getXnljmap().get(key).replace("file:", "");
+		String fileurl=absolutePath+relativePath;
+		try {
+			String text=FileUtil.readUtf8String(fileurl);
+			return AjaxResult.successData(200, text);
+		}catch (IORuntimeException e) {
+			return AjaxResult.error("没有该文件");
+		}
+		catch (Exception e) {
+			return AjaxResult.error("报错:"+e.getMessage());
+		}
+	}
+	
+	
+	/**
+	 * 定制方法
+	 * 根据关键字与相对路径获取文件内容 
+	 * @param key 访问关键字
+	 * @param rpf 相对路径+文件名字
+	 * @return
+	 * @throws IOException 
+	 */
+	@PostMapping("/getFileText302")
+	public void getFileText302(String key,String relativePath,HttpServletResponse response) throws IOException{
+		String str=v2Config.getHttpurl()+key+"/"+relativePath;
+		response.sendRedirect(str);
+		
+	}
+	
+	
+	
+	
+	/**
+	 * 覆盖上传文件 key与指定路径
+	 * @param object 文件流对象
+	 * @param bucketName 桶名
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/coverupload")
+	public AjaxResult coverupload(@RequestBody MultipartFile object,String key,String relativePath) throws IOException{
+		
+		String fileName = object.getOriginalFilename();
+		String suffixName=v2Config.getDefaultFormat();
+		Long filesize= object.getSize();
+		//文件名字
+		String fileSuffixName="";
+		if(fileName.lastIndexOf(".")!=-1) {//有后缀
+			 suffixName = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
+			 //mediaKey=MD5.create().digestHex(fileName);
+			 //mediaKey=SnowflakeIdWorker.getUUID();
+			 fileSuffixName=relativePath.substring(relativePath.lastIndexOf("/")+1,relativePath.length());
+		}else {//无后缀
+			//取得唯一id
+			 //mediaKey = MD5.create().digestHex(fileName+suffixName);
+			//mediaKey=SnowflakeIdWorker.getUUID();
+			//fileSuffixName=mediaKey+suffixName;
+		}
+		String virtualKey=key;
+		String absolutePath=v2Config.getXnljmap().get(key).replace("file:", "");
+		SysFile sysFile=new SysFile();
+		sysFile.setId(SnowflakeIdWorker.getUUID());
+		sysFile.setFileName(fileSuffixName);
+		sysFile.setFileSize(Integer.parseInt(filesize+""));
+		sysFile.setFileSuffix(suffixName);
+		sysFile.setCreateTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+		String filepath=relativePath.substring(0,relativePath.lastIndexOf("/"));
+		sysFile.setRelativePath(filepath);
+		sysFile.setVirtualKey(virtualKey);
+		sysFile.setAbsolutePath(absolutePath);
+		iSysFileService.saveOrUpdate(sysFile);
+		File desc = getAbsoluteFile(absolutePath+filepath,fileSuffixName);
+		object.transferTo(desc);
+		SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
+		sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
+		return AjaxResult.successData(200, sysFileVo);
+	}
+	
+	
+	
+
+	
+	/**
+	 * 根据文件id查询文件信息json
+	 * @param id
+	 * @return
+	 */
+	@GetMapping("/getFileid/{id}")
+	public AjaxResult getFileid(@PathVariable("id") String id){
+		SysFile sysFile=iSysFileService.getById(id);
+		if(sysFile!=null){
+			SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
+			sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
+			return AjaxResult.successData(200, sysFileVo);
+		}
+		return AjaxResult.error("没有该文件");
+		
+	}
+	
+	/**
+	 * 根据文件id 302跳转到绝对地址
+	 * @param id
+	 * @param response
+	 * @throws IOException
+	 */
+	@GetMapping("/getFileid/302/{id}")
+	public void getFileid302(@PathVariable("id") String id,HttpServletResponse response) throws IOException{
+		SysFile sysFile=iSysFileService.getById(id);
+		if(sysFile!=null){
+			String str=v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName();
+			response.sendRedirect(str);
+		}
+	}
+	
+	
+	
+	
+	
+	
+	/**
+	 * 分页查询
+	 * @param current
+	 * @param size
+	 * @return
+	 */
+	@GetMapping("/list")
+	public Object list(long current, long size){
+		Page<SysFile> page= new Page<SysFile>(current, size);
+		IPage<SysFile> sysFile=iSysFileService.page(page, new LambdaQueryWrapper<SysFile>());
+		return sysFile;
+	}
+	
+	
+	
+	
+
+    /**
+     * 获取map中第一个非空数据key
+     *
+     * @param <K> Key的类型
+     * @param <V> Value的类型
+     * @param map 数据源
+     * @return 返回的值
+     */
+    public static <K, V> K getFirstNotNull(Map<K, V> map) {
+        K obj = null;
+        for (Entry<K, V> entry : map.entrySet()) {
+            obj =  entry.getKey();
+            if (obj != null) {
+                break;
+            }
+        }
+        return obj;
+    }
+	
+	
+    public  final static File getAbsoluteFile(String uploadDir, String filename) throws IOException
+    {
+        File desc = new File(uploadDir+File.separator + filename);
+
+        if (!desc.getParentFile().exists())
+        {
+            desc.getParentFile().mkdirs();
+        }
+        if (!desc.exists())
+        {
+            desc.createNewFile();
+        }
+        return desc;
+    }
+	
+	
+	/**
+	 * 获取上传文件的md5
+	 * @param file
+	 * @return
+	 * @throws IOException
+	 */
+	public String getMd5(MultipartFile file) {
+	    try {
+	        //获取文件的byte信息
+	        byte[] uploadBytes = file.getBytes();
+	        // 拿到一个MD5转换器
+	        MessageDigest md5 = MessageDigest.getInstance("MD5");
+	        byte[] digest = md5.digest(uploadBytes);
+	        //转换为16进制
+	        return new BigInteger(1, digest).toString(16);
+	    } catch (Exception e) {
+	        log.error(e.getMessage());
+	    }
+	    return null;
+	}
+
+
+    
+    
+}

+ 257 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/GoviewProjectController.java

@@ -0,0 +1,257 @@
+package cn.com.v2.controller;
+
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import cn.com.v2.common.base.BaseController;
+import cn.com.v2.common.config.V2Config;
+import cn.com.v2.common.domain.AjaxResult;
+import cn.com.v2.common.domain.ResultTable;
+import cn.com.v2.common.domain.Tablepar;
+import cn.com.v2.model.GoviewProject;
+import cn.com.v2.model.GoviewProjectData;
+import cn.com.v2.model.SysFile;
+import cn.com.v2.model.vo.GoviewProjectVo;
+import cn.com.v2.model.vo.SysFileVo;
+import cn.com.v2.service.IGoviewProjectDataService;
+import cn.com.v2.service.IGoviewProjectService;
+import cn.com.v2.service.ISysFileService;
+import cn.com.v2.util.ConvertUtil;
+import cn.com.v2.util.SnowflakeIdWorker;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import io.swagger.annotations.ApiOperation;
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@RestController
+@RequestMapping("/api/goview/project")
+public class GoviewProjectController  extends BaseController{
+	@Autowired
+	private ISysFileService iSysFileService;
+	@Autowired
+	private V2Config v2Config;
+	@Autowired
+	private IGoviewProjectService iGoviewProjectService;
+	@Autowired
+	private IGoviewProjectDataService iGoviewProjectDataService;
+	
+	
+	@ApiOperation(value = "分页跳转", notes = "分页跳转")
+	@GetMapping("/list")
+	@ResponseBody
+	public ResultTable list(Tablepar tablepar){
+		Page<GoviewProject> page= new Page<GoviewProject>(tablepar.getPage(), tablepar.getLimit());
+		IPage<GoviewProject> iPages=iGoviewProjectService.page(page, new LambdaQueryWrapper<GoviewProject>());
+		ResultTable resultTable=new ResultTable();
+		resultTable.setData(iPages.getRecords());
+		resultTable.setCode(200);
+		resultTable.setCount(iPages.getTotal());
+		resultTable.setMsg("获取成功");
+		return resultTable;
+	}
+	
+	
+	/**
+     * 新增保存
+     * @param 
+     * @return
+     */
+	//@Log(title = "项目表新增", action = "111")
+	@ApiOperation(value = "新增", notes = "新增")
+	@PostMapping("/create")
+	@ResponseBody
+	public AjaxResult add(@RequestBody GoviewProject goviewProject){
+		goviewProject.setCreateTime(DateUtil.now());
+		goviewProject.setState(-1);
+		boolean b=iGoviewProjectService.save(goviewProject);
+		if(b){
+			return successData(200, goviewProject).put("msg", "创建成功");
+		}else{
+			return error();
+		}
+	}
+	
+	
+	/**
+	 * 项目表删除
+	 * @param ids
+	 * @return
+	 */
+	//@Log(title = "项目表删除", action = "111")
+	@ApiOperation(value = "删除", notes = "删除")
+	@DeleteMapping("/delete")
+	@ResponseBody
+	public AjaxResult remove(String ids){
+		List<String> lista=ConvertUtil.toListStrArray(ids);
+		Boolean b=iGoviewProjectService.removeByIds(lista);
+		if(b){
+			return success();
+		}else{
+			return error();
+		}
+	}
+	
+	@ApiOperation(value = "修改保存", notes = "修改保存")
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(@RequestBody GoviewProject goviewProject)
+    {
+		Boolean b= iGoviewProjectService.updateById(goviewProject);
+        if(b){
+        	return success();
+        }
+        return error();
+    }
+	
+	
+	@ApiOperation(value = "项目重命名", notes = "项目重命名")
+    @PostMapping("/rename")
+    @ResponseBody
+    public AjaxResult rename(@RequestBody GoviewProject goviewProject)
+    {
+		
+		LambdaUpdateWrapper<GoviewProject> updateWrapper=new LambdaUpdateWrapper<GoviewProject>();
+		updateWrapper.eq(GoviewProject::getId, goviewProject.getId());
+		updateWrapper.set(GoviewProject::getProjectName, goviewProject.getProjectName());
+		Boolean b=iGoviewProjectService.update(updateWrapper);
+		if(b){
+        	return success();
+        }
+		return error();
+    }
+	
+	
+	//发布/取消项目状态
+    @PutMapping("/publish")
+	@ResponseBody
+    public AjaxResult updateVisible(@RequestBody GoviewProject goviewProject){
+    	if(goviewProject.getState()==-1||goviewProject.getState()==1) {
+    	
+    		LambdaUpdateWrapper<GoviewProject> updateWrapper=new LambdaUpdateWrapper<GoviewProject>();
+    		updateWrapper.eq(GoviewProject::getId, goviewProject.getId());
+    		updateWrapper.set(GoviewProject::getState, goviewProject.getState());
+    		Boolean b=iGoviewProjectService.update(updateWrapper);
+    		if(b){
+            	return success();
+            }
+    		return error();
+    	}
+    	return error("警告非法字段");
+	}
+	
+    
+    @ApiOperation(value = "获取项目存储数据", notes = "获取项目存储数据")
+	@GetMapping("/getData")
+	@ResponseBody
+    public AjaxResult getData(String projectId, ModelMap map)
+    {
+		GoviewProject goviewProject= iGoviewProjectService.getById(projectId);
+		
+		GoviewProjectData blogText=iGoviewProjectDataService.getProjectid(projectId);
+		if(blogText!=null) {
+			GoviewProjectVo goviewProjectVo=new GoviewProjectVo();
+			BeanUtils.copyProperties(goviewProject,goviewProjectVo);
+			goviewProjectVo.setContent(blogText.getContent());
+			return AjaxResult.successData(200,goviewProjectVo).put("msg","获取成功");
+		}
+		return AjaxResult.successData(200, null).put("msg","无数据");
+        
+    }
+	
+	
+	
+	@ApiOperation(value = "保存项目数据", notes = "保存项目数据")
+	@PostMapping("/save/data")
+	@ResponseBody
+	public AjaxResult saveData(GoviewProjectData data) {
+		
+		GoviewProject goviewProject= iGoviewProjectService.getById(data.getProjectId());
+		if(goviewProject==null) {
+			return error("没有该项目ID");
+		}
+		GoviewProjectData goviewProjectData= iGoviewProjectDataService.getOne(new LambdaQueryWrapper<GoviewProjectData>().eq(GoviewProjectData::getProjectId, goviewProject.getId()));
+		if(goviewProjectData!=null) {
+			 data.setId(goviewProjectData.getId());
+			 iGoviewProjectDataService.updateById(data);
+			 return success("数据保存成功");
+		}else {
+			iGoviewProjectDataService.save(data);
+			return success("数据保存成功");
+		}
+	}
+	
+	/**
+	 * 上传文件
+	 * @param object 文件流对象
+	 * @param bucketName 桶名
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/upload")
+	public AjaxResult upload(@RequestBody MultipartFile object) throws IOException{
+		String fileName = object.getOriginalFilename();
+		//默认文件格式
+		String suffixName=v2Config.getDefaultFormat();
+		String mediaKey="";
+		Long filesize= object.getSize();
+		//文件名字
+		String fileSuffixName="";
+		if(fileName.lastIndexOf(".")!=-1) {//有后缀
+			 suffixName = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
+			 //mediaKey=MD5.create().digestHex(fileName);
+			 mediaKey=SnowflakeIdWorker.getUUID();
+			 fileSuffixName=mediaKey+suffixName;
+		}else {//无后缀
+			//取得唯一id
+			 //mediaKey = MD5.create().digestHex(fileName+suffixName);
+			mediaKey=SnowflakeIdWorker.getUUID();
+			//fileSuffixName=mediaKey+suffixName;
+		}
+		String virtualKey=FileController.getFirstNotNull(v2Config.getXnljmap());
+		String absolutePath=v2Config.getXnljmap().get(FileController.getFirstNotNull(v2Config.getXnljmap()));
+		SysFile sysFile=new SysFile();
+		sysFile.setId(SnowflakeIdWorker.getUUID());
+		sysFile.setFileName(fileSuffixName);
+		sysFile.setFileSize(Integer.parseInt(filesize+""));
+		sysFile.setFileSuffix(suffixName);
+		sysFile.setCreateTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+		String filepath=DateUtil.formatDate(new Date());
+		sysFile.setRelativePath(filepath);
+		sysFile.setVirtualKey(virtualKey);
+		sysFile.setAbsolutePath(absolutePath.replace("file:",""));
+		iSysFileService.saveOrUpdate(sysFile);
+		File desc = FileController.getAbsoluteFile(v2Config.getFileurl()+File.separator+filepath,fileSuffixName);
+		object.transferTo(desc);
+		SysFileVo sysFileVo=BeanUtil.copyProperties(sysFile, SysFileVo.class);
+		sysFileVo.setFileurl(v2Config.getHttpurl()+sysFile.getVirtualKey()+"/"+sysFile.getRelativePath()+"/"+sysFile.getFileName());
+		return successData(200, sysFileVo);
+	}
+	
+
+}

+ 21 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/Indexcontroller.java

@@ -0,0 +1,21 @@
+package cn.com.v2.controller;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class Indexcontroller {
+
+	@GetMapping("/")
+	public void index(HttpServletResponse response) throws IOException {
+		response.setContentType("text/html; charset=utf-8");
+		PrintWriter out = response.getWriter();
+		out.println("<p style='color:orange'>goview后台首页</p>");
+		out.flush();
+		out.close();
+
+	}
+}

+ 20 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/controller/web/SysUserController.java

@@ -0,0 +1,20 @@
+package cn.com.v2.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@RestController
+@RequestMapping("/v2/sys-user")
+public class SysUserController {
+
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/GoviewProjectDataMapper.java

@@ -0,0 +1,16 @@
+package cn.com.v2.mapper;
+
+import cn.com.v2.model.GoviewProjectData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface GoviewProjectDataMapper extends BaseMapper<GoviewProjectData> {
+
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/GoviewProjectMapper.java

@@ -0,0 +1,16 @@
+package cn.com.v2.mapper;
+
+import cn.com.v2.model.GoviewProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface GoviewProjectMapper extends BaseMapper<GoviewProject> {
+
+}

+ 17 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/SysFileMapper.java

@@ -0,0 +1,17 @@
+package cn.com.v2.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import cn.com.v2.model.SysFile;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author fc
+ * @since 2022-12-22
+ */
+public interface SysFileMapper extends BaseMapper<SysFile> {
+
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/mapper/SysUserMapper.java

@@ -0,0 +1,16 @@
+package cn.com.v2.mapper;
+
+import cn.com.v2.model.SysUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface SysUserMapper extends BaseMapper<SysUser> {
+
+}

+ 48 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/GoviewProject.java

@@ -0,0 +1,48 @@
+package cn.com.v2.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@TableName("t_goview_project")
+@Data
+public class GoviewProject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    
+    @TableId(type = IdType.ASSIGN_ID)
+    private String id;
+
+    private String projectName;
+
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createTime;
+
+    private String createUserId;
+
+    private Integer isDelete;
+
+    private String indexImage;
+
+    private String remarks;
+
+}
+
+
+

+ 39 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/GoviewProjectData.java

@@ -0,0 +1,39 @@
+package cn.com.v2.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 lombok.Data;
+import java.io.Serializable;
+import java.sql.Blob;
+import java.sql.SQLException;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@TableName("t_goview_project_data")
+@Data
+public class GoviewProjectData implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    @TableId(type = IdType.ASSIGN_ID)
+    private String id;
+
+    private String projectId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createTime;
+
+    private String createUserId;
+
+    private String content;
+
+   
+}

+ 119 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/SysFile.java

@@ -0,0 +1,119 @@
+package cn.com.v2.model;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author fc
+ * @since 2022-12-22
+ */
+@TableName("t_sys_file")
+public class SysFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    private String fileName;
+
+    private Integer fileSize;
+
+    private String fileSuffix;
+    
+    /**
+     * 虚拟路径
+     */
+    private String virtualKey;
+    
+    /**
+     * 相对路径
+     */
+    private String relativePath;
+    
+    /**
+     * 绝对路径
+     */
+    private String absolutePath;
+    
+    
+    
+    
+    @TableField(fill = FieldFill.INSERT)
+    private String createTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+   
+    public Integer getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(Integer fileSize) {
+        this.fileSize = fileSize;
+    }
+    public String getFileSuffix() {
+        return fileSuffix;
+    }
+
+    public void setFileSuffix(String fileSuffix) {
+        this.fileSuffix = fileSuffix;
+    }
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+    
+
+	public String getVirtualKey() {
+		return virtualKey;
+	}
+
+	public void setVirtualKey(String virtualKey) {
+		this.virtualKey = virtualKey;
+	}
+
+	public String getAbsolutePath() {
+		return absolutePath;
+	}
+
+	public void setAbsolutePath(String absolutePath) {
+		this.absolutePath = absolutePath;
+	}
+
+	public String getRelativePath() {
+		return relativePath;
+	}
+
+	public void setRelativePath(String relativePath) {
+		this.relativePath = relativePath;
+	}
+
+
+
+	
+	
+}

+ 39 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/SysUser.java

@@ -0,0 +1,39 @@
+package cn.com.v2.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@TableName("t_sys_user")
+@Data
+public class SysUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private String id;
+
+    private String username;
+
+    private String password;
+
+    private String nickname;
+
+    private Integer depId;
+
+    private String posId;
+
+ 
+}

+ 119 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/vo/GoviewProjectVo.java

@@ -0,0 +1,119 @@
+package cn.com.v2.model.vo;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import cn.hutool.core.date.DateUtil;
+import io.swagger.annotations.ApiModelProperty;
+
+public class GoviewProjectVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	
+	@ApiModelProperty(value = "主键")
+	private String id;
+	
+	@ApiModelProperty(value = "项目名称")
+	private String projectName;
+	
+	@ApiModelProperty(value = "项目状态[-1未发布,1发布]")
+	private Integer state;
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	
+	@ApiModelProperty(value = "创建人id")
+	private String createUserId;
+	
+	@ApiModelProperty(value = "删除状态[1删除,-1未删除]")
+	private Integer isDelete;
+	
+	@ApiModelProperty(value = "首页图片")
+	private String indexImage;
+	
+	@ApiModelProperty(value = "项目介绍")
+	private String remarks;
+	
+	private String content;
+	
+	
+	@JsonProperty("id")
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id =  id;
+	}
+	@JsonProperty("projectName")
+	public String getProjectName() {
+		return projectName;
+	}
+
+	public void setProjectName(String projectName) {
+		this.projectName =  projectName;
+	}
+	@JsonProperty("state")
+	public Integer getState() {
+		return state;
+	}
+
+	public void setState(Integer state) {
+		this.state =  state;
+	}
+	@JsonProperty("createTime")
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime =  createTime;
+	}
+	@JsonProperty("createUserId")
+	public String getCreateUserId() {
+		return createUserId;
+	}
+
+	public void setCreateUserId(String createUserId) {
+		this.createUserId =  createUserId;
+	}
+	@JsonProperty("isDelete")
+	public Integer getIsDelete() {
+		return isDelete;
+	}
+
+	public void setIsDelete(Integer isDelete) {
+		this.isDelete =  isDelete;
+	}
+	@JsonProperty("indexImage")
+	public String getIndexImage() {
+		return indexImage;
+	}
+
+	public void setIndexImage(String indexImage) {
+		this.indexImage =  indexImage;
+	}
+	@JsonProperty("remarks")
+	public String getRemarks() {
+		return remarks;
+	}
+
+	public void setRemarks(String remarks) {
+		this.remarks =  remarks;
+	}
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String dateToStringConvert(Date date) {
+		if(date!=null) {
+			return DateUtil.format(date, "yyyy-MM-dd HH:mm:ss");
+		}
+		return "";
+	}
+}

+ 70 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/model/vo/SysFileVo.java

@@ -0,0 +1,70 @@
+package cn.com.v2.model.vo;
+
+
+public class SysFileVo {
+	
+    private String id;
+    private String fileName;
+    private Integer fileSize;
+    private String createTime;
+    
+    /**
+     * 相对路径
+     */
+    private String relativePath;
+    
+    /**
+     * 虚拟路径key
+     */
+    private String virtualKey;
+    
+    /**
+     * 请求url
+     */
+    private String fileurl;
+    
+    
+	public String getId() {
+		return id;
+	}
+	public void setId(String id) {
+		this.id = id;
+	}
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public Integer getFileSize() {
+		return fileSize;
+	}
+	public void setFileSize(Integer fileSize) {
+		this.fileSize = fileSize;
+	}
+	public String getCreateTime() {
+		return createTime;
+	}
+	public void setCreateTime(String createTime) {
+		this.createTime = createTime;
+	}
+	public String getRelativePath() {
+		return relativePath;
+	}
+	public void setRelativePath(String relativePath) {
+		this.relativePath = relativePath;
+	}
+	public String getVirtualKey() {
+		return virtualKey;
+	}
+	public void setVirtualKey(String virtualKey) {
+		this.virtualKey = virtualKey;
+	}
+	public String getFileurl() {
+		return fileurl;
+	}
+	public void setFileurl(String fileurl) {
+		this.fileurl = fileurl;
+	}
+	
+}

+ 18 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/IGoviewProjectDataService.java

@@ -0,0 +1,18 @@
+package cn.com.v2.service;
+
+import cn.com.v2.model.GoviewProjectData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface IGoviewProjectDataService extends IService<GoviewProjectData> {
+	
+	public GoviewProjectData getProjectid(String projectId);
+
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/IGoviewProjectService.java

@@ -0,0 +1,16 @@
+package cn.com.v2.service;
+
+import cn.com.v2.model.GoviewProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface IGoviewProjectService extends IService<GoviewProject> {
+
+}

+ 18 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/ISysFileService.java

@@ -0,0 +1,18 @@
+package cn.com.v2.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.com.v2.model.SysFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author fc
+ * @since 2022-12-22
+ */
+public interface ISysFileService extends IService<SysFile> {
+
+	
+	public SysFile selectByExamplefileName(String filename);
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/ISysUserService.java

@@ -0,0 +1,16 @@
+package cn.com.v2.service;
+
+import cn.com.v2.model.SysUser;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+public interface ISysUserService extends IService<SysUser> {
+
+}

+ 33 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/GoviewProjectDataServiceImpl.java

@@ -0,0 +1,33 @@
+package cn.com.v2.service.impl;
+
+import cn.com.v2.model.GoviewProjectData;
+import cn.com.v2.mapper.GoviewProjectDataMapper;
+import cn.com.v2.service.IGoviewProjectDataService;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@Service
+public class GoviewProjectDataServiceImpl extends ServiceImpl<GoviewProjectDataMapper, GoviewProjectData> implements IGoviewProjectDataService {
+	@Autowired
+	GoviewProjectDataMapper dataMapper;
+	@Override
+	public GoviewProjectData getProjectid(String projectId) {
+		LambdaQueryWrapper<GoviewProjectData> lambdaQueryWrapper=new LambdaQueryWrapper<GoviewProjectData>();
+		lambdaQueryWrapper.eq(GoviewProjectData::getProjectId, projectId);
+		return dataMapper.selectOne(lambdaQueryWrapper);
+		
+	}
+
+}

+ 20 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/GoviewProjectServiceImpl.java

@@ -0,0 +1,20 @@
+package cn.com.v2.service.impl;
+
+import cn.com.v2.model.GoviewProject;
+import cn.com.v2.mapper.GoviewProjectMapper;
+import cn.com.v2.service.IGoviewProjectService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@Service
+public class GoviewProjectServiceImpl extends ServiceImpl<GoviewProjectMapper, GoviewProject> implements IGoviewProjectService {
+
+}

+ 30 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/SysFileServiceImpl.java

@@ -0,0 +1,30 @@
+package cn.com.v2.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.com.v2.mapper.SysFileMapper;
+import cn.com.v2.model.SysFile;
+import cn.com.v2.service.ISysFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author fc
+ * @since 2022-12-22
+ */
+@Service
+public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> implements ISysFileService {
+	@Autowired
+	private SysFileMapper sysFileMapper;
+	
+	@Override
+	public SysFile selectByExamplefileName(String filename) {
+		SysFile sysFile=sysFileMapper.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getFileName, filename));
+        return sysFile;
+	}
+
+}

+ 20 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/service/impl/SysUserServiceImpl.java

@@ -0,0 +1,20 @@
+package cn.com.v2.service.impl;
+
+import cn.com.v2.model.SysUser;
+import cn.com.v2.mapper.SysUserMapper;
+import cn.com.v2.service.ISysUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author fc
+ * @since 2023-04-30
+ */
+@Service
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
+
+}

+ 252 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/ConvertUtil.java

@@ -0,0 +1,252 @@
+package cn.com.v2.util;
+
+import cn.hutool.core.util.StrUtil;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 类型转换器
+ * 
+ * @author fc
+ * 
+ */
+public class ConvertUtil {
+
+	/**
+	 * 转换为字符串<br>
+	 * 如果给定的值为null,或者转换失败,返回默认值<br>
+	 * 转换失败不会报错
+	 * 
+	 * @param value 被转换的值
+	 * @param defaultValue 转换错误时的默认值
+	 * @return 结果
+	 */
+	public static String toStr(Object value, String defaultValue) {
+		if (null == value) {
+			return defaultValue;
+		}
+		if (value instanceof String) {
+			return (String) value;
+		}
+		return value.toString();
+	}
+
+	/**
+	 * 转换为Integer数组<br>
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static Integer[] toIntArray(String str) {
+		return toIntArray(",", str);
+	}
+
+	/**
+	 * 转换为Integer数组<br>
+	 * @param split 分隔符
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static Integer[] toIntArray(String split, String str) {
+		if (StrUtil.isEmpty(str)) {
+			return new Integer[] {};
+		}
+		String[] strings = str.split(split);
+		final Integer[] ints = new Integer[strings.length];
+		for (int i = 0; i < strings.length; i++) {
+			final Integer v = toInt(strings[i], 0);
+			ints[i] = v;
+		}
+		return ints;
+	}
+
+	/**
+	 * 转换为int<br>
+	 * 如果给定的值为空,或者转换失败,返回默认值<br>
+	 * 转换失败不会报错
+	 * @param value 被转换的值
+	 * @param defaultValue 转换错误时的默认值
+	 * @return 结果
+	 */
+	public static Integer toInt(Object value, Integer defaultValue) {
+		if (value == null) {
+			return defaultValue;
+		}
+		if (value instanceof Integer) {
+			return (Integer) value;
+		}
+		if (value instanceof Number) {
+			return ((Number) value).intValue();
+		}
+		final String valueStr = toStr(value, null);
+		if (StrUtil.isEmpty(valueStr)) {
+			return defaultValue;
+		}
+		try {
+			return Integer.parseInt(valueStr.trim());
+		} catch (Exception e) {
+			return defaultValue;
+		}
+	}
+
+	/**
+	 * 转换为List<String>数组<br>
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static List<String> toListStrArray(String str) {
+		String[] stringArray = toStrArray(str);
+		List<String> stringB = Arrays.asList(stringArray);
+		return stringB;
+	}
+
+
+
+	/**
+	 * 转换为List<Long>数组<br>
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static List<Long> toListLongArray(String str) {
+		Long[] stringArray = toLongArray(str);
+		List<Long> stringB = Arrays.asList(stringArray);
+		return stringB;
+	}
+
+
+	/**
+	 * 转换为String数组<br> 
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static String[] toStrArray(String str) {
+		return toStrArray(",", str);
+	}
+
+	/**
+	 * 转换为String数组<br>
+	 * 
+	 * @param split 分隔符
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static String[] toStrArray(String split, String str) {
+		return str.split(split);
+	}
+	/**
+     * 转换为Long数组<br>
+     * 
+     * @param split 被转换的值
+     * @return 结果
+     */
+    public static Long[] toLongArray(String str)
+    {
+        return toLongArray(",", str);
+    }
+    /**
+     * 转换为Long数组<br>
+     * 
+     * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null
+     * @param values 被转换的值
+     * @return 结果
+     */
+    public static Long[] toLongArray(String split, String str)
+    {
+        if (StrUtil.isEmpty(str))
+        {
+            return new Long[] {};
+        }
+        String[] arr = str.split(split);
+        final Long[] longs = new Long[arr.length];
+        for (int i = 0; i < arr.length; i++)
+        {
+            final Long v = toLong(arr[i], null);
+            longs[i] = v;
+        }
+        return longs;
+    }
+    /**
+     * 转换为long<br>
+     * 如果给定的值为空,或者转换失败,返回默认值<br>
+     * 转换失败不会报错
+     * 
+     * @param value 被转换的值
+     * @param defaultValue 转换错误时的默认值
+     * @return 结果
+     */
+    public static Long toLong(Object value, Long defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Long)
+        {
+            return (Long) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).longValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StrUtil.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            // 支持科学计数法
+            return new BigDecimal(valueStr.trim()).longValue();
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+    
+    /**
+     * 转换为BigDecimal<br>
+     * 如果给定的值为空,或者转换失败,返回默认值<br>
+     * 转换失败不会报错
+     * 
+     * @param value 被转换的值
+     * @param defaultValue 转换错误时的默认值
+     * @return 结果
+     */
+    public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof BigDecimal)
+        {
+            return (BigDecimal) value;
+        }
+        if (value instanceof Long)
+        {
+            return new BigDecimal((Long) value);
+        }
+        if (value instanceof Double)
+        {
+            return new BigDecimal((Double) value);
+        }
+        if (value instanceof Integer)
+        {
+            return new BigDecimal((Integer) value);
+        }
+        final String valueStr = toStr(value, null);
+        if (StrUtil.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return new BigDecimal(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+}

+ 39 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/MybatisPlusGenerator.java

@@ -0,0 +1,39 @@
+package cn.com.v2.util;
+
+import java.util.Collections;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+import com.baomidou.mybatisplus.generator.fill.Column;
+
+
+public class MybatisPlusGenerator {
+	public static void main(String[] args) {
+		FastAutoGenerator.create(
+				"jdbc:sqlite:D:\\eclipse-workspace\\v2-goview-bate\\sqllite\\goview.db",
+				"", "").globalConfig(builder -> {
+					builder.author("fc") // 设置作者
+							// .enableSwagger() // 开启 swagger 模式
+							.fileOverride() // 覆盖已生成文件
+							.disableOpenDir() //禁止打开输出目录
+							.outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
+				}).packageConfig(builder -> {
+					builder.parent("cn.com") // 设置父包名
+							.moduleName("v2") // 设置父包模块名
+							.entity("model")
+							// .service() // 设置自定义service路径,不设置就是默认路径
+							.pathInfo(Collections.singletonMap(OutputFile.mapperXml,
+							System.getProperty("user.dir") + "/src/main/resources/mapper/")); // 设置mapperXml生成路径
+				}).strategyConfig(builder -> {
+					builder.addInclude("t_goview_project_data") // 设置需要生成的表名
+							.addTablePrefix("t_", "c_")
+							// 设置自动填充的时间字段
+							.entityBuilder().addTableFills(new Column("create_time", FieldFill.INSERT),
+							new Column("update_time", FieldFill.INSERT_UPDATE)); // 设置过滤表前缀
+
+				}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
+				.execute();
+	}
+}

+ 74 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/SaTokenUtil.java

@@ -0,0 +1,74 @@
+package cn.com.v2.util;
+
+
+import org.springframework.beans.BeanUtils;
+
+import cn.com.v2.model.SysUser;
+import cn.dev33.satoken.stp.StpUtil;
+
+/**
+ * 封装 Sa-Token 常用操作 
+ * @author kong
+ *
+ */
+public class SaTokenUtil {
+
+	/**
+     * 获取登录用户model
+     */
+    public static SysUser getUser() {
+    	Object object=StpUtil.getSession().get("user");
+    	if(object!=null){
+    		SysUser tsysUser=new SysUser();
+    		BeanUtils.copyProperties(tsysUser, object);
+    		return tsysUser;
+    	}
+    	return null;
+    }
+    
+    /**
+     * set用户
+     */
+    public static void setUser(SysUser user) {
+    	StpUtil.getSession().set("user", user);
+    }
+
+  /**
+   * 获取登录用户id
+   */
+	public static String getUserId() {
+		return StpUtil.getLoginIdAsString();
+	}
+    
+    /**
+     * 获取登录用户name
+     */
+    public static String getLoginName() {
+    	SysUser tsysUser = getUser();
+        if (tsysUser == null){
+            throw new RuntimeException("用户不存在!");
+        }
+        return tsysUser.getUsername();
+    }
+
+    /**
+     * 获取登录用户ip
+     * @return
+     * @author fuce
+     * @Date 2019年11月21日 上午9:58:26
+     */
+    public static String getIp() {
+    	
+        return StpUtil.getTokenSession().getString("login_ip");
+    }
+    /**
+     * 判断是否登录
+     * @return
+     * @author fuce
+     * @Date 2019年11月21日 上午9:58:26
+     */
+    public static boolean isLogin() {
+        return StpUtil.isLogin();
+    }
+    
+}

+ 155 - 0
service-cockpit/service-cockpit-biz/src/main/java/com/usky/cockpit/util/SnowflakeIdWorker.java

@@ -0,0 +1,155 @@
+package cn.com.v2.util;
+
+/**
+ * Twitter_Snowflake<br>
+ * SnowFlake的结构如下(每部分用-分开):<br>
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br>
+ * 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0<br>
+ * 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截)
+ * 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69<br>
+ * 10位的数据机器位,可以部署在1024个节点,包括5位datacenterId和5位workerId<br>
+ * 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号<br>
+ * 加起来刚好64位,为一个Long型。<br>
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。
+ */
+public class SnowflakeIdWorker {
+ 
+    // ==============================Fields===========================================
+    /** 开始时间截 (2015-01-01) */
+    private final long twepoch = 1489111610226L;
+ 
+    /** 机器id所占的位数 */
+    private final long workerIdBits = 5L;
+ 
+    /** 数据标识id所占的位数 */
+    private final long dataCenterIdBits = 5L;
+ 
+    /** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */
+    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
+ 
+    /** 支持的最大数据标识id,结果是31 */
+    private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits);
+ 
+    /** 序列在id中占的位数 */
+    private final long sequenceBits = 12L;
+ 
+    /** 机器ID向左移12位 */
+    private final long workerIdShift = sequenceBits;
+ 
+    /** 数据标识id向左移17位(12+5) */
+    private final long dataCenterIdShift = sequenceBits + workerIdBits;
+ 
+    /** 时间截向左移22位(5+5+12) */
+    private final long timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits;
+ 
+    /** 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) */
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits);
+ 
+    /** 工作机器ID(0~31) */
+    private long workerId;
+ 
+    /** 数据中心ID(0~31) */
+    private long dataCenterId;
+ 
+    /** 毫秒内序列(0~4095) */
+    private long sequence = 0L;
+ 
+    /** 上次生成ID的时间截 */
+    private long lastTimestamp = -1L;
+ 
+    
+    static SnowflakeIdWorker idWorker = new SnowflakeIdWorker(1, 1);
+    //==============================Constructors=====================================
+    /**
+     * 构造函数
+     * @param workerId 工作ID (0~31)
+     * @param dataCenterId 数据中心ID (0~31)
+     */
+    public SnowflakeIdWorker(long workerId, long dataCenterId) {
+        if (workerId > maxWorkerId || workerId < 0) {
+            throw new IllegalArgumentException(String.format("workerId can't be greater than %d or less than 0", maxWorkerId));
+        }
+        if (dataCenterId > maxDataCenterId || dataCenterId < 0) {
+            throw new IllegalArgumentException(String.format("dataCenterId can't be greater than %d or less than 0", maxDataCenterId));
+        }
+        this.workerId = workerId;
+        this.dataCenterId = dataCenterId;
+    }
+ 
+    // ==============================Methods==========================================
+    /**
+     * 获得下一个ID (该方法是线程安全的)
+     * @return SnowflakeId
+     */
+    public synchronized long nextId() {
+        long timestamp = timeGen();
+ 
+        //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常
+        if (timestamp < lastTimestamp) {
+            throw new RuntimeException(
+                    String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+        }
+ 
+        //如果是同一时间生成的,则进行毫秒内序列
+        if (lastTimestamp == timestamp) {
+            sequence = (sequence + 1) & sequenceMask;
+            //毫秒内序列溢出
+            if (sequence == 0) {
+                //阻塞到下一个毫秒,获得新的时间戳
+                timestamp = tilNextMillis(lastTimestamp);
+            }
+        }
+        //时间戳改变,毫秒内序列重置
+        else {
+            sequence = 0L;
+        }
+ 
+        //上次生成ID的时间截
+        lastTimestamp = timestamp;
+ 
+        //移位并通过或运算拼到一起组成64位的ID
+        return ((timestamp - twepoch) << timestampLeftShift) //
+                | (dataCenterId << dataCenterIdShift) //
+                | (workerId << workerIdShift) //
+                | sequence;
+    }
+ 
+    /**
+     * 阻塞到下一个毫秒,直到获得新的时间戳
+     * @param lastTimestamp 上次生成ID的时间截
+     * @return 当前时间戳
+     */
+    protected long tilNextMillis(long lastTimestamp) {
+        long timestamp = timeGen();
+        while (timestamp <= lastTimestamp) {
+            timestamp = timeGen();
+        }
+        return timestamp;
+    }
+ 
+    /**
+     * 返回以毫秒为单位的当前时间
+     * @return 当前时间(毫秒)
+     */
+    protected long timeGen() {
+        return System.currentTimeMillis();
+    }
+ 
+    //==============================Test=============================================
+    /** 测试 */
+    public static void main(String[] args) {
+        System.out.println(System.currentTimeMillis());
+        SnowflakeIdWorker idWorker = new SnowflakeIdWorker(1, 1);
+        long startTime = System.nanoTime();
+        for (int i = 0; i < 500; i++) {
+            long id = idWorker.nextId();
+            System.out.println(id);
+        }
+        System.out.println((System.nanoTime()-startTime)/1000000+"ms");
+    }
+    
+    public static String getUUID() {
+    	long id = idWorker.nextId();
+    	return String.valueOf(id);
+    }
+}

+ 16 - 0
service-cockpit/service-cockpit-biz/src/main/resources/application-dev.yml

@@ -0,0 +1,16 @@
+#dev环境  mysql7.0
+spring:
+  datasource:
+    driver-class-name: org.sqlite.JDBC
+    url: jdbc:sqlite:D:\文档和图片\工作文档\git\go-view-serve-master\go-view-serve-master\sqllite\goview.db
+    #linux服务器
+    #url: jdbc:sqlite://home/cqfy/project/OSSDATABASE/oss.db
+    username: 
+    password: 
+    ### 连接池配置
+    druid:
+      initial-size: 10
+      max-active: 100
+      min-idle: 30
+      max-wait: 40
+      validation-query: SELECT 1

+ 110 - 0
service-cockpit/service-cockpit-biz/src/main/resources/application.yml

@@ -0,0 +1,110 @@
+v2:
+  #虚拟路径映射路径 2个文件路径一一对应 第一个为主存储,其他为配置相关
+  xnljmap:
+   #win服务器  本地 注意!! 记住这个结尾有一个/
+   oss: file:D:/upload/
+   #linux服务器
+   #oss: file:/home/webapps/oss/
+  #虚拟路径映射路径 end
+  #本地存放地址 注意!! 记住这个结尾没有/
+  fileurl: D:/upload
+  #http://127.0.0.1:8080/oss/{yy}/2022-12-22/c83a77ae134a540c30daa6a0666fa945.md
+  httpurl: http://127.0.0.1:8083/
+  defaultFormat: .png
+#tomcat config
+server :
+  port : 8083
+  ##项目名字配置
+  servlet :
+    context-path : /
+    #session过期
+    session:
+      timeout: PT4H
+      #cookie:
+      #  name: jxfgzs
+  tomcat :
+    uri-encoding : UTF-8
+    #xx 报错修改的地方
+    max-connections: 200000
+    max-http-form-post-size: 9000000
+    threads:
+      max: 128
+      min-spare: 5
+spring :
+  # 环境 dev|test|prod
+  profiles :
+    active : dev
+  servlet:
+    multipart:
+      #设置总上传的数据大小
+      max-request-size: 100MB
+      #单个文件大小
+      maxFileSize : 30MB
+        #xx 报错修改的地方
+    max-connections: 200000
+    max-http-post-size: 9000000
+  #热部署模块
+  devtools:
+    restart:
+      #热部署开关
+      enabled: true
+      #指定热部署的目录
+      additional-paths: src/main/java
+      #指定目录不更新
+      exclude: test/**
+  mvc:   #静态文件
+    static-path-pattern : /static/**
+    pathmatch:
+      matching-strategy: ant_path_matcher
+  #模板引擎
+  thymeleaf:
+    model: HTML5
+    prefix: classpath:/templates/
+    suffix: .html
+    #指定编码
+    encoding: utf-8
+    #禁用缓存 默认false
+    cache: false
+#mybatis
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: cn.com.v2.model
+  global-config:
+    # 数据库相关配置
+    db-config:
+      #主键类型  AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
+      id-type: INPUT
+      #字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      db-type: sqlite
+    #刷新mapper 调试神器
+    refresh: true
+  # 原生配置
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
+sa-token: 
+    # token名称 (同时也是cookie名称)
+    token-name: satoken
+    # token有效期,单位s 默认30天, -1代表永不过期 
+    timeout: 2592000
+    # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
+    activity-timeout: -1
+    # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) 
+    is-concurrent: true
+    # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) 
+    is-share: true
+    # token风格
+    token-style: uuid
+    # 是否输出操作日志 
+    is-log: false

+ 25 - 0
service-cockpit/service-cockpit-biz/src/main/resources/bootstrap.yml

@@ -0,0 +1,25 @@
+# Tomcat
+server:
+  port: 8083
+
+# Spring
+spring:
+  application:
+    # 应用名称
+    name: service-cockpit
+  profiles:
+    # 环境配置
+    active: dev
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: usky-cloud-nacos:8848
+      config:
+        # 配置中心地址
+        server-addr: usky-cloud-nacos:8848
+        # 配置文件格式
+        file-extension: yml
+        # 共享配置
+        shared-configs:
+          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

+ 5 - 0
service-cockpit/service-cockpit-biz/src/main/resources/mapper/GoviewProjectDataMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.v2.mapper.GoviewProjectDataMapper">
+
+</mapper>

+ 5 - 0
service-cockpit/service-cockpit-biz/src/main/resources/mapper/GoviewProjectMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.v2.mapper.GoviewProjectMapper">
+
+</mapper>

+ 5 - 0
service-cockpit/service-cockpit-biz/src/main/resources/mapper/SysFileMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.v2oss.mapper.SysFileMapper">
+
+</mapper>

+ 5 - 0
service-cockpit/service-cockpit-biz/src/main/resources/mapper/SysUserMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.v2.mapper.SysUserMapper">
+
+</mapper>

+ 4 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/MybatisGeneratorUtils.java

@@ -43,10 +43,10 @@ public class MybatisGeneratorUtils {
         //2、数据源配置
         //修改数据源
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-cloud?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setUrl("jdbc:mysql://192.168.123.165:3306/usky-cloud?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
         dsc.setDriverName("com.mysql.jdbc.Driver");
-        dsc.setUsername("usky");
-        dsc.setPassword("Yt#75Usky");
+        dsc.setUsername("root");
+        dsc.setPassword("yt123456");
         mpg.setDataSource(dsc);
 
         // 3、包配置
@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("sys_dept");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("vc_stream");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 91 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcDeviceController.java

@@ -0,0 +1,91 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.domain.VcDevice;
+import com.usky.iot.service.VcDeviceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 视频配置信息表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-22
+ */
+@RestController
+@RequestMapping("/vcDevice")
+public class VcDeviceController {
+
+    @Autowired
+    private VcDeviceService vcDeviceService;
+
+    /**
+     * 视频设备信息查询
+     * @param groupId
+     * @return
+     */
+    @GetMapping("/VcDeviceList")
+    public ApiResult<List<VcDevice>> VcDeviceList(@RequestParam(value = "groupId",required = false) Integer groupId)
+    {
+        return ApiResult.success(vcDeviceService.VcDeviceList(groupId));
+    }
+
+    /**
+     * 视频设备信息分页查询
+     *
+     * @param videoNumber
+     * @param videoName
+     * @param groupId
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @GetMapping("/page")
+    public ApiResult<CommonPage<VcDevice>> pageList(@RequestParam(value = "videoNumber", required = false, defaultValue = "") String videoNumber,
+                                                     @RequestParam(value = "videoName", required = false, defaultValue = "") String videoName,
+                                                     @RequestParam(value = "groupId", required = false, defaultValue = "") Integer groupId,
+                                                     @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                     @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+        return ApiResult.success(vcDeviceService.pageList(videoNumber, videoName, groupId, pageNum, pageSize));
+    }
+
+    /**
+     * 新增
+     * @param vcDevice
+     * @return
+     */
+    @PostMapping("/add")
+    public ApiResult<Void> add(@RequestBody VcDevice vcDevice){
+        vcDeviceService.add(vcDevice);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param vcDevice
+     * @return
+     */
+    @PutMapping("/edit")
+    public ApiResult<Void> edit(@RequestBody VcDevice vcDevice){
+        vcDeviceService.update(vcDevice);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除记录
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id)
+    {
+        vcDeviceService.remove(id);
+        return ApiResult.success();
+    }
+}
+

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcDeviceGroupController.java

@@ -0,0 +1,21 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@Controller
+@RequestMapping("/vcDeviceGroup")
+public class VcDeviceGroupController {
+
+}
+

+ 80 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/VcStreamController.java

@@ -0,0 +1,80 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.VcDevice;
+import com.usky.iot.domain.VcStream;
+import com.usky.iot.service.VcStreamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@RestController
+@RequestMapping("/vcStream")
+public class VcStreamController {
+
+    @Autowired
+    private VcStreamService vcStreamService;
+
+    /**
+     * 流媒体信息分页查询
+     *
+     * @param platformAddress
+     * @param platformType
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
+    @GetMapping("/page")
+    public ApiResult<CommonPage<VcStream>> pageList(@RequestParam(value = "platformAddress", required = false, defaultValue = "") String platformAddress,
+                                                    @RequestParam(value = "platformType", required = false, defaultValue = "") Integer platformType,
+                                                    @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                    @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+        return ApiResult.success(vcStreamService.pageList(platformAddress, platformType, pageNum, pageSize));
+    }
+
+    /**
+     * 新增
+     * @param vcStream
+     * @return
+     */
+    @PostMapping("/add")
+    public ApiResult<Void> add(@RequestBody VcStream vcStream){
+        vcStreamService.add(vcStream);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改
+     * @param vcStream
+     * @return
+     */
+    @PutMapping("/edit")
+    public ApiResult<Void> edit(@RequestBody VcStream vcStream){
+        vcStreamService.update(vcStream);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除记录
+     */
+    @DeleteMapping("/{id}")
+    public ApiResult<Void> remove(@PathVariable("id") Integer id)
+    {
+        vcStreamService.remove(id);
+        return ApiResult.success();
+    }
+}
+

+ 96 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcDevice.java

@@ -0,0 +1,96 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 视频配置信息表
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class VcDevice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 视频中心主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 视频编号
+     */
+    private String videoNumber;
+
+    /**
+     * 视频名称
+     */
+    private String videoName;
+
+    /**
+     * 视频流
+     */
+    private String videoStream;
+
+    /**
+     * 摄像机类型
+     */
+    private Integer cameraType;
+
+    /**
+     * 流媒体ID
+     */
+    private Integer streamId;
+
+    /**
+     * 设备分组ID
+     */
+    private Integer groupId;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    /**
+     * 删除标识(默认0,已删除1)
+     */
+    private Integer delFlag;
+
+
+}

+ 66 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcDeviceGroup.java

@@ -0,0 +1,66 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class VcDeviceGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 站点分组表主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 分组名称
+     */
+    private String groupName;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 96 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/VcStream.java

@@ -0,0 +1,96 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class VcStream implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流媒体主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 流媒体名称
+     */
+    private String streamName;
+
+    /**
+     * 平台地址
+     */
+    private String platformAddress;
+
+    /**
+     * 用户KEY
+     */
+    private String userKey;
+
+    /**
+     * 用户密码
+     */
+    private String userPassword;
+
+    /**
+     * 平台类型
+     */
+    private Integer platformType;
+
+    /**
+     * 部署环境
+     */
+    private String deployAmbient;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    /**
+     * 删除标识(默认0,已删除1)
+     */
+    private Integer delFlag;
+
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcDeviceGroupMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.VcDeviceGroup;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+public interface VcDeviceGroupMapper extends CrudMapper<VcDeviceGroup> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcDeviceMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.VcDevice;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 视频配置信息表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-22
+ */
+public interface VcDeviceMapper extends CrudMapper<VcDevice> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/VcStreamMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.VcStream;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+public interface VcStreamMapper extends CrudMapper<VcStream> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcDeviceGroupService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.VcDeviceGroup;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+public interface VcDeviceGroupService extends CrudService<VcDeviceGroup> {
+
+}

+ 28 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcDeviceService.java

@@ -0,0 +1,28 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.domain.VcDevice;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 视频配置信息表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-22
+ */
+public interface VcDeviceService extends CrudService<VcDevice> {
+    List<VcDevice> VcDeviceList(Integer groupId);
+
+    CommonPage<VcDevice> pageList(String videoNumber, String videoName, Integer groupId ,Integer pageNum, Integer pageSize);
+
+    boolean add(VcDevice vcDevice);
+
+    void update(VcDevice vcDevice);
+
+    boolean remove(Integer id);
+}

+ 24 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/VcStreamService.java

@@ -0,0 +1,24 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.VcDevice;
+import com.usky.iot.domain.VcStream;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+public interface VcStreamService extends CrudService<VcStream> {
+    CommonPage<VcStream> pageList(String platformAddress, Integer platformType, Integer pageNum, Integer pageSize);
+
+    boolean add(VcStream vcStream);
+
+    void update(VcStream vcStream);
+
+    boolean remove(Integer id);
+}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcDeviceGroupServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.VcDeviceGroup;
+import com.usky.iot.mapper.VcDeviceGroupMapper;
+import com.usky.iot.service.VcDeviceGroupService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@Service
+public class VcDeviceGroupServiceImpl extends AbstractCrudService<VcDeviceGroupMapper, VcDeviceGroup> implements VcDeviceGroupService {
+
+}

+ 76 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcDeviceServiceImpl.java

@@ -0,0 +1,76 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseFacilityDevice;
+import com.usky.iot.domain.BaseGgpFacility;
+import com.usky.iot.domain.VcDevice;
+import com.usky.iot.mapper.VcDeviceMapper;
+import com.usky.iot.service.VcDeviceService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.BaseFacilityDeviceVO;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 视频配置信息表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-22
+ */
+@Service
+public class VcDeviceServiceImpl extends AbstractCrudService<VcDeviceMapper, VcDevice> implements VcDeviceService {
+    @Override
+    public List<VcDevice> VcDeviceList(Integer groupId){
+        LambdaQueryWrapper<VcDevice> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(VcDevice::getGroupId,groupId);
+        List<VcDevice> list = this.list(queryWrapper);
+        return list;
+    }
+
+    @Override
+    public CommonPage<VcDevice> pageList(String videoNumber, String videoName, Integer groupId , Integer pageNum,
+                                  Integer pageSize){
+        IPage<VcDevice> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<VcDevice> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.like(StringUtils.isNotBlank(videoName),VcDevice::getVideoName,videoName)
+                .eq(StringUtils.isNotBlank(videoNumber),VcDevice::getVideoNumber,videoNumber)
+                .eq(null != groupId,VcDevice::getGroupId,groupId)
+                .eq(VcDevice::getDelFlag,0)
+                .orderByDesc(VcDevice::getId);
+        page = this.page(page,lambdaQuery);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public boolean add(VcDevice vcDevice){
+        vcDevice.setCreateBy(SecurityUtils.getUsername());
+        vcDevice.setCreateTime(LocalDateTime.now());
+//        vcDevice.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
+//        vcDevice.setTenantId(SecurityUtils.getTenantId());
+        return this.save(vcDevice);
+    }
+
+    @Override
+    public void update(VcDevice vcDevice){
+        vcDevice.setUpdateBy(SecurityUtils.getUsername());
+        vcDevice.setUpdateTime(LocalDateTime.now());
+        this.updateById(vcDevice);
+    }
+
+    @Override
+    public boolean remove(Integer id) {
+        VcDevice vcDevice = this.getById(id);
+        vcDevice.setDelFlag(1);
+        return this.updateById(vcDevice);
+    }
+}

+ 61 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/VcStreamServiceImpl.java

@@ -0,0 +1,61 @@
+package com.usky.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.VcDevice;
+import com.usky.iot.domain.VcStream;
+import com.usky.iot.mapper.VcStreamMapper;
+import com.usky.iot.service.VcStreamService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-10-23
+ */
+@Service
+public class VcStreamServiceImpl extends AbstractCrudService<VcStreamMapper, VcStream> implements VcStreamService {
+    @Override
+    public CommonPage<VcStream> pageList(String platformAddress, Integer platformType, Integer pageNum, Integer pageSize){
+        IPage<VcStream> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<VcStream> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.like(StringUtils.isNotBlank(platformAddress),VcStream::getPlatformAddress,platformAddress)
+                .eq(null != platformType,VcStream::getPlatformType,platformType)
+                .eq(VcStream::getDelFlag,0)
+                .orderByDesc(VcStream::getId);
+        page = this.page(page,lambdaQuery);
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public boolean add(VcStream vcStream){
+        vcStream.setCreateBy(SecurityUtils.getUsername());
+        vcStream.setCreateTime(LocalDateTime.now());
+        return this.save(vcStream);
+    }
+
+    @Override
+    public void update(VcStream vcStream){
+        vcStream.setUpdateBy(SecurityUtils.getUsername());
+        vcStream.setUpdateTime(LocalDateTime.now());
+        this.updateById(vcStream);
+    }
+
+    @Override
+    public boolean remove(Integer id) {
+        VcStream vcStream = this.getById(id);
+        vcStream.setDelFlag(1);
+        return this.updateById(vcStream);
+    }
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/VcDeviceGroupMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.iot.mapper.VcDeviceGroupMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.VcDeviceGroup">
+        <id column="id" property="id" />
+        <result column="group_name" property="groupName" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 23 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/VcDeviceMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.iot.mapper.VcDeviceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.VcDevice">
+        <id column="id" property="id" />
+        <result column="video_number" property="videoNumber" />
+        <result column="video_name" property="videoName" />
+        <result column="video_stream" property="videoStream" />
+        <result column="camera_type" property="cameraType" />
+        <result column="stream_id" property="streamId" />
+        <result column="group_id" property="groupId" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="del_flag" property="delFlag" />
+    </resultMap>
+
+</mapper>

+ 23 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/VcStreamMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.iot.mapper.VcStreamMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.VcStream">
+        <id column="id" property="id" />
+        <result column="stream_name" property="streamName" />
+        <result column="platform_address" property="platformAddress" />
+        <result column="user_key" property="userKey" />
+        <result column="user_password" property="userPassword" />
+        <result column="platform_type" property="platformType" />
+        <result column="deploy_ambient" property="deployAmbient" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="del_flag" property="delFlag" />
+    </resultMap>
+
+</mapper>