hym 4 rokov pred
commit
9894f0068b
32 zmenil súbory, kde vykonal 2131 pridanie a 0 odobranie
  1. 101 0
      gateway/pom.xml
  2. 47 0
      gateway/src/main/resources/application-dev.properties
  3. 50 0
      gateway/src/main/resources/application-sit.properties
  4. 49 0
      gateway/src/main/resources/application-uat.properties
  5. 14 0
      gateway/src/main/resources/bootstrap.properties
  6. 23 0
      gateway/src/main/resources/logback-spring.xml
  7. 221 0
      pom.xml
  8. 20 0
      user_auth/pom.xml
  9. 66 0
      user_auth/src/main/resources/application-dev.properties
  10. 94 0
      user_auth/src/main/resources/application-sit.properties
  11. 96 0
      user_auth/src/main/resources/application-uat.properties
  12. 2 0
      user_auth/src/main/resources/application.properties
  13. 23 0
      user_auth/src/main/resources/logback-spring.xml
  14. 18 0
      user_center/pom.xml
  15. 23 0
      user_center/src/main/java/com/huaxu/UserCenterApplication.java
  16. 18 0
      user_center/src/main/java/com/huaxu/config/MybatisPlusConfig.java
  17. 26 0
      user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java
  18. 80 0
      user_center/src/main/java/com/huaxu/config/SwaggerConfig.java
  19. 109 0
      user_center/src/main/java/com/huaxu/controller/AppController.java
  20. 83 0
      user_center/src/main/java/com/huaxu/dao/AppMapper.java
  21. 67 0
      user_center/src/main/java/com/huaxu/entity/App.java
  22. 92 0
      user_center/src/main/java/com/huaxu/model/AjaxMessage.java
  23. 39 0
      user_center/src/main/java/com/huaxu/model/Pagination.java
  24. 112 0
      user_center/src/main/java/com/huaxu/model/ResultStatus.java
  25. 80 0
      user_center/src/main/java/com/huaxu/service/AppService.java
  26. 119 0
      user_center/src/main/java/com/huaxu/service/impl/AppServiceImpl.java
  27. 68 0
      user_center/src/main/resources/application-dev.properties
  28. 94 0
      user_center/src/main/resources/application-sit.properties
  29. 96 0
      user_center/src/main/resources/application-uat.properties
  30. 2 0
      user_center/src/main/resources/application.properties
  31. 23 0
      user_center/src/main/resources/logback-spring.xml
  32. 176 0
      user_center/src/main/resources/mapper/AppMapper.xml

+ 101 - 0
gateway/pom.xml

@@ -0,0 +1,101 @@
+<?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">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>gateway</artifactId>
+
+    <!--spring boot 父启动器依赖-->
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.1.6.RELEASE</version>
+    </parent>
+    <dependencyManagement>
+        <!--spring cloud依赖版本管理-->
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>Greenwich.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <!--SCA -->
+            <dependency>
+                <groupId>com.alibaba.cloud</groupId>
+                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
+                <version>2.1.0.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-gateway</artifactId>
+        </dependency>
+        <!--引入webflux-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
+        </dependency>
+        <!--日志依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+        </dependency>
+        <!--测试依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!--lombok工具-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+            <scope>provided</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!--编译插件-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                    <encoding>utf-8</encoding>
+                </configuration>
+            </plugin>
+            <!--打包插件-->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 47 - 0
gateway/src/main/resources/application-dev.properties

@@ -0,0 +1,47 @@
+server.port=8320
+
+logging.level.root=info
+logging.path=D:/logs/smart-city-v2-gateway
+logging.level.com.alibaba.nacos.client.naming=error
+#指定服务名
+spring.application.name=smart-city-v2-gateway
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
+
+spring.cloud.gateway.discovery.locator.enabled=true
+spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
+
+spring.cloud.gateway.routes[0].id=user
+spring.cloud.gateway.routes[0].uri=lb://smart-city-v2-user
+spring.cloud.gateway.routes[0].predicates[0]=Path=/user/**
+spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[1].id=admin
+spring.cloud.gateway.routes[1].uri=lb://smart-city-v2-admin
+spring.cloud.gateway.routes[1].predicates[0]=Path=/admin/**
+spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[2].id=device
+spring.cloud.gateway.routes[2].uri=lb://smart-city-v2-device
+spring.cloud.gateway.routes[2].predicates[0]=Path=/device/**
+spring.cloud.gateway.routes[2].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[3].id=workflow
+spring.cloud.gateway.routes[3].uri=lb://smart-city-v2-workflow
+spring.cloud.gateway.routes[3].predicates[0]=Path=/workflow/**
+spring.cloud.gateway.routes[3].filters[0]=StripPrefix=1
+
+
+spring.cloud.gateway.routes[4].id=access
+spring.cloud.gateway.routes[4].uri=lb://smart-city-v2-iothub-access
+spring.cloud.gateway.routes[4].predicates[0]=Path=/access/**
+spring.cloud.gateway.routes[4].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[5].id=log
+spring.cloud.gateway.routes[5].uri=lb://smart-city-v2-log
+spring.cloud.gateway.routes[5].predicates[0]=Path=/log/**
+spring.cloud.gateway.routes[5].filters[0]=StripPrefix=1
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB

+ 50 - 0
gateway/src/main/resources/application-sit.properties

@@ -0,0 +1,50 @@
+server.port=8320
+
+logging.level.root=info
+logging.path=/opt/sit/smartcity-gateway/logs
+logging.level.com.alibaba.nacos.client.naming=error
+#指定服务名
+spring.application.name=smart-city-v2-gateway
+
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.153:8329
+
+
+spring.cloud.gateway.discovery.locator.enabled=true
+spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
+
+spring.cloud.gateway.routes[0].id=user
+spring.cloud.gateway.routes[0].uri=lb://smart-city-v2-user
+spring.cloud.gateway.routes[0].predicates[0]=Path=/user/**
+spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[1].id=admin
+spring.cloud.gateway.routes[1].uri=lb://smart-city-v2-admin
+spring.cloud.gateway.routes[1].predicates[0]=Path=/admin/**
+spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[2].id=device
+spring.cloud.gateway.routes[2].uri=lb://smart-city-v2-device
+spring.cloud.gateway.routes[2].predicates[0]=Path=/device/**
+spring.cloud.gateway.routes[2].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[3].id=workflow
+spring.cloud.gateway.routes[3].uri=lb://smart-city-v2-workflow
+spring.cloud.gateway.routes[3].predicates[0]=Path=/workflow/**
+spring.cloud.gateway.routes[3].filters[0]=StripPrefix=1
+
+
+spring.cloud.gateway.routes[4].id=access
+spring.cloud.gateway.routes[4].uri=lb://smart-city-v2-iothub-access
+spring.cloud.gateway.routes[4].predicates[0]=Path=/access/**
+spring.cloud.gateway.routes[4].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[5].id=log
+spring.cloud.gateway.routes[5].uri=lb://smart-city-v2-log
+spring.cloud.gateway.routes[5].predicates[0]=Path=/log/**
+spring.cloud.gateway.routes[5].filters[0]=StripPrefix=1
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+

+ 49 - 0
gateway/src/main/resources/application-uat.properties

@@ -0,0 +1,49 @@
+server.port=8323
+
+logging.level.root=info
+logging.path=/opt/uat/smartcity-gateway/logs
+logging.level.com.alibaba.nacos.client.naming=error
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.153:8328
+
+#指定服务名
+spring.application.name=smart-city-v2-gateway
+
+spring.cloud.gateway.discovery.locator.enabled=true
+spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true
+
+spring.cloud.gateway.routes[0].id=user
+spring.cloud.gateway.routes[0].uri=lb://smart-city-v2-user
+spring.cloud.gateway.routes[0].predicates[0]=Path=/user/**
+spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[1].id=admin
+spring.cloud.gateway.routes[1].uri=lb://smart-city-v2-admin
+spring.cloud.gateway.routes[1].predicates[0]=Path=/admin/**
+spring.cloud.gateway.routes[1].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[2].id=device
+spring.cloud.gateway.routes[2].uri=lb://smart-city-v2-device
+spring.cloud.gateway.routes[2].predicates[0]=Path=/device/**
+spring.cloud.gateway.routes[2].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[3].id=workflow
+spring.cloud.gateway.routes[3].uri=lb://smart-city-v2-workflow
+spring.cloud.gateway.routes[3].predicates[0]=Path=/workflow/**
+spring.cloud.gateway.routes[3].filters[0]=StripPrefix=1
+
+
+spring.cloud.gateway.routes[4].id=access
+spring.cloud.gateway.routes[4].uri=lb://smart-city-v2-iothub-access
+spring.cloud.gateway.routes[4].predicates[0]=Path=/access/**
+spring.cloud.gateway.routes[4].filters[0]=StripPrefix=1
+
+spring.cloud.gateway.routes[5].id=log
+spring.cloud.gateway.routes[5].uri=lb://smart-city-v2-log
+spring.cloud.gateway.routes[5].predicates[0]=Path=/log/**
+spring.cloud.gateway.routes[5].filters[0]=StripPrefix=1
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+

+ 14 - 0
gateway/src/main/resources/bootstrap.properties

@@ -0,0 +1,14 @@
+#指定服务名
+spring.application.name=smart-city-v2-gateway
+# 这里的应用名对应 Nacos Config 中的 Data ID,实际应用名称以配置中心的配置为准
+# 指定查找名为 nacos-provider-config.yaml 的配置文件
+spring.cloud.nacos.config.file-extension=properties
+# Nacos Server 的地址
+spring.cloud.nacos.config.server-addr=127.0.0.1:8848
+#nacos
+spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
+
+management.endpoints.web.exposure.include=*
+
+#开发环境:dev  测试环境:sit  线上环境:prd
+spring.profiles.active=dev

+ 23 - 0
gateway/src/main/resources/logback-spring.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/tmp" />
+    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+    <appender name="TIME_FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_PATH}/smartcity-gateway.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <maxHistory>365</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="TIME_FILE" />
+    </root>
+</configuration>

+ 221 - 0
pom.xml

@@ -0,0 +1,221 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.huaxu</groupId>
+    <artifactId>platform</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <modules>
+        <module>user_auth</module>
+        <module>user_center</module>
+        <module>gateway</module>
+    </modules>
+
+    <!--父工程打包方式为pom-->
+    <packaging>pom</packaging>
+
+    <!--spring boot 父启动器依赖-->
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.1.6.RELEASE</version>
+    </parent>
+
+
+
+    <dependencyManagement>
+        <dependencies>
+            <!--spring cloud依赖管理,引入了Spring Cloud的版本-->
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>Greenwich.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
+
+            <!--SCA -->
+            <dependency>
+                <groupId>com.alibaba.cloud</groupId>
+                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
+                <version>2.1.0.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <!--SCA -->
+
+        </dependencies>
+    </dependencyManagement>
+
+
+    <dependencies>
+        <!--web依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <!--日志依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+        </dependency>
+        <!--测试依赖-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <!--lombok工具-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <!-- Actuator可以帮助你监控和管理Spring Boot应用-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <!--热部署-->
+        <!--<dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
+-->
+
+
+        <!--&lt;!&ndash;spring cloud commons模块引入&ndash;&gt;
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-commons</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.retry</groupId>
+            <artifactId>spring-retry</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.7.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.7.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+            <exclusions>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>guava</artifactId>
+                    <groupId>com.google.guava</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>5.1.47</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+            <exclusions>
+                <exclusion>
+
+                    <groupId>org.springframework.security.oauth.boot</groupId>
+                    <artifactId>spring-security-oauth2-autoconfigure</artifactId>
+                </exclusion>
+            </exclusions>
+
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security.oauth.boot</groupId>
+            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
+            <version>2.1.11.RELEASE</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jaxb-runtime</artifactId>
+                    <groupId>org.glassfish.jaxb</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>spring-security-oauth2</artifactId>
+                    <groupId>org.springframework.security.oauth</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security.oauth</groupId>
+            <artifactId>spring-security-oauth2</artifactId>
+            <version>2.3.4.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>20.0</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!--编译插件-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                    <encoding>utf-8</encoding>
+                </configuration>
+            </plugin>
+            <!--打包插件-->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 20 - 0
user_auth/pom.xml

@@ -0,0 +1,20 @@
+<?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>platform</artifactId>
+        <groupId>com.huaxu</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>user_auth</artifactId>
+   <dependencies>
+       <dependency>
+           <groupId>com.alibaba.cloud</groupId>
+           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+       </dependency>
+   </dependencies>
+
+</project>

+ 66 - 0
user_auth/src/main/resources/application-dev.properties

@@ -0,0 +1,66 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.path=D:/logs/smart-city-v2-user
+#\u6570\u636E\u5E93\u914D\u7F6E
+spring.datasource.url=jdbc:mysql://114.135.61.188:23305/uims?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+mybatis-plus.mapper-locations=classpath:com/mht/springbootmybatisplus/mapper/xml/*.xml
+mybatis-plus.type-aliases-package=com.mht.springbootmybatisplus.entity
+
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=114.135.61.188
+spring.redis.port=26379
+spring.redis.password=zoniot
+spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-active=8
+# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-wait=100
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.max-idle=8
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.min-idle=0
+# \u5173\u95ED\u8D85\u65F6\u65F6\u95F4
+spring.redis.lettuce.shutdown-timeout=100
+
+
+security.oauth2.client.client-id=smart-city-v2
+security.oauth2.client.client-secret=smart-city-v2-123
+
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=${logging.path}/data
+
+#kafka server
+spring.kafka.bootstrap-servers=114.135.61.188:36377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-dev
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
+
+
+
+

+ 94 - 0
user_auth/src/main/resources/application-sit.properties

@@ -0,0 +1,94 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.level.com.alibaba.nacos.client.naming=error
+logging.path=/opt/sit/smartcity-user/logs
+#数据库配置
+spring.datasource.url=jdbc:mysql://10.0.0.161:3306/smart_city_v2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.druid.filters=stat
+spring.datasource.druid.minIdle=1
+spring.datasource.druid.pool-prepared-statements=true
+spring.datasource.druid.max-open-prepared-statements=20
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-while-idle=true
+spring.datasource.druid.validation-query=select 'x'
+spring.datasource.druid.min-evictable-idle-time-millis=300000
+spring.datasource.druid.time-between-eviction-runs-millis=60000
+spring.datasource.druid.max-active=20
+spring.datasource.druid.max-wait=60000
+spring.datasource.druid.initial-size=1
+
+mybatis.mapper-locations=classpath*:mapper/*.xml
+mybatis.type-aliases-package=com.zcxk.*.entity
+mybatis.configuration.map-underscore-to-camel-case=true
+mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis.configuration.use-column-label=true
+
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=10.0.0.161
+spring.redis.port=6379
+spring.redis.password=zoniot
+spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# 连接池最大连接数(使用负值表示没有限制)
+spring.redis.lettuce.pool.max-active=8
+# 连接池最大阻塞等待时间(使用负值表示没有限制)
+spring.redis.lettuce.pool.max-wait=100
+# 连接池中的最大空闲连接
+spring.redis.lettuce.pool.max-idle=8
+# 连接池中的最小空闲连接
+spring.redis.lettuce.pool.min-idle=0
+# 关闭超时时间
+spring.redis.lettuce.shutdown-timeout=100
+
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=/opt/sit/smartcity-user/data
+
+#kafka server
+spring.kafka.bootstrap-servers=10.0.0.161:6377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-sit
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+com.zcxk.kafka.operation-log.topic=operation_log_sit
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.154:8321
+
+#dubbo
+dubbo.scan.base-packages=com.zcxk.user
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=-1
+dubbo.registry.address=spring-cloud://localhost
+dubbo.cloud.subscribed-services=smart-city-v2-admin
+spring.main.allow-bean-definition-overriding=true
+
+
+dubbo.application.qos-enable=true
+dubbo.application.qos-port=33333
+dubbo.application.qos-accept-foreign-ip=false
+
+#登录授权推送模板ID
+login.auth.tips.template=7lh0fkmppfPywI4YfrnMOAKQTGXzjueU6awMRD7KRUk
+spring.cloud.stream.bindings.wechat-notify-message.destination=wechat_notify_channel_sit
+
+

+ 96 - 0
user_auth/src/main/resources/application-uat.properties

@@ -0,0 +1,96 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.level.com.alibaba.nacos.client.naming=error
+logging.path=/opt/uat/smartcity-user/logs
+#\u6570\u636E\u5E93\u914D\u7F6E
+spring.datasource.url=jdbc:mysql://10.0.0.161:3305/smart_city_v2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.druid.filters=stat
+spring.datasource.druid.minIdle=1
+spring.datasource.druid.pool-prepared-statements=true
+spring.datasource.druid.max-open-prepared-statements=20
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-while-idle=true
+spring.datasource.druid.validation-query=select 'x'
+spring.datasource.druid.min-evictable-idle-time-millis=300000
+spring.datasource.druid.time-between-eviction-runs-millis=60000
+spring.datasource.druid.max-active=20
+spring.datasource.druid.max-wait=60000
+spring.datasource.druid.initial-size=1
+
+mybatis.mapper-locations=classpath*:mapper/*.xml
+mybatis.type-aliases-package=com.zcxk.*.entity
+mybatis.configuration.map-underscore-to-camel-case=true
+mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis.configuration.use-column-label=true
+
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=10.0.0.161
+spring.redis.port=6379
+spring.redis.password=zoniot
+#spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-active=8
+# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-wait=100
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.max-idle=8
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.min-idle=0
+# \u5173\u95ED\u8D85\u65F6\u65F6\u95F4
+spring.redis.lettuce.shutdown-timeout=100
+
+
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=/opt/uat/smartcity-user/data
+
+#kafka server
+spring.kafka.bootstrap-servers=10.0.0.161:6377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-uat
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+com.zcxk.kafka.operation-log.topic=operation_log_uat
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.155:8330
+
+
+
+#dubbo
+dubbo.scan.base-packages=com.zcxk.user
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=-1
+dubbo.registry.address=spring-cloud://localhost
+dubbo.cloud.subscribed-services=smart-city-v2-admin
+spring.main.allow-bean-definition-overriding=true
+
+dubbo.application.qos-enable=true
+dubbo.application.qos-port=33333
+dubbo.application.qos-accept-foreign-ip=false
+
+
+#登录授权推送模板ID
+login.auth.tips.template=7lh0fkmppfPywI4YfrnMOAKQTGXzjueU6awMRD7KRUk
+spring.cloud.stream.bindings.wechat-notify-message.destination=wechat_notify_channel_uat
+

+ 2 - 0
user_auth/src/main/resources/application.properties

@@ -0,0 +1,2 @@
+#开发环境:dev  测试环境:sit  线上环境:prd
+spring.profiles.active=dev

+ 23 - 0
user_auth/src/main/resources/logback-spring.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/tmp" />
+    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+    <appender name="TIME_FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_PATH}/smartcity-user.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <maxHistory>365</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="TIME_FILE" />
+    </root>
+</configuration>

+ 18 - 0
user_center/pom.xml

@@ -0,0 +1,18 @@
+<?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>platform</artifactId>
+        <groupId>com.huaxu</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>user_center</artifactId>
+   <dependencies>
+
+
+   </dependencies>
+
+</project>

+ 23 - 0
user_center/src/main/java/com/huaxu/UserCenterApplication.java

@@ -0,0 +1,23 @@
+package com.huaxu;
+
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+import org.springframework.context.ApplicationContext;
+
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+
+@EnableDiscoveryClient
+@SpringBootApplication
+public class UserCenterApplication {
+
+    public static void main(String[] args) {
+        ApplicationContext context = SpringApplication.run(UserCenterApplication.class, args);
+        context.getApplicationName();
+
+    }
+
+}

+ 18 - 0
user_center/src/main/java/com/huaxu/config/MybatisPlusConfig.java

@@ -0,0 +1,18 @@
+package com.huaxu.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConditionalOnClass(value = {PaginationInterceptor.class})
+public class MybatisPlusConfig {
+    @Bean
+      public PaginationInterceptor paginationInterceptor() {
+                PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+                paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
+                return paginationInterceptor;
+             }
+}

+ 26 - 0
user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java

@@ -0,0 +1,26 @@
+package com.huaxu.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http
+                .csrf().disable()
+                .requestMatchers().antMatchers("/**")
+                .and()
+                .authorizeRequests()
+                .antMatchers("/swagger-ui.html","/webjars/**", "/webjars/**", "/swagger-resources/**",
+                        "/v2/**","/app/**")
+                .permitAll() //配置不需要身份认证的请求路径
+                .anyRequest().authenticated() //其他所有访问路径都需要身份认证
+                .and()
+                .httpBasic();
+    }
+}

+ 80 - 0
user_center/src/main/java/com/huaxu/config/SwaggerConfig.java

@@ -0,0 +1,80 @@
+package com.huaxu.config;
+
+import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.google.common.collect.Lists.newArrayList;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+    @Bean
+    public Docket api() {
+
+        //添加请求信息
+        List<Parameter> pars = new ArrayList<Parameter>();
+        //添加sign
+        ParameterBuilder accessToken = new ParameterBuilder();
+        accessToken.name("access_token").description("access_token").modelRef(new ModelRef("string")).parameterType("query").required(false).build();
+
+        pars.add(accessToken.build());
+
+        return new Docket(DocumentationType.SWAGGER_2)
+                .ignoredParameterTypes(BasicErrorController.class)
+                .groupName("api")
+                .select()
+                .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.any())
+                .build()
+                //.globalOperationParameters(pars)
+                .apiInfo(apiInfo())
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title("用户中心Api")
+                .description("用户中心")
+                .version("1.0")
+                .build();
+    }
+
+    private List<ApiKey> securitySchemes() {
+        return newArrayList(
+                new ApiKey("Authorization", "Authorization", "header"));
+    }
+
+    private List<SecurityContext> securityContexts() {
+        return newArrayList(
+                SecurityContext.builder()
+                        .securityReferences(defaultAuth())
+                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
+                        .build()
+        );
+    }
+
+    List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        return newArrayList(
+                new SecurityReference("Authorization", authorizationScopes));
+    }
+
+}

+ 109 - 0
user_center/src/main/java/com/huaxu/controller/AppController.java

@@ -0,0 +1,109 @@
+package com.huaxu.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.entity.App;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.Pagination;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.service.AppService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 应用(App)控制层
+ *
+ * @author makejava
+ * @since 2020-10-20 16:56:39
+ */
+@RestController
+@RequestMapping("/app")
+@Api(tags = "")
+public class AppController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private AppService appService;
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param app 参数对象
+     * @return 单条数据
+     */
+    @RequestMapping(value = "get", method = RequestMethod.POST)
+    @ApiOperation(value = "查询设施配置列表")
+    public AjaxMessage<App> selectOne(
+            @ApiParam(value = "设置配置", required = true) @RequestBody App app) {
+        App result = appService.selectById(app.getId());
+
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    /**
+     * 新增一条数据
+     *
+     * @param app 实体类
+     * @return Response对象
+     */
+    @RequestMapping(value = "insert", method = RequestMethod.POST)
+    @ApiOperation(value = "查询设施配置列表")
+    public AjaxMessage<Integer> insert(@ApiParam(value = "设置配置", required = true) @RequestBody App app) {
+        int result = appService.insert(app);
+
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    /**
+     * 修改一条数据
+     *
+     * @param app 实体类
+     * @return Response对象
+     */
+    @RequestMapping(value = "update", method = RequestMethod.POST)
+    @ApiOperation(value = "查询设施配置列表")
+    public AjaxMessage<Integer> update(@ApiParam(value = "设置配置", required = true) @RequestBody App app) {
+        int result = appService.update(app);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+
+    }
+
+    /**
+     * 删除一条数据
+     *
+     * @param app 参数对象
+     * @return Response对象
+     */
+    @RequestMapping(value = "delete", method = RequestMethod.POST)
+    @ApiOperation(value = "查询设施配置列表")
+    public AjaxMessage<Integer> delete(@ApiParam(value = "设置配置", required = true) @RequestBody App app) {
+        int result = appService.deleteById(app.getId());
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+
+    /**
+     * 分页查询
+     *
+     * @param pageNum  偏移
+     * @param pageSize 条数
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectPage", method = RequestMethod.POST)
+    @ApiOperation(value = "查询设施配置列表")
+    public AjaxMessage<Pagination<App>> selectPage(Integer pageNum, Integer pageSize) {
+        App app = new App();
+        IPage<App> iPage = new Page<>(pageNum, pageSize);
+        iPage = appService.selectPage(app, iPage);
+        Pagination<App> pages = new Pagination<>(iPage);
+        return new AjaxMessage<>(ResultStatus.OK, pages);
+    }
+
+}

+ 83 - 0
user_center/src/main/java/com/huaxu/dao/AppMapper.java

@@ -0,0 +1,83 @@
+package com.huaxu.dao;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.entity.App;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 应用(App)表数据库访问层
+ *
+ * @author makejava
+ * @since 2020-10-20 17:02:50
+ */
+@Mapper
+public interface AppMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    App selectById(Integer id);
+
+
+    /**
+     * 查询全部
+     *
+     * @return 对象列表
+     */
+    List<App> selectAll();
+
+    /**
+     * 通过实体作为筛选条件查询
+     *
+     * @param app 实例对象
+     * @return 对象列表
+     */
+    List<App> selectList(App app);
+
+    /**
+     * 新增数据
+     *
+     * @param app 实例对象
+     * @return 影响行数
+     */
+    int insert(App app);
+
+    /**
+     * 批量新增
+     *
+     * @param apps 实例对象的集合
+     * @return 影响行数
+     */
+    int batchInsert(List<App> apps);
+
+    /**
+     * 修改数据
+     *
+     * @param app 实例对象
+     * @return 影响行数
+     */
+    int update(App app);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    int count();
+
+    IPage<App> selectPage(IPage<App> page, App app);
+
+}

+ 67 - 0
user_center/src/main/java/com/huaxu/entity/App.java

@@ -0,0 +1,67 @@
+package com.huaxu.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 应用(App)实体类
+ *
+ * @author makejava
+ * @since 2020-10-20 16:55:21
+ */
+@Data
+@ApiModel
+public class App implements Serializable {
+    private static final long serialVersionUID = 269554608076349144L;
+    /**
+     * 主键
+     */
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    /**
+     * 应用名称
+     */
+    @ApiModelProperty(value = "应用名称")
+    private String appName;
+    /**
+     * 应用ID
+     */
+    @ApiModelProperty(value = "应用ID")
+    private String appId;
+    /**
+     * 应用密钥
+     */
+    @ApiModelProperty(value = "应用密钥")
+    private String appSecretKey;
+    /**
+     * 应用URL
+     */
+    @ApiModelProperty(value = "应用URL")
+    private String appWebUrl;
+    /**
+     * 数据删除标识
+     */
+    @ApiModelProperty(value = "数据删除标识")
+    private Integer status;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    private Date dateCreate;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    @ApiModelProperty(value = "")
+    private Date dateUpdate;
+}

+ 92 - 0
user_center/src/main/java/com/huaxu/model/AjaxMessage.java

@@ -0,0 +1,92 @@
+package com.huaxu.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Ajax信息
+ *
+ */
+@ApiModel("返回信息")
+public class AjaxMessage<T> {
+
+    @ApiModelProperty(value = "返回状态", position = 0)
+    private int status;
+    @ApiModelProperty(value = "返回信息", position = 1)
+    private String msg;
+    @ApiModelProperty(value = "返回内容", position = 2)
+    private T data;
+
+    public AjaxMessage() {
+    }
+
+    public AjaxMessage(int status, String msg, T data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public AjaxMessage(ResultStatus resultStatus, T data) {
+        this.status = resultStatus.getStatus();
+        this.msg = resultStatus.getMessage();
+        this.data = data;
+    }
+
+    public AjaxMessage(ResultStatus resultStatus) {
+        this.status = resultStatus.getStatus();
+        this.msg = resultStatus.getMessage();
+    }
+
+
+
+    public void setMsg(int status, String msg, T data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public void setMsg(int status, String msg) {
+        this.status = status;
+        this.msg = msg;
+        this.data = null;
+    }
+
+    public void setMsg(ResultStatus resultStatus, T data) {
+        this.status = resultStatus.getStatus();
+        this.msg = resultStatus.getMessage();;
+        this.data = data;
+    }
+
+    public void setMsg(ResultStatus resultStatus) {
+        this.status = resultStatus.getStatus();
+        this.msg = resultStatus.getMessage();;
+        this.data = null;
+    }
+
+
+}

+ 39 - 0
user_center/src/main/java/com/huaxu/model/Pagination.java

@@ -0,0 +1,39 @@
+package com.huaxu.model;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 自定义分页
+ * @param <T>
+ */
+@Data
+public class Pagination<T> implements Serializable {
+    private static final long serialVersionUID = -4899829840696212229L;
+    @ApiModelProperty("总记录数")
+    private long total;
+
+    @ApiModelProperty("结果集")
+    private List<T> list;
+
+
+    public Pagination(){
+
+    };
+
+    /**
+     * 包装Page对象
+     *
+     * @param list
+     */
+    public Pagination(IPage<T> page) {
+
+        this.list = page.getRecords();
+        this.total = page.getTotal();
+    }
+}

+ 112 - 0
user_center/src/main/java/com/huaxu/model/ResultStatus.java

@@ -0,0 +1,112 @@
+package com.huaxu.model;
+
+import lombok.Getter;
+
+/**
+ * 
+ * @Description  
+ * <p> 全局错误码定义
+  *  错误码由6位数字组成,3位模块编码+3位错误描述码
+  *  模块编码如下: 
+ * 100 用户模块
+ * 200 设备模块
+ * 300 工单模块
+ * 400 工作流模块
+ * 500 系统模块
+ * 900 其他
+ * </p>
+ * @author wilian.peng
+ * @date 2019年10月28日 下午2:33:13
+ */
+@Getter
+public enum ResultStatus {
+
+    /**
+     *返回状态
+     */
+    OK(0, "成功"),
+
+    //100 人员模块
+    MEMBER_TELPHONE_ALREADY_EXISTS(100001,"手机号码已存在"),
+    PERSON_TYPE_ALREADY_EXISTS(1000002,"该场景下的人员类型已存在"),
+    PERSON_TYPE_NAME_ALREADY_EXISTS(100003,"该人员类型名称已存在"),
+
+    //200 设备模块
+    DEVICE_NO_EXISTS(200001,"该设备编号已存在,请修改"),
+    DEVICE_NO_FORMAT_WRONG(200002,"请输入16位设备编号"),
+    UNIT_FORMAT_WRONG(200003,"单元号限输入不超过4个字符"),
+    LOCATION_FORMAT_WRONG(200004,"注册地址限输入不超过100个字符"),
+
+
+
+    //300 工单模块
+    //NODE_APP_SAVE_FAILED(300007,"保存节点信息信息失败"),
+    //NODE_IS_NOT_EXISTS(300009,"操作节点不存在"),
+    //NODE_DEL_FAILED(300008,"删除节点信息失败"),
+    //NODE_EDIT_FAILED(300008,"编辑节点信息失败"),
+    //DEVICE_NO_DUPLICATE(300301,"设备编号重复"),
+
+
+    //400 工作流模块
+    PROCESS_DEPLOY_FAILED(400006,"流程部署失败"),
+    TASK_IS_NOT_EXISTS(400001,"查找不到当前任务,任务可能已经被处理完成"),
+    TASK_NO_AUTHENTICATION(400002,"不具备当前任务操作权限"),
+    TASK_OPERATE_FAILED(400003,"任务操作失败"),
+    CREATE_ALARM_FAILED(400004,"系统错误,无法创建工单"),
+    NO_MATCH_WORKFLOW(400005,"系统配置错误,无对应工单流程"),
+    PROCESS_ALREADY_EXISTS(400006,"该情况下的流程已存在"),
+    PROCESS_KEY_ALREADY_EXISTS(400007,"该流程的processKey已经存在"),
+    PROCESS_DEL_FAILED(400008,"删除流程失败"),
+    PROCESS_NAME_ALREADY_EXISTS(400009,"该流程的名称已经存在"),
+
+
+    //500 系统模块
+    PHONE_NUMBER_ALREADY_EXISTS(500001,"该手机号已存在,请修改"),
+    USERNAME_ALREADY_EXISTS(500002,"该用户名已存在,请修改"),
+    UNABLE_ENABLE_USER(500003,"普通用户无法启用、禁用用户"),
+    SITE_NAME_ALREADY_EXISTS(500004,"该站点名称已存在,请修改"),
+    NAME_ALREADY_EXISTS(500005,"该名称已经存在,请修改"),
+    ROLE_NAME_ALREADY_EXISTS(500006,"该角色名已存在,请修改"),
+    ORGAN_NAME_ALREADY_EXISTS(500007,"该组织名称已存在,请修改"),
+    PROGRAM_NAME_ALREADY_EXISTS(500008,"该权限名称已存在,请修改"),
+    CUSTOMER_NAME_ALREADY_EXISTS(500009, "该客户名称已存在,请修改"),
+    PROJECT_NAME_ALREADY_EXISTS(500010,"该项目已存在,请修改"),
+    CHANNEL_NAME_ALREADY_EXISTS(500011, "该场景名称已存在,请修改"),
+    PROJECT_DELETE_ERROR(500012,"项目使用中暂不可删除"),
+    COMMUNITY_NAME_ALREADY_EXISTS(500013, "该小区已存在,请修改"),
+    PRODUCT_CATEGORY_ALREADY_EXISTS(500014, "该产品类型已存在,请修改"),
+    PRODUCT_CATEGORY_DELETE_ERROR(500015,"该产品类型已经有设备安装,无法删除"),
+    BUILDING_NAME_ALREADY_EXISTS(500016, "该建筑已存在,请修改"),
+    ALARM_NAME_ALREADY_EXISTS(500017, "该告警名称已存在,请修改"),
+    PRODUCT_DELETE_ERROR(500018,"该产品已经有设备安装,无法删除"),
+    CUSTOMER_DELETE_ERROR(500019,"该客户已经有设备安装,无法删除"),
+
+    //900 其他
+    ERROR(900000, "失败"),
+    APPLICATION_ERROR(900001, "应用异常"),
+    SERVICE_ERROR(900002, "业务逻辑验证错误。"),
+    ACCESS_DENIED_ERROR(900003, "权限不足,无法访问。"),
+    USERNAME_NOT_FOUND_ERROR(900004, "账户未注册。"),
+    PHONE_NUMBER_NOT_FOUND_ERROR(900005, "您的手机号尚未注册,请注册后进行登录。"),
+    VALIDATE_CODE_EXPIRED_ERROR(900006, "您输入的验证码已过期,请刷新重试。"),
+    VALIDATE_CODE_ERROR(900007, "您输入的验证码有误,请重新输入。"),
+    UNABLE_SEND_ERROR(900008, "60秒内无法发送。"),
+
+    PHONE_VALIDATE_CODE_EXPIRED_ERROR(900010, "您输入的手机验证码已过期,请重新输入。"),
+    PHONE_VALIDATE_CODE_ERROR_ERROR(900011, "您输入的手机验证码有误,请重新输入。"),
+    PHONE_VALIDATE_CODE_EMPTY_ERROR(900012, "请输入手机验证码。"),
+    ACCESS_DISABLED_ERROR(900013, "您的账号已被禁用,如有问题请联系管理员。"),
+    PHONE_NUMBER_NOT_FOUND_WECHAT_ERROR(900014, "您微信绑定的手机号尚未注册,请使用平台注册账号进行登录。"),
+
+    SYSTEM_ERROR(999999, "系统错误"),
+    ;
+
+    private final int status;
+
+    private final String message;
+
+    ResultStatus(int status, String message) {
+        this.status = status;
+        this.message = message;
+    }
+}

+ 80 - 0
user_center/src/main/java/com/huaxu/service/AppService.java

@@ -0,0 +1,80 @@
+package com.huaxu.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.entity.App;
+
+import java.util.List;
+
+/**
+ * 应用(App)表服务接口
+ *
+ * @author makejava
+ * @since 2020-10-20 17:08:13
+ */
+public interface AppService {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    App selectById(Integer id);
+
+
+    /**
+     * 查询全部
+     *
+     * @return 对象列表
+     */
+    List<App> selectAll();
+
+    /**
+     * 通过实体作为筛选条件查询
+     *
+     * @param app 实例对象
+     * @return 对象列表
+     */
+    List<App> selectList(App app);
+
+    /**
+     * 新增数据
+     *
+     * @param app 实例对象
+     * @return 影响行数
+     */
+    int insert(App app);
+
+    /**
+     * 批量新增
+     *
+     * @param apps 实例对象的集合
+     * @return 影响行数
+     */
+    int batchInsert(List<App> apps);
+
+    /**
+     * 修改数据
+     *
+     * @param app 实例对象
+     * @return 修改
+     */
+    int update(App app);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    int count();
+
+    IPage<App> selectPage(App app, IPage<App> page);
+}

+ 119 - 0
user_center/src/main/java/com/huaxu/service/impl/AppServiceImpl.java

@@ -0,0 +1,119 @@
+package com.huaxu.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.dao.AppMapper;
+import com.huaxu.entity.App;
+import com.huaxu.service.AppService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 应用(App表)服务实现类
+ *
+ * @author makejava
+ * @since 2020-10-20 17:08:14
+ */
+@Service("appService")
+public class AppServiceImpl implements AppService {
+    @Autowired
+    private AppMapper appMapper;
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @Override
+    public App selectById(Integer id) {
+        return this.appMapper.selectById(id);
+    }
+
+
+    /**
+     * 查询所有
+     *
+     * @return 实例对象的集合
+     */
+    @Override
+    public List<App> selectAll() {
+        return this.appMapper.selectAll();
+    }
+
+    /**
+     * 根据条件查询
+     *
+     * @return 实例对象的集合
+     */
+    @Override
+    public List<App> selectList(App app) {
+        return this.appMapper.selectList(app);
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param app 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public int insert(App app) {
+        return this.appMapper.insert(app);
+    }
+
+    /**
+     * 批量新增
+     *
+     * @param apps 实例对象的集合
+     * @return 生效的条数
+     */
+    @Override
+    public int batchInsert(List<App> apps) {
+        return this.appMapper.batchInsert(apps);
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param app 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public int update(App app) {
+
+        return this.appMapper.update(app);
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @Override
+    public int deleteById(Integer id) {
+        return this.appMapper.deleteById(id);
+    }
+
+    /**
+     * 查询总数据数
+     *
+     * @return 数据总数
+     */
+    @Override
+    public int count() {
+        return this.appMapper.count();
+    }
+
+    /**
+     * 分页查询
+     *
+     * @return 对象列表
+     */
+    @Override
+    public IPage<App> selectPage(App app, IPage<App> page) {
+        return this.appMapper.selectPage(page, app);
+    }
+}

+ 68 - 0
user_center/src/main/resources/application-dev.properties

@@ -0,0 +1,68 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.path=D:/logs/smart-city-v2-user
+#\u6570\u636E\u5E93\u914D\u7F6E
+spring.datasource.url=jdbc:mysql://10.0.0.161:3306/uims?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+mybatis-plus.mapper-locations=classpath:mapper/*.xml
+mybatis-plus.type-aliases-package=com.huaxu.entity
+mybatis-plus.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=114.135.61.188
+spring.redis.port=26379
+spring.redis.password=zoniot
+spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-active=8
+# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-wait=100
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.max-idle=8
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.min-idle=0
+# \u5173\u95ED\u8D85\u65F6\u65F6\u95F4
+spring.redis.lettuce.shutdown-timeout=100
+
+
+security.oauth2.client.client-id=smart-city-v2
+security.oauth2.client.client-secret=smart-city-v2-123
+security.oauth2.resource.id=smartcity-deivice-service
+security.oauth2.resource.user-info-uri=http://localhost:8320/user/user/principal
+security.oauth2.resource.prefer-token-info=false
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=${logging.path}/data
+
+#kafka server
+spring.kafka.bootstrap-servers=114.135.61.188:36377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-dev
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
+
+
+
+

+ 94 - 0
user_center/src/main/resources/application-sit.properties

@@ -0,0 +1,94 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.level.com.alibaba.nacos.client.naming=error
+logging.path=/opt/sit/smartcity-user/logs
+#数据库配置
+spring.datasource.url=jdbc:mysql://10.0.0.161:3306/smart_city_v2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.druid.filters=stat
+spring.datasource.druid.minIdle=1
+spring.datasource.druid.pool-prepared-statements=true
+spring.datasource.druid.max-open-prepared-statements=20
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-while-idle=true
+spring.datasource.druid.validation-query=select 'x'
+spring.datasource.druid.min-evictable-idle-time-millis=300000
+spring.datasource.druid.time-between-eviction-runs-millis=60000
+spring.datasource.druid.max-active=20
+spring.datasource.druid.max-wait=60000
+spring.datasource.druid.initial-size=1
+
+mybatis.mapper-locations=classpath*:mapper/*.xml
+mybatis.type-aliases-package=com.zcxk.*.entity
+mybatis.configuration.map-underscore-to-camel-case=true
+mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis.configuration.use-column-label=true
+
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=10.0.0.161
+spring.redis.port=6379
+spring.redis.password=zoniot
+spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# 连接池最大连接数(使用负值表示没有限制)
+spring.redis.lettuce.pool.max-active=8
+# 连接池最大阻塞等待时间(使用负值表示没有限制)
+spring.redis.lettuce.pool.max-wait=100
+# 连接池中的最大空闲连接
+spring.redis.lettuce.pool.max-idle=8
+# 连接池中的最小空闲连接
+spring.redis.lettuce.pool.min-idle=0
+# 关闭超时时间
+spring.redis.lettuce.shutdown-timeout=100
+
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=/opt/sit/smartcity-user/data
+
+#kafka server
+spring.kafka.bootstrap-servers=10.0.0.161:6377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-sit
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+com.zcxk.kafka.operation-log.topic=operation_log_sit
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.154:8321
+
+#dubbo
+dubbo.scan.base-packages=com.zcxk.user
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=-1
+dubbo.registry.address=spring-cloud://localhost
+dubbo.cloud.subscribed-services=smart-city-v2-admin
+spring.main.allow-bean-definition-overriding=true
+
+
+dubbo.application.qos-enable=true
+dubbo.application.qos-port=33333
+dubbo.application.qos-accept-foreign-ip=false
+
+#登录授权推送模板ID
+login.auth.tips.template=7lh0fkmppfPywI4YfrnMOAKQTGXzjueU6awMRD7KRUk
+spring.cloud.stream.bindings.wechat-notify-message.destination=wechat_notify_channel_sit
+
+

+ 96 - 0
user_center/src/main/resources/application-uat.properties

@@ -0,0 +1,96 @@
+server.port=8322
+spring.application.name=smart-city-v2-user
+logging.level.root=info
+logging.level.com.alibaba.nacos.client.naming=error
+logging.path=/opt/uat/smartcity-user/logs
+#\u6570\u636E\u5E93\u914D\u7F6E
+spring.datasource.url=jdbc:mysql://10.0.0.161:3305/smart_city_v2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
+spring.datasource.username=root
+spring.datasource.password=100Zone@123
+spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.druid.filters=stat
+spring.datasource.druid.minIdle=1
+spring.datasource.druid.pool-prepared-statements=true
+spring.datasource.druid.max-open-prepared-statements=20
+spring.datasource.druid.test-on-return=false
+spring.datasource.druid.test-on-borrow=false
+spring.datasource.druid.test-while-idle=true
+spring.datasource.druid.validation-query=select 'x'
+spring.datasource.druid.min-evictable-idle-time-millis=300000
+spring.datasource.druid.time-between-eviction-runs-millis=60000
+spring.datasource.druid.max-active=20
+spring.datasource.druid.max-wait=60000
+spring.datasource.druid.initial-size=1
+
+mybatis.mapper-locations=classpath*:mapper/*.xml
+mybatis.type-aliases-package=com.zcxk.*.entity
+mybatis.configuration.map-underscore-to-camel-case=true
+mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis.configuration.use-column-label=true
+
+spring.jackson.time-zone=GMT+8
+#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+#spring.jackson.joda-date-time-format: yyyy-MM-dd HH:mm:ss
+
+# redis
+spring.redis.host=10.0.0.161
+spring.redis.port=6379
+spring.redis.password=zoniot
+#spring.redis.database=13
+spring.redis.timeout=36000
+
+# Lettuce
+# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-active=8
+# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
+spring.redis.lettuce.pool.max-wait=100
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.max-idle=8
+# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
+spring.redis.lettuce.pool.min-idle=0
+# \u5173\u95ED\u8D85\u65F6\u65F6\u95F4
+spring.redis.lettuce.shutdown-timeout=100
+
+
+
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
+spring.servlet.multipart.location=/opt/uat/smartcity-user/data
+
+#kafka server
+spring.kafka.bootstrap-servers=10.0.0.161:6377
+#kafka consumer config
+spring.kafka.consumer.group-id=user-group-uat
+spring.kafka.consumer.auto-offset-reset=latest
+spring.kafka.consumer.enable-auto-commit=true
+#kafka producer config
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=4096
+spring.kafka.producer.buffer-memory=40960
+com.zcxk.kafka.operation-log.topic=operation_log_uat
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=*
+
+#nacos
+spring.cloud.nacos.discovery.server-addr=10.0.0.155:8330
+
+
+
+#dubbo
+dubbo.scan.base-packages=com.zcxk.user
+dubbo.protocol.name=dubbo
+dubbo.protocol.port=-1
+dubbo.registry.address=spring-cloud://localhost
+dubbo.cloud.subscribed-services=smart-city-v2-admin
+spring.main.allow-bean-definition-overriding=true
+
+dubbo.application.qos-enable=true
+dubbo.application.qos-port=33333
+dubbo.application.qos-accept-foreign-ip=false
+
+
+#登录授权推送模板ID
+login.auth.tips.template=7lh0fkmppfPywI4YfrnMOAKQTGXzjueU6awMRD7KRUk
+spring.cloud.stream.bindings.wechat-notify-message.destination=wechat_notify_channel_uat
+

+ 2 - 0
user_center/src/main/resources/application.properties

@@ -0,0 +1,2 @@
+#开发环境:dev  测试环境:sit  线上环境:prd
+spring.profiles.active=dev

+ 23 - 0
user_center/src/main/resources/logback-spring.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/tmp" />
+    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+    <appender name="TIME_FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_PATH}/smartcity-user.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <maxHistory>365</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="TIME_FILE" />
+    </root>
+</configuration>

+ 176 - 0
user_center/src/main/resources/mapper/AppMapper.xml

@@ -0,0 +1,176 @@
+<?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.huaxu.dao.AppMapper">
+    <!-- 结果集 -->
+    <resultMap type="com.huaxu.entity.App" id="AppMap">
+        <result property="id" column="ID" jdbcType="INTEGER"/>
+        <result property="appName" column="APP_NAME" jdbcType="VARCHAR"/>
+        <result property="appId" column="APP_ID" jdbcType="VARCHAR"/>
+        <result property="appSecretKey" column="APP_SECRET_KEY" jdbcType="VARCHAR"/>
+        <result property="appWebUrl" column="APP_WEB_URL" jdbcType="VARCHAR"/>
+        <result property="status" column="STATUS" jdbcType="INTEGER"/>
+        <result property="createBy" column="CREATE_BY" jdbcType="VARCHAR"/>
+        <result property="dateCreate" column="DATE_CREATE" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="UPDATE_BY" jdbcType="VARCHAR"/>
+        <result property="dateUpdate" column="DATE_UPDATE" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <!-- 基本字段 -->
+    <sql id="Base_Column_List">
+        ID, APP_NAME, APP_ID, APP_SECRET_KEY, APP_WEB_URL, STATUS, CREATE_BY, DATE_CREATE, UPDATE_BY, DATE_UPDATE    </sql>
+
+    <!-- 查询单个 -->
+    <select id="selectById" resultMap="AppMap">
+        select
+        <include refid="Base_Column_List"/>
+        from uims_app
+        where ID = #{id}
+    </select>
+
+
+    <!-- 查询全部 -->
+    <select id="selectAll" resultMap="AppMap">
+        select
+        <include refid="Base_Column_List"/>
+        from uims_app
+    </select>
+
+    <!--通过实体作为筛选条件查询-->
+    <select id="selectList" resultMap="AppMap">
+        select
+        <include refid="Base_Column_List"/>
+        from uims_app
+        <where>
+            <if test="id != null">
+                and ID = #{id}
+            </if>
+            <if test="appName != null and appName != ''">
+                and APP_NAME = #{appName}
+            </if>
+            <if test="appId != null and appId != ''">
+                and APP_ID = #{appId}
+            </if>
+            <if test="appSecretKey != null and appSecretKey != ''">
+                and APP_SECRET_KEY = #{appSecretKey}
+            </if>
+            <if test="appWebUrl != null and appWebUrl != ''">
+                and APP_WEB_URL = #{appWebUrl}
+            </if>
+            <if test="status != null">
+                and STATUS = #{status}
+            </if>
+            <if test="createBy != null and createBy != ''">
+                and CREATE_BY = #{createBy}
+            </if>
+            <if test="dateCreate != null">
+                and DATE_CREATE = #{dateCreate}
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                and UPDATE_BY = #{updateBy}
+            </if>
+            <if test="dateUpdate != null">
+                and DATE_UPDATE = #{dateUpdate}
+            </if>
+        </where>
+    </select>
+
+    <!-- 新增所有列 -->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into uims_app(ID, APP_NAME, APP_ID, APP_SECRET_KEY, APP_WEB_URL, STATUS, CREATE_BY, DATE_CREATE, UPDATE_BY, DATE_UPDATE)
+        values ( #{id}, #{appName}, #{appId}, #{appSecretKey}, #{appWebUrl}, #{status}, #{createBy}, #{dateCreate}, #{updateBy}, #{dateUpdate})
+    </insert>
+
+    <!-- 批量新增 -->
+    <insert id="batchInsert">
+        insert into uims_app(ID, APP_NAME, APP_ID, APP_SECRET_KEY, APP_WEB_URL, STATUS, CREATE_BY, DATE_CREATE,
+        UPDATE_BY, DATE_UPDATE)
+        values
+        <foreach collection="apps" item="item" index="index" separator=",">
+            (
+            #{item.id}, #{item.appName}, #{item.appId}, #{item.appSecretKey}, #{item.appWebUrl}, #{item.status},
+            #{item.createBy}, #{item.dateCreate}, #{item.updateBy}, #{item.dateUpdate} )
+        </foreach>
+    </insert>
+
+    <!-- 通过主键修改数据 -->
+    <update id="update">
+        update uims.uims_app
+        <set>
+            <if test="appName != null and appName != ''">
+                APP_NAME = #{appName},
+            </if>
+            <if test="appId != null and appId != ''">
+                APP_ID = #{appId},
+            </if>
+            <if test="appSecretKey != null and appSecretKey != ''">
+                APP_SECRET_KEY = #{appSecretKey},
+            </if>
+            <if test="appWebUrl != null and appWebUrl != ''">
+                APP_WEB_URL = #{appWebUrl},
+            </if>
+            <if test="status != null">
+                STATUS = #{status},
+            </if>
+            <if test="createBy != null and createBy != ''">
+                CREATE_BY = #{createBy},
+            </if>
+            <if test="dateCreate != null">
+                DATE_CREATE = #{dateCreate},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                UPDATE_BY = #{updateBy},
+            </if>
+            <if test="dateUpdate != null">
+                DATE_UPDATE = #{dateUpdate},
+            </if>
+        </set>
+        where ID = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete from uims_app where ID = #{id}
+    </delete>
+
+    <!-- 总数 -->
+    <select id="count" resultType="int">
+        select count(*) from uims_app
+    </select>
+    <select id="selectPage" resultMap="AppMap">
+        select
+        <include refid="Base_Column_List"/>
+        from uims_app
+        <where>
+            <if test="app.id != null">
+                and ID = #{app.id}
+            </if>
+            <if test="app.appName != null and app.appName != ''">
+                and APP_NAME = #{app.appName}
+            </if>
+            <if test="app.appId != null and app.appId != ''">
+                and APP_ID = #{app.appId}
+            </if>
+            <if test="app.appSecretKey != null and app.appSecretKey != ''">
+                and APP_SECRET_KEY = #{app.appSecretKey}
+            </if>
+            <if test="app.appWebUrl != null and app.appWebUrl != ''">
+                and APP_WEB_URL = #{app.appWebUrl}
+            </if>
+            <if test="app.status != null">
+                and STATUS = #{app.status}
+            </if>
+            <if test="app.createBy != null and app.createBy != ''">
+                and CREATE_BY = #{app.createBy}
+            </if>
+            <if test="app.dateCreate != null">
+                and DATE_CREATE = #{app.dateCreate}
+            </if>
+            <if test="app.updateBy != null and app.updateBy != ''">
+                and UPDATE_BY = #{app.updateBy}
+            </if>
+            <if test="app.dateUpdate != null">
+                and DATE_UPDATE = #{app.dateUpdate}
+            </if>
+        </where>
+    </select>
+</mapper>