wangxiaofei 3 kuukautta sitten
vanhempi
commit
c2a819b9e8
100 muutettua tiedostoa jossa 908 lisäystä ja 5361 poistoa
  1. 5 0
      docker/docker-compose-l1.yml
  2. 1 1
      docker/docker-compose-l2.yml
  3. 156 0
      docker/docker-compose-prod.yml
  4. 1 0
      docker/docker-compose.yml
  5. 0 1
      pom.xml
  6. 53 1
      taphole-admin/pom.xml
  7. 3 0
      taphole-admin/src/main/java/com/sckj/admin/config/MybatisPlusConfig.java
  8. 1 0
      taphole-admin/src/main/java/com/sckj/admin/service/impl/IndexServiceImpl.java
  9. 1 1
      taphole-admin/src/main/resources/application-prod.yml
  10. 1 1
      taphole-admin/src/main/resources/application.yml
  11. 8 0
      taphole-device/src/main/java/com/sckj/device/vo/TCameraListedVo.java
  12. 0 56
      taphole-front/pom.xml
  13. 0 25
      taphole-front/src/main/java/com/sckj/front/TapholeFrontApplication.java
  14. 0 187
      taphole-front/src/main/java/com/sckj/front/TapholeFrontInterceptor.java
  15. 0 72
      taphole-front/src/main/java/com/sckj/front/TapholeFrontThreadLocal.java
  16. 0 27
      taphole-front/src/main/java/com/sckj/front/cache/ScanLoginCache.java
  17. 0 21
      taphole-front/src/main/java/com/sckj/front/config/MybatisPlusConfig.java
  18. 0 49
      taphole-front/src/main/java/com/sckj/front/config/SwaggerConfig.java
  19. 0 51
      taphole-front/src/main/java/com/sckj/front/config/WebMvcConfig.java
  20. 0 42
      taphole-front/src/main/java/com/sckj/front/config/stp/StpInException.java
  21. 0 90
      taphole-front/src/main/java/com/sckj/front/controller/ArticleController.java
  22. 0 107
      taphole-front/src/main/java/com/sckj/front/controller/IndexController.java
  23. 0 118
      taphole-front/src/main/java/com/sckj/front/controller/LoginController.java
  24. 0 38
      taphole-front/src/main/java/com/sckj/front/controller/LogsController.java
  25. 0 126
      taphole-front/src/main/java/com/sckj/front/controller/PayController.java
  26. 0 64
      taphole-front/src/main/java/com/sckj/front/controller/PcController.java
  27. 0 55
      taphole-front/src/main/java/com/sckj/front/controller/RechargeController.java
  28. 0 50
      taphole-front/src/main/java/com/sckj/front/controller/UploadController.java
  29. 0 116
      taphole-front/src/main/java/com/sckj/front/controller/UserController.java
  30. 0 34
      taphole-front/src/main/java/com/sckj/front/controller/WechatController.java
  31. 0 75
      taphole-front/src/main/java/com/sckj/front/service/IArticleService.java
  32. 0 53
      taphole-front/src/main/java/com/sckj/front/service/IIndexService.java
  33. 0 93
      taphole-front/src/main/java/com/sckj/front/service/ILoginService.java
  34. 0 14
      taphole-front/src/main/java/com/sckj/front/service/ILogsService.java
  35. 0 52
      taphole-front/src/main/java/com/sckj/front/service/IPayService.java
  36. 0 43
      taphole-front/src/main/java/com/sckj/front/service/IPcService.java
  37. 0 45
      taphole-front/src/main/java/com/sckj/front/service/IRechargeService.java
  38. 0 103
      taphole-front/src/main/java/com/sckj/front/service/IUserService.java
  39. 0 9
      taphole-front/src/main/java/com/sckj/front/service/IWechatService.java
  40. 0 273
      taphole-front/src/main/java/com/sckj/front/service/impl/ArticleServiceImpl.java
  41. 0 204
      taphole-front/src/main/java/com/sckj/front/service/impl/IndexServiceImpl.java
  42. 0 445
      taphole-front/src/main/java/com/sckj/front/service/impl/LoginServiceImpl.java
  43. 0 55
      taphole-front/src/main/java/com/sckj/front/service/impl/LogsServiceImpl.java
  44. 0 253
      taphole-front/src/main/java/com/sckj/front/service/impl/PayServiceImpl.java
  45. 0 312
      taphole-front/src/main/java/com/sckj/front/service/impl/PcServiceImpI.java
  46. 0 131
      taphole-front/src/main/java/com/sckj/front/service/impl/RechargeServiceImpl.java
  47. 0 432
      taphole-front/src/main/java/com/sckj/front/service/impl/UserServiceImpl.java
  48. 0 47
      taphole-front/src/main/java/com/sckj/front/service/impl/WechatServiceImpl.java
  49. 0 47
      taphole-front/src/main/java/com/sckj/front/validate/PaymentValidate.java
  50. 0 19
      taphole-front/src/main/java/com/sckj/front/validate/RechargeValidate.java
  51. 0 22
      taphole-front/src/main/java/com/sckj/front/validate/article/ArticleCollectValidate.java
  52. 0 27
      taphole-front/src/main/java/com/sckj/front/validate/article/ArticleSearchValidate.java
  53. 0 25
      taphole-front/src/main/java/com/sckj/front/validate/common/PageValidate.java
  54. 0 30
      taphole-front/src/main/java/com/sckj/front/validate/common/SmsValidate.java
  55. 0 17
      taphole-front/src/main/java/com/sckj/front/validate/login/LoginCodeValidate.java
  56. 0 29
      taphole-front/src/main/java/com/sckj/front/validate/login/LoginPhoneValidate.java
  57. 0 24
      taphole-front/src/main/java/com/sckj/front/validate/login/LoginPwdValidate.java
  58. 0 27
      taphole-front/src/main/java/com/sckj/front/validate/login/LoginScanValidate.java
  59. 0 32
      taphole-front/src/main/java/com/sckj/front/validate/login/RegisterValidate.java
  60. 0 24
      taphole-front/src/main/java/com/sckj/front/validate/users/NewUserUpdateValidate.java
  61. 0 20
      taphole-front/src/main/java/com/sckj/front/validate/users/UserBindWechatValidate.java
  62. 0 27
      taphole-front/src/main/java/com/sckj/front/validate/users/UserChangePwdValidate.java
  63. 0 36
      taphole-front/src/main/java/com/sckj/front/validate/users/UserForgetPwdValidate.java
  64. 0 37
      taphole-front/src/main/java/com/sckj/front/validate/users/UserPhoneBindValidate.java
  65. 0 20
      taphole-front/src/main/java/com/sckj/front/validate/users/UserPhoneMnpValidate.java
  66. 0 26
      taphole-front/src/main/java/com/sckj/front/validate/users/UserUpdateValidate.java
  67. 0 25
      taphole-front/src/main/java/com/sckj/front/vo/RechargeConfigVo.java
  68. 0 31
      taphole-front/src/main/java/com/sckj/front/vo/RechargeRecordVo.java
  69. 0 21
      taphole-front/src/main/java/com/sckj/front/vo/article/ArticleCateVo.java
  70. 0 36
      taphole-front/src/main/java/com/sckj/front/vo/article/ArticleCollectVo.java
  71. 0 45
      taphole-front/src/main/java/com/sckj/front/vo/article/ArticleDetailVo.java
  72. 0 36
      taphole-front/src/main/java/com/sckj/front/vo/article/ArticleListedVo.java
  73. 0 22
      taphole-front/src/main/java/com/sckj/front/vo/article/PcArticleCenterVo.java
  74. 0 64
      taphole-front/src/main/java/com/sckj/front/vo/article/PcArticleDetailVo.java
  75. 0 27
      taphole-front/src/main/java/com/sckj/front/vo/login/LoginTokenVo.java
  76. 0 18
      taphole-front/src/main/java/com/sckj/front/vo/login/LoginUrlsVo.java
  77. 0 34
      taphole-front/src/main/java/com/sckj/front/vo/pay/PayStatusVo.java
  78. 0 27
      taphole-front/src/main/java/com/sckj/front/vo/pay/PayWayInfoVo.java
  79. 0 21
      taphole-front/src/main/java/com/sckj/front/vo/pay/PayWayListVo.java
  80. 0 49
      taphole-front/src/main/java/com/sckj/front/vo/user/UserCenterVo.java
  81. 0 65
      taphole-front/src/main/java/com/sckj/front/vo/user/UserInfoVo.java
  82. 0 19
      taphole-front/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  83. 0 24
      taphole-front/src/main/resources/application-dev-example.yml
  84. 0 83
      taphole-front/src/main/resources/application.yml
  85. 0 10
      taphole-front/src/main/resources/banner.txt
  86. 0 80
      taphole-front/src/main/resources/log4j2-spring.xml
  87. 8 0
      taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java
  88. 56 5
      taphole-iron/src/main/java/com/sckj/iron/controller/TIronModelController.java
  89. 71 22
      taphole-iron/src/main/java/com/sckj/iron/controller/TIronStepController.java
  90. 3 0
      taphole-iron/src/main/java/com/sckj/iron/entity/TIronModel.java
  91. 22 25
      taphole-iron/src/main/java/com/sckj/iron/entity/TIronStepLog.java
  92. 1 1
      taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetSDK.java
  93. 3 0
      taphole-iron/src/main/java/com/sckj/iron/mapper/TIronStepLogMapper.java
  94. 81 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java
  95. 140 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronModelServiceImpl.java
  96. 37 5
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronParamServiceImpl.java
  97. 4 0
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronStepLogServiceImpl.java
  98. 143 49
      taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronStepServiceImpl.java
  99. 52 56
      taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java
  100. 57 0
      taphole-iron/src/main/java/com/sckj/iron/validate/TIronModelCreateValidate.java

+ 5 - 0
docker/docker-compose-l1.yml

@@ -98,6 +98,11 @@ services:
     build:
       context: ./l1
       dockerfile: Dockerfile
+    volumes:
+      # - ./target/taphole-admin-1.0.0.jar:/app/my-springboot-app.jar
+      #- ./target/loadFFmpeg.properties:/app/loadFFmpeg.properties
+      - /home/taphole/logs:/app/logs
+      # - /usr/local/ffmpeg/bin:/usr/local/ffmpeg/bin
     ports:
       - "58080:8080"
       - "53000:33000"

+ 1 - 1
docker/docker-compose-l2.yml

@@ -114,4 +114,4 @@ services:
       - webrtc
     networks:
       taphole:
-        ipv4_address: 172.28.1.300
+        ipv4_address: 172.28.1.222

+ 156 - 0
docker/docker-compose-prod.yml

@@ -0,0 +1,156 @@
+#指定使用的 Docker Compose API 版本
+version: '3'
+
+networks:
+  taphole:
+    driver: bridge
+    ipam:
+      config:
+        - subnet: 172.28.1.0/24
+#定义了要运行的服务列表
+services:
+
+  mysql:
+    container_name: taphole-mysql
+    image: mysql:5.7.29 #X86架构
+    #image: amd64/mysql:5.7.29 #arm架构
+    restart: always
+    environment:
+      MYSQL_ROOT_PASSWORD: root
+    #映射宿主机当前目录到容器
+    volumes:
+      - ./mysql57/initdb:/docker-entrypoint-initdb.d
+      - ./mysql57/data:/var/lib/mysql #数据文件目录挂载
+      - ./mysql57/conf:/etc/mysql/conf.d #配置文件目录挂载
+      - ./mysql57/log:/var/log/mysql #日志文件目录挂载
+    networks:
+      - taphole
+    ports:
+      - "13306:3306"
+    privileged: true
+    #容器启动后执行的命令
+    command: [
+      'mysqld',
+      '--innodb-buffer-pool-size=80M',
+      '--character-set-server=utf8mb4',
+      '--collation-server=utf8mb4_unicode_ci',
+      '--default-time-zone=+8:00',
+      '--lower-case-table-names=1'
+    ]
+
+
+  redis:
+    container_name: taphole-redis
+    image: redis:7.0.4
+    privileged: true
+    restart: always
+    volumes:
+      - ./redis/data:/data
+    environment:
+      TZ: "Asia/Shanghai"
+    networks:
+      - taphole
+    ports:
+      - "16379:6379"
+    command: redis-server --appendonly yes
+
+  webrtc:
+    image: webrtc-streamer:latest
+    container_name: taphole-webrtc
+    stdin_open: true
+    tty: true
+    network_mode: "host"
+
+
+  nginx:
+    image: nginx:latest
+    container_name: taphole-nginx
+    volumes:
+      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf #配置文件目录挂载
+      - ./nginx/conf/default.conf:/etc/nginx/default.conf #配置文件目录挂载
+      - ./nginx/html:/etc/nginx/html #静态资源根目录挂载
+      - ./nginx/logs:/var/log/nginx #日志文件目录挂载
+    ports:
+      - 15080:80
+    networks:
+      - taphole
+
+  app:
+    image: taphole-app:latest
+    container_name: taphole-app
+    build:
+      context: .
+      dockerfile: Dockerfile
+    volumes:
+      - /home/document/taphole/hcsdk/linux:/home/document/taphole/hcsdk/linux
+      - /home/document/uploads/taphole/:/home/document/uploads/taphole/  #映射资源目录
+      - /home/taphole/app/logs:/app/logs
+    ports:
+      - "28080:8080"
+      - "33000:33000"
+    environment:
+      - PREFER_HOST_MODE=hostname
+      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/taphole
+      - SPRING_DATASOURCE_USERNAME=root
+      - SPRING_DATASOURCE_PASSWORD=root
+      - SPRING_REDIS_HOST=redis
+      - SPRING_REDIS_PORT=6379
+    depends_on:
+      - mysql
+      - redis
+      - webrtc
+    networks:
+      taphole:
+        ipv4_address: 172.28.1.100
+
+  l1:
+    image: taphole-l1:latest
+    container_name: taphole-l1
+    build:
+      context: ./l1
+      dockerfile: Dockerfile
+    volumes:
+      - /home/taphole/l1/logs:/app/logs
+    ports:
+      - "38080:8080"
+      - "43000:33000"
+    environment:
+      - PREFER_HOST_MODE=hostname
+      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/taphole
+      - SPRING_DATASOURCE_USERNAME=root
+      - SPRING_DATASOURCE_PASSWORD=root
+      - SPRING_REDIS_HOST=redis
+      - SPRING_REDIS_PORT=6379
+    depends_on:
+      - mysql
+      - redis
+      - webrtc
+    networks:
+      taphole:
+        ipv4_address: 172.28.1.150
+
+  l2:
+    image: taphole-l2:latest
+    container_name: taphole-l2
+    build:
+      context: ./l2
+      dockerfile: Dockerfile
+    volumes:
+      - /home/taphole/l2/logs:/app/logs
+    ports:
+      - "48080:8080"
+      - "53000:33000"
+    environment:
+      - PREFER_HOST_MODE=hostname
+      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/taphole
+      - SPRING_DATASOURCE_USERNAME=root
+      - SPRING_DATASOURCE_PASSWORD=root
+      - SPRING_REDIS_HOST=redis
+      - SPRING_REDIS_PORT=6379
+    depends_on:
+      - mysql
+      - redis
+      - webrtc
+    networks:
+      taphole:
+        ipv4_address: 172.28.1.200

+ 1 - 0
docker/docker-compose.yml

@@ -104,6 +104,7 @@ services:
       #- ./target/loadFFmpeg.properties:/app/loadFFmpeg.properties
       - /home/document/taphole/hcsdk/linux:/home/document/taphole/hcsdk/linux
       - /home/document/uploads/taphole/:/home/document/uploads/taphole/  #映射资源目录
+      - /home/taphole/logs:/app/logs
       # - /usr/local/ffmpeg/bin:/usr/local/ffmpeg/bin
     ports:
       - "28080:8080"

+ 0 - 1
pom.xml

@@ -11,7 +11,6 @@
     <modelVersion>4.0.0</modelVersion>
     <modules>
         <module>taphole-admin</module>
-        <module>taphole-front</module>
         <module>taphole-common</module>
         <module>taphole-generator</module>
         <module>taphole-device</module>

+ 53 - 1
taphole-admin/pom.xml

@@ -13,7 +13,7 @@
     <!-- 模块信息 -->
     <modelVersion>4.0.0</modelVersion>
     <artifactId>taphole-admin</artifactId>
-    <packaging>jar</packaging>
+    <packaging>${project.packaging}</packaging>
 
     <!-- 项目管理 -->
     <dependencies>
@@ -130,6 +130,58 @@
                 </configuration>
             </plugin>
         </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+                <excludes>
+                    <exclude>application*.yml</exclude>
+                </excludes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <!-- 是否替换@xx@表示的maven properties属性值 -->
+                <filtering>true</filtering>
+                <includes>
+                    <include>application.yml</include>
+                    <include>application-${profiles.active}.yml</include>
+                </includes>
+            </resource>
+        </resources>
     </build>
 
+    <!-- 不同环境查找不同配置文件 -->
+    <profiles>
+        <profile>
+            <id>dev</id>
+            <properties>
+                <profiles.active>dev</profiles.active>
+                <maven.test.skip>true</maven.test.skip>
+                <project.packaging>jar</project.packaging>
+            </properties>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
+        <profile>
+            <id>test</id>
+            <properties>
+                <profiles.active>test</profiles.active>
+                <maven.test.skip>true</maven.test.skip>
+                <project.packaging>jar</project.packaging>
+            </properties>
+        </profile>
+        <profile>
+            <id>prodjar</id>
+            <properties>
+                <profiles.active>prod</profiles.active>
+                <maven.test.skip>true</maven.test.skip>
+                <scope.jar>provided</scope.jar>
+                <project.packaging>jar</project.packaging>
+            </properties>
+        </profile>
+
+    </profiles>
+
+
 </project>

+ 3 - 0
taphole-admin/src/main/java/com/sckj/admin/config/MybatisPlusConfig.java

@@ -1,6 +1,7 @@
 package com.sckj.admin.config;
 
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -18,6 +19,8 @@ public class MybatisPlusConfig {
     public MybatisPlusInterceptor mybatisPlusInterceptor() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
         interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        // 🔴 关键:启用 Model 的 SuperBuilder 模式
+        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
         return interceptor;
     }
 

+ 1 - 0
taphole-admin/src/main/java/com/sckj/admin/service/impl/IndexServiceImpl.java

@@ -80,6 +80,7 @@ public class IndexServiceImpl implements IIndexService {
         map.put("webBackdrop", UrlUtils.toAbsoluteUrl(website.getOrDefault("backdrop", "")));
         map.put("ossDomain", UrlUtils.domain());
         map.put("copyright", ListUtils.stringToListAsMapStr(copyright));
+        map.put("captchaStatus", YmlUtils.get("like.captcha.status"));
 
         return map;
     }

+ 1 - 1
taphole-admin/src/main/resources/application-prod.yml

@@ -4,7 +4,7 @@ like:
 
 # 服务配置
 server:
-  port: 28080
+  port: 8080
   servlet:
     context-path: /
 # 框架配置

+ 1 - 1
taphole-admin/src/main/resources/application.yml

@@ -19,7 +19,7 @@ like:
 # 框架配置
 spring:
   profiles:
-    active: dev
+    active: @profiles.active@
   mvc:
     static-path-pattern: /api/static/**
     throw-exception-if-no-handler-found: true

+ 8 - 0
taphole-device/src/main/java/com/sckj/device/vo/TCameraListedVo.java

@@ -42,5 +42,13 @@ public class TCameraListedVo implements Serializable {
     @TableField(exist = false)
     private String address;
 
+    @ApiModelProperty(value = "在线状态")
+    private String onlineStatus;
+
+    @ApiModelProperty(value = "抓拍图标地址")
+    private String catchPicUrl;
+
+    @ApiModelProperty(value = "摄像头播放地址")
+    private String webrtcUrl;
 
 }

+ 0 - 56
taphole-front/pom.xml

@@ -1,56 +0,0 @@
-<?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>taphole-java</artifactId>
-        <groupId>com.sckj</groupId>
-        <version>1.0.0</version>
-    </parent>
-
-    <!-- 模块信息 -->
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>taphole-front</artifactId>
-    <packaging>jar</packaging>
-
-    <!-- 项目管理 -->
-    <dependencies>
-        <!-- 全局工具 -->
-        <dependency>
-            <groupId>com.sckj</groupId>
-            <artifactId>taphole-common</artifactId>
-        </dependency>
-
-        <!-- SaToken -->
-        <dependency>
-            <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-spring-boot-starter</artifactId>
-        </dependency>
-
-        <!-- SaToken-Redis -->
-        <dependency>
-            <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-dao-redis-jackson</artifactId>
-        </dependency>
-    </dependencies>
-
-    <!-- 插件管理 -->
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

+ 0 - 25
taphole-front/src/main/java/com/sckj/front/TapholeFrontApplication.java

@@ -1,25 +0,0 @@
-package com.sckj.front;
-
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-/**
- * 启动器
- */
-@Configuration
-@ComponentScan(basePackages = {"com.sckj"})
-@MapperScan(basePackages = {"com.mdd.*.mapper"})
-@EnableTransactionManagement
-@SpringBootApplication(exclude = {RedisRepositoriesAutoConfiguration.class})
-public class TapholeFrontApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(TapholeFrontApplication.class, args);
-    }
-
-}

+ 0 - 187
taphole-front/src/main/java/com/sckj/front/TapholeFrontInterceptor.java

@@ -1,187 +0,0 @@
-package com.sckj.front;
-
-import cn.dev33.satoken.stp.StpUtil;
-import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.entity.user.User;
-import com.sckj.common.enums.ErrorEnum;
-import com.sckj.common.exception.LoginException;
-import com.sckj.common.mapper.user.UserMapper;
-import com.sckj.common.util.StringUtils;
-import org.jetbrains.annotations.NotNull;
-import org.springframework.lang.NonNull;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Method;
-
-/**
- * 拦截器
- */
-@Component
-public class TapholeFrontInterceptor implements HandlerInterceptor {
-
-    @Resource
-    UserMapper userMapper;
-
-    /**
-     * 前置处理器
-     *
-     * @param request 请求
-     * @param response 响应
-     * @param handler 处理
-     * @return boolean
-     * @throws Exception 异常
-     */
-    @Override
-    public boolean preHandle(@NonNull HttpServletRequest request,
-                             @NonNull HttpServletResponse response,
-                             @NonNull Object handler) throws Exception {
-
-        // 判断请求接口
-        response.setContentType("application/json;charset=utf-8");
-        String reqUri = request.getRequestURI();
-        if (!(handler instanceof HandlerMethod) || !reqUri.startsWith("/api")) {
-            return HandlerInterceptor.super.preHandle(request, response, handler);
-        }
-
-        // 记录当前平台
-        String terminal = request.getHeader("terminal");
-        TapholeFrontThreadLocal.put("terminal", StringUtils.isEmpty(terminal) ? "1" : terminal);
-
-        // 登录权限校验
-        try {
-            Method method = this.obtainAop(handler);
-            this.checkLogin(method);
-        } catch (LoginException e) {
-            AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
-            response.getWriter().print(JSON.toJSONString(result));
-            return false;
-        }
-
-        // 验证通过继续操作
-        return HandlerInterceptor.super.preHandle(request, response, handler);
-    }
-
-    /**
-     * 后置处理器
-     *
-     * @param request 请求
-     * @param response 响应
-     * @param handler 处理
-     * @param ex 异常
-     * @throws Exception 异常
-     */
-    @Override
-    public void afterCompletion(@NonNull HttpServletRequest request,
-                                @NonNull HttpServletResponse response,
-                                @NonNull Object handler, Exception ex) throws Exception {
-        TapholeFrontThreadLocal.remove();
-        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
-    }
-
-    /**
-     * 提取注解
-     *
-     * @param handler 处理器
-     * @return Method
-     * @throws Exception 异常
-     */
-    private Method obtainAop(@NotNull Object handler) throws Exception {
-        String[] objArr = handler.toString().split("#");
-        String methodStr = objArr[1].split("\\(")[0];
-        String classStr = objArr[0];
-        Class<?> clazz = Class.forName(classStr);
-
-        Method[] methods = clazz.getDeclaredMethods();
-        for (Method method : methods) {
-            if (method.getName().equals(methodStr)) {
-                return method;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * 登录验证
-     *
-     * @param method 方法类
-     * @author fzr
-     */
-    private void checkLogin(Method method) {
-        for (int i=0; i<=0; i++) {
-            // 免登校验
-            if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
-                try {
-                    Object id = StpUtil.getLoginId();
-                    if (StringUtils.isNotNull(id)) {
-                        Integer userId = Integer.parseInt(id.toString());
-                        User user = userMapper.selectOne(new QueryWrapper<User>()
-                                .select("id,sn,username")
-                                .eq("id", userId)
-                                .eq("is_disable", 0)
-                                .eq("is_delete", 0)
-                                .last("limit 1"));
-
-                        Integer uid = StringUtils.isNull(user) ? 0 : userId;
-                        TapholeFrontThreadLocal.put("userId", uid);
-                    }
-                } catch (Exception ignored) {}
-                break;
-            }
-
-            // 令牌校验
-            String token = StpUtil.getTokenValue();
-            if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
-                Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
-                String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
-                throw new LoginException(errCode, errMsg);
-            }
-
-            // 登录校验
-            Object id = StpUtil.getLoginId();
-            if (StringUtils.isNull(id)) {
-                Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
-                String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
-                throw new LoginException(errCode, errMsg);
-            }
-
-            // 用户信息缓存
-            Integer userId = Integer.parseInt(id.toString());
-            User user = userMapper.selectOne(new QueryWrapper<User>()
-                    .select("id,sn,username,nickname,mobile,is_disable")
-                    .eq("id", userId)
-                    .eq("is_delete", 0)
-                    .last("limit 1"));
-
-            // 删除校验
-            if (StringUtils.isNull(user)) {
-                Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
-                String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
-                throw new LoginException(errCode, errMsg);
-            }
-
-            // 禁用校验
-            if (user.getIsDisable().equals(1)) {
-                Integer errCode = ErrorEnum.LOGIN_DISABLE_ERROR.getCode();
-                String errMsg = ErrorEnum.LOGIN_DISABLE_ERROR.getMsg();
-                throw new LoginException(errCode, errMsg);
-            }
-
-            // 写入线程
-            TapholeFrontThreadLocal.put("userId", user.getId());
-            TapholeFrontThreadLocal.put("userSn", user.getSn());
-            TapholeFrontThreadLocal.put("username", user.getUsername());
-            TapholeFrontThreadLocal.put("nickname", user.getNickname());
-            TapholeFrontThreadLocal.put("mobile", user.getMobile());
-        }
-    }
-
-}

+ 0 - 72
taphole-front/src/main/java/com/sckj/front/TapholeFrontThreadLocal.java

@@ -1,72 +0,0 @@
-package com.sckj.front;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentSkipListMap;
-
-public class TapholeFrontThreadLocal {
-
-    /**
-     * 构造方法
-     */
-    public TapholeFrontThreadLocal() {}
-
-    /**
-     * 取得本地线程对象
-     */
-    private static final java.lang.ThreadLocal<Map<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
-
-    /**
-     * 写入本地线程
-     */
-    public static void put(String key, Object val) {
-        Map<String, Object> map = MY_LOCAL.get();
-        if (map == null) {
-            synchronized (MY_LOCAL) {
-                map = new ConcurrentSkipListMap<>();
-            }
-        }
-        map.put(key, val);
-        MY_LOCAL.set(map);
-    }
-
-    /**
-     * 获取本地线程
-     */
-    public static Object get(String key) {
-        Map<String, Object> map = MY_LOCAL.get();
-        if (map == null) {
-            return null;
-        }
-        return map.getOrDefault(key, "");
-    }
-
-    /**
-     * 获取用户ID
-     */
-    public static Integer getUserId() {
-        Object adminId = TapholeFrontThreadLocal.get("userId");
-        if (adminId == null || adminId.toString().equals("")) {
-            return 0;
-        }
-        return Integer.parseInt(adminId.toString());
-    }
-
-    /**
-     * 获取平台标识
-     */
-    public static Integer getTerminal() {
-        Object adminId = TapholeFrontThreadLocal.get("terminal");
-        if (adminId == null || adminId.toString().equals("")) {
-            return 0;
-        }
-        return Integer.parseInt(adminId.toString());
-    }
-
-    /**
-     * 删除本地线程
-     */
-    public static void remove() {
-        MY_LOCAL.remove();
-    }
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/cache/ScanLoginCache.java

@@ -1,27 +0,0 @@
-package com.sckj.front.cache;
-
-import com.sckj.common.util.RedisUtils;
-import com.sckj.common.util.StringUtils;
-
-/**
- * 微信扫码登录缓存
- */
-public class ScanLoginCache {
-
-    private static final String KEY = "wechat:scan:login:";
-
-    public static String get(String sessionId) {
-        Object o = RedisUtils.get(KEY+sessionId);
-        if (StringUtils.isNull(o)) {
-            return "";
-        }
-
-        RedisUtils.del(KEY+sessionId);
-        return o.toString();
-    }
-
-    public static void set(String sessionId, String state) {
-        RedisUtils.set(KEY+sessionId, state, 600);
-    }
-
-}

+ 0 - 21
taphole-front/src/main/java/com/sckj/front/config/MybatisPlusConfig.java

@@ -1,21 +0,0 @@
-package com.sckj.front.config;
-
-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 {
-
-    /**
-     * 分页插件集成
-     */
-    @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor() {
-        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
-        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
-        return interceptor;
-    }
-
-}

+ 0 - 49
taphole-front/src/main/java/com/sckj/front/config/SwaggerConfig.java

@@ -1,49 +0,0 @@
-package com.sckj.front.config;
-
-import com.sckj.common.config.GlobalConfig;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.oas.annotations.EnableOpenApi;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.Contact;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-
-@Configuration
-@EnableOpenApi
-public class SwaggerConfig {
-
-    @Value("${like.swagger.enabled}")
-    private boolean enabled;
-
-    @Value("${like.swagger.pathMapping}")
-    private String pathMapping;
-
-    @Bean
-    public Docket createRestApi(){
-        return new Docket(DocumentationType.OAS_30)
-                .apiInfo(apiInfo())
-                .enable(enabled)
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.sckj"))
-                .build()
-                .pathMapping(pathMapping);
-    }
-
-    private ApiInfo apiInfo(){
-        String author = "FZR";
-        String url = "https://gitee.com/likeadmin/likeadmin_java";
-        String email = "tinyants@163.com";
-
-        return new ApiInfoBuilder()
-                .title("LikeAdmin【前台】接口文档")
-                .description("likeadmin是一套使用流行的技术栈的快速开发管理后台")
-                .version(GlobalConfig.version)
-                .contact(new Contact(author, url, email))
-                .build();
-    }
-
-}

+ 0 - 51
taphole-front/src/main/java/com/sckj/front/config/WebMvcConfig.java

@@ -1,51 +0,0 @@
-package com.sckj.front.config;
-
-import com.sckj.common.config.GlobalConfig;
-import com.sckj.common.util.YmlUtils;
-import com.sckj.front.TapholeFrontInterceptor;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.lang.NonNull;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import javax.annotation.Resource;
-
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-
-    @Resource
-    TapholeFrontInterceptor likeFrontInterceptor;
-
-    /**
-     * 配置允许跨域
-     */
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-                .allowedOrigins("*")
-                .allowedHeaders("*")
-                .allowedMethods("GET", "POST", "DELETE", "PUT")
-                .maxAge(3600);
-    }
-
-    /**
-     * 登录拦截器
-     */
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(likeFrontInterceptor).addPathPatterns("/**");
-    }
-
-    /**
-     * 资源目录映射
-     */
-    @Override
-    public void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
-        String directory = YmlUtils.get("like.upload-directory");
-        registry.addResourceHandler("/"+ GlobalConfig.publicPrefix +"/**")
-                .addResourceLocations("file:" + directory);
-    }
-
-}

+ 0 - 42
taphole-front/src/main/java/com/sckj/front/config/stp/StpInException.java

@@ -1,42 +0,0 @@
-package com.sckj.front.config.stp;
-
-import cn.dev33.satoken.exception.NotLoginException;
-import cn.dev33.satoken.exception.NotPermissionException;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.enums.ErrorEnum;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ControllerAdvice;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-/**
- * Sa-Token的异常拦截
- */
-@Slf4j
-@ControllerAdvice
-public class StpInException {
-
-    /**
-     * 拦截登录异常
-     */
-    @ResponseStatus(HttpStatus.OK)
-    @ExceptionHandler(NotLoginException.class)
-    @ResponseBody
-    public AjaxResult<Object> handleNotLoginException(NotLoginException e){
-        String msg = e.getMessage().startsWith("Token无效") ? "尚未登录,请先登录!" : e.getMessage();
-        return AjaxResult.failed(ErrorEnum.TOKEN_INVALID.getCode(), msg);
-    }
-
-    /**
-     * 拦截权限异常
-     */
-    @ResponseStatus(HttpStatus.OK)
-    @ExceptionHandler(NotPermissionException.class)
-    @ResponseBody
-    public AjaxResult<Object> handleNotPermissionException(){
-        return AjaxResult.failed(ErrorEnum.NO_PERMISSION.getCode(), ErrorEnum.NO_PERMISSION.getMsg());
-    }
-
-}

+ 0 - 90
taphole-front/src/main/java/com/sckj/front/controller/ArticleController.java

@@ -1,90 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.core.PageResult;
-import com.sckj.common.validator.annotation.IDMust;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IArticleService;
-import com.sckj.front.validate.article.ArticleCollectValidate;
-import com.sckj.front.validate.article.ArticleSearchValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.article.ArticleCateVo;
-import com.sckj.front.vo.article.ArticleCollectVo;
-import com.sckj.front.vo.article.ArticleDetailVo;
-import com.sckj.front.vo.article.ArticleListedVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-@RestController
-@RequestMapping("/api/article")
-@Api(tags = "文章管理")
-public class ArticleController {
-
-    @Resource
-    IArticleService iArticleService;
-
-    @NotLogin
-    @GetMapping("/category")
-    @ApiOperation(value="文章分类")
-    public AjaxResult<List<ArticleCateVo>> category() {
-        List<ArticleCateVo> list = iArticleService.category();
-        return AjaxResult.success(list);
-    }
-
-    @NotLogin
-    @GetMapping("/list")
-    @ApiOperation(value="文章列表")
-    public AjaxResult<PageResult<ArticleListedVo>> list(@Validated PageValidate pageValidate,
-                                                        @Validated ArticleSearchValidate searchValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        PageResult<ArticleListedVo> list = iArticleService.list(userId, pageValidate, searchValidate);
-        return AjaxResult.success(list);
-    }
-
-    @NotLogin
-    @GetMapping("/detail")
-    @ApiOperation(value="文章详情")
-    public AjaxResult<ArticleDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        ArticleDetailVo vo = iArticleService.detail(id, userId);
-        return AjaxResult.success(vo);
-    }
-
-    @GetMapping("/collectList")
-    @ApiOperation(value="收藏列表")
-    public AjaxResult<PageResult<ArticleCollectVo>> collect(@Validated PageValidate pageValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        PageResult<ArticleCollectVo> list = iArticleService.collect(pageValidate, userId);
-        return AjaxResult.success(list);
-    }
-
-    @PostMapping("/collectAdd")
-    @ApiOperation(value="收藏加入")
-    public AjaxResult<Object> addCollect(@Validated @RequestBody ArticleCollectValidate collectValidate) {
-        Integer articleId = collectValidate.getArticleId();
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iArticleService.addCollect(articleId, userId);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/collectCancel")
-    @ApiOperation(value="收藏取消")
-    public AjaxResult<Object> cancelCollect(@Validated @RequestBody ArticleCollectValidate collectValidate) {
-        Integer articleId = collectValidate.getArticleId();
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iArticleService.cancelCollect(articleId, userId);
-        return AjaxResult.success();
-    }
-
-}

+ 0 - 107
taphole-front/src/main/java/com/sckj/front/controller/IndexController.java

@@ -1,107 +0,0 @@
-package com.sckj.front.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.entity.notice.NoticeRecord;
-import com.sckj.common.enums.NoticeEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.notice.NoticeRecordMapper;
-import com.sckj.common.plugin.notice.NoticeDriver;
-import com.sckj.common.plugin.notice.vo.NoticeSmsVo;
-import com.sckj.common.util.StringUtils;
-import com.sckj.common.util.ToolUtils;
-import com.sckj.common.validator.annotation.IDMust;
-import com.sckj.front.service.IIndexService;
-import com.sckj.front.validate.common.SmsValidate;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("api/index")
-@Api(tags = "主页管理")
-public class IndexController {
-
-    @Resource
-    NoticeRecordMapper noticeRecordMapper;
-
-    @Resource
-    IIndexService iIndexService;
-
-    @NotLogin
-    @GetMapping("/index")
-    @ApiOperation(value="首页数据")
-    public AjaxResult<Map<String, Object>> index() {
-        Map<String, Object> detail = iIndexService.index();
-        return AjaxResult.success(detail);
-    }
-
-    @NotLogin
-    @GetMapping("/decorate")
-    @ApiOperation(value="装修数据")
-    public AjaxResult<Map<String, Object>> decorate(@Validated @IDMust() @RequestParam("id") Integer id) {
-        Map<String, Object> detail = iIndexService.decorate(id);
-        return AjaxResult.success(detail);
-    }
-
-    @NotLogin
-    @GetMapping("/config")
-    @ApiOperation(value="公共配置")
-    public AjaxResult<Map<String, Object>> config() {
-        Map<String, Object> map = iIndexService.config();
-        return AjaxResult.success(map);
-    }
-
-    @NotLogin
-    @GetMapping("/policy")
-    @ApiOperation(value="政策协议")
-    public AjaxResult<Map<String, String>> policy(@RequestParam String type) {
-        Map<String, String> map = iIndexService.policy(type);
-        return AjaxResult.success(map);
-    }
-
-    @NotLogin
-    @GetMapping("/hotSearch")
-    @ApiOperation(value="热门搜索")
-    public AjaxResult<List<String>> hotSearch() {
-        List<String> list = iIndexService.hotSearch();
-        return AjaxResult.success(list);
-    }
-
-    @NotLogin
-    @PostMapping("/sendSms")
-    @ApiOperation(value="发送短信")
-    public AjaxResult<Object> sendSms(@Validated @RequestBody SmsValidate smsValidate) {
-        NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper<NoticeRecord>()
-                .eq("account", smsValidate.getMobile())
-                .eq("scene", smsValidate.getScene())
-                .eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK))
-                .orderByDesc("id")
-                .last("limit 1"));
-
-        if (StringUtils.isNotNull(noticeRecord)) {
-            if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
-                throw new OperateException("操作频繁,请稍后再试!");
-            }
-        }
-
-        NoticeSmsVo params = new NoticeSmsVo()
-                .setScene(smsValidate.getScene())
-                .setMobile(smsValidate.getMobile())
-                .setExpire(900)
-                .setParams(new String[] {
-                        "code:" + ToolUtils.randomInt(4)
-                });
-
-        NoticeDriver.handle(params);
-        return AjaxResult.success();
-    }
-
-}

+ 0 - 118
taphole-front/src/main/java/com/sckj/front/controller/LoginController.java

@@ -1,118 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.ILoginService;
-import com.sckj.front.validate.login.*;
-import com.sckj.front.vo.login.LoginTokenVo;
-import com.sckj.front.vo.login.LoginUrlsVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpSession;
-import javax.validation.constraints.NotNull;
-
-@Slf4j
-@RestController
-@RequestMapping("/api/login")
-@Api(tags = "登录管理")
-public class LoginController {
-
-    @Resource
-    ILoginService iLoginService;
-
-    @NotLogin
-    @PostMapping("/register")
-    @ApiOperation(value="注册账号")
-    public AjaxResult<Object> register(@Validated @RequestBody RegisterValidate registerValidate) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String username = registerValidate.getUsername();
-        String password = registerValidate.getPassword();
-
-        iLoginService.register(username, password, terminal);
-        return AjaxResult.success();
-    }
-
-    @NotLogin
-    @PostMapping("/accountLogin")
-    @ApiOperation(value="账号登录")
-    public AjaxResult<LoginTokenVo> accountLogin(@Validated @RequestBody LoginPwdValidate loginPwdValidate) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String username = loginPwdValidate.getUsername();
-        String password = loginPwdValidate.getPassword();
-
-        LoginTokenVo vo = iLoginService.accountLogin(username, password, terminal);
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @PostMapping("/mobileLogin")
-    @ApiOperation(value="手机登录")
-    public AjaxResult<LoginTokenVo> mobileLogin(@Validated @RequestBody LoginPhoneValidate loginPhoneValidate) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String mobile = loginPhoneValidate.getMobile();
-        String code = loginPhoneValidate.getCode();
-
-        LoginTokenVo vo = iLoginService.mobileLogin(mobile, code, terminal);
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @PostMapping("/mnpLogin")
-    @ApiOperation(value="微信登录")
-    public AjaxResult<LoginTokenVo> mnpLogin(@Validated @RequestBody LoginCodeValidate loginCodeValidate) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String code = loginCodeValidate.getCode();
-
-        LoginTokenVo vo = iLoginService.mnpLogin(code, terminal);
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @PostMapping("/oaLogin")
-    @ApiOperation(value="公众号登录")
-    public AjaxResult<LoginTokenVo> oaLogin(@Validated @RequestBody LoginCodeValidate loginCodeValidate) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String code = loginCodeValidate.getCode();
-
-        LoginTokenVo vo = iLoginService.officeLogin(code, terminal);
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @GetMapping("/oaCodeUrl")
-    @ApiOperation(value="公众号链接")
-    public AjaxResult<LoginUrlsVo> oaCodeUrl(@Validated @NotNull() @RequestParam("url") String url) {
-        LoginUrlsVo vo = new LoginUrlsVo();
-        vo.setUrl(iLoginService.oaCodeUrl(url));
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @GetMapping("/scanCodeUrl")
-    @ApiOperation(value="PC扫码链接")
-    public AjaxResult<LoginUrlsVo> scanCodeUrl(@Validated @NotNull() @RequestParam("url") String url, HttpSession session) {
-        String qrcodeUrl = iLoginService.scanCodeUrl(url, session);
-        LoginUrlsVo vo = new LoginUrlsVo();
-        vo.setUrl(qrcodeUrl);
-        return AjaxResult.success(vo);
-    }
-
-    @NotLogin
-    @PostMapping("/scanLogin")
-    @ApiOperation(value="PC扫码登录")
-    public AjaxResult<Object> scanLogin(@Validated @RequestBody LoginScanValidate loginScanValidate, HttpSession session) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-        String code = loginScanValidate.getCode();
-        String state = loginScanValidate.getState();
-
-        LoginTokenVo vo = iLoginService.scanLogin(code, state, terminal, session);
-        return AjaxResult.success(vo);
-    }
-
-}

+ 0 - 38
taphole-front/src/main/java/com/sckj/front/controller/LogsController.java

@@ -1,38 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.core.PageResult;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.ILogsService;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeRecordVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("/api/logs")
-@Api(tags = "日志管理")
-public class LogsController {
-
-    @Resource
-    ILogsService iLogsService;
-
-    @GetMapping("/userMoney")
-    @ApiOperation("用户金额变动日志")
-    public AjaxResult<Object> userMoney(@Validated PageValidate pageValidate,
-                                        @RequestParam(defaultValue = "0") Integer type) {
-
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        PageResult<RechargeRecordVo> list = iLogsService.userMoney(pageValidate, userId, type);
-        return AjaxResult.success(list);
-    }
-
-}

+ 0 - 126
taphole-front/src/main/java/com/sckj/front/controller/PayController.java

@@ -1,126 +0,0 @@
-package com.sckj.front.controller;
-
-import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.entity.RechargeOrder;
-import com.sckj.common.enums.ClientEnum;
-import com.sckj.common.enums.PaymentEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.RechargeOrderMapper;
-import com.sckj.common.plugin.wechat.WxPayDriver;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IPayService;
-import com.sckj.front.validate.PaymentValidate;
-import com.sckj.front.vo.pay.PayStatusVo;
-import com.sckj.front.vo.pay.PayWayListVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.util.Assert;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.constraints.NotNull;
-
-@RestController
-@RequestMapping("/api/pay")
-@Api(tags = "支付管理")
-public class PayController {
-
-    @Resource
-    RechargeOrderMapper rechargeOrderMapper;
-
-    @Resource
-    IPayService iPayService;
-
-    @GetMapping("/payWay")
-    @ApiOperation("支付方式")
-    public AjaxResult<PayWayListVo> payWay(@Validated @NotNull(message = "from参数丢失") @RequestParam String from,
-                                           @Validated @NotNull(message = "orderId参数丢失") @RequestParam Integer orderId) {
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-
-        PayWayListVo list = iPayService.payWay(from, orderId, terminal);
-        return AjaxResult.success(list);
-    }
-
-    @GetMapping("/payStatus")
-    @ApiOperation(("支付状态"))
-    public AjaxResult<PayStatusVo> payStatus(@Validated @NotNull(message = "from参数丢失") @RequestParam String from,
-                                             @Validated @NotNull(message = "orderId参数丢失") @RequestParam Integer orderId) {
-        PayStatusVo vo = iPayService.payStatus(from, orderId);
-        return AjaxResult.success(vo);
-    }
-
-    @PostMapping("/prepay")
-    @ApiOperation("发起支付")
-    public AjaxResult<Object> prepay(@Validated @RequestBody PaymentValidate requestObj) {
-        // 接收参数
-        String scene     = requestObj.getScene();
-        Integer payWay   = requestObj.getPayWay();
-        Integer orderId  = requestObj.getOrderId();
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-
-        // 订单处理
-        int payStatus = 0;
-        switch (scene) {
-            case "recharge":
-                RechargeOrder rechargeOrder = rechargeOrderMapper.selectById(orderId);
-
-                Assert.notNull(rechargeOrder, "订单不存在");
-                Assert.isTrue(!payWay.equals(PaymentEnum.WALLET_PAY.getCode()), "支付类型不被支持");
-
-                requestObj.setUserId(rechargeOrder.getUserId());
-                requestObj.setOutTradeNo(rechargeOrder.getOrderSn());
-                requestObj.setOrderAmount(rechargeOrder.getOrderAmount());
-                requestObj.setDescription("余额充值");
-                requestObj.setAttach("recharge");
-                payStatus = rechargeOrder.getPayStatus();
-
-                rechargeOrder.setPayWay(payWay);
-                rechargeOrderMapper.updateById(rechargeOrder);
-                break;
-            case "order":
-                break;
-        }
-
-        // 订单校验
-        if (payStatus != 0) {
-            throw new OperateException("订单已支付");
-        }
-
-        // 发起支付
-        Object result = iPayService.prepay(requestObj, terminal);
-        return AjaxResult.success(result);
-    }
-
-    @NotLogin
-    @PostMapping("/notifyMnp")
-    @ApiOperation("微信支付回调")
-    public AjaxResult<Object> notifyMnp(@RequestBody String jsonData, HttpServletRequest request) throws WxPayException {
-        // 构建签名
-        SignatureHeader signatureHeader = new SignatureHeader();
-        signatureHeader.setSignature(request.getHeader("wechatpay-signature"));
-        signatureHeader.setNonce(request.getHeader("wechatpay-nonce"));
-        signatureHeader.setSerial(request.getHeader("wechatpay-serial"));
-        signatureHeader.setTimeStamp(request.getHeader("wechatpay-timestamp"));
-
-        // 解密数据
-        WxPayService wxPayService = WxPayDriver.handler(ClientEnum.MNP.getCode());
-        WxPayOrderNotifyV3Result.DecryptNotifyResult notifyResult = wxPayService.parseOrderNotifyV3Result(jsonData, signatureHeader).getResult();
-
-        // 取出数据
-        String transactionId = notifyResult.getTransactionId();
-        String outTradeNo = notifyResult.getOutTradeNo();
-        String attach =  notifyResult.getAttach();
-
-        // 处理回调
-        iPayService.handlePaidNotify(attach, outTradeNo, transactionId);
-        return AjaxResult.success();
-    }
-
-}

+ 0 - 64
taphole-front/src/main/java/com/sckj/front/controller/PcController.java

@@ -1,64 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.validator.annotation.IDMust;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IPcService;
-import com.sckj.front.vo.article.PcArticleCenterVo;
-import com.sckj.front.vo.article.PcArticleDetailVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api/pc")
-@Api(tags = "电脑管理")
-public class PcController {
-
-    @Resource
-    IPcService iPcService;
-
-    @NotLogin
-    @GetMapping("/index")
-    @ApiOperation(value="主页数据")
-    public AjaxResult<Map<String,Object>> index() {
-        Map<String, Object> index = iPcService.index();
-        return AjaxResult.success(index);
-    }
-
-    @NotLogin
-    @GetMapping("/getConfig")
-    @ApiOperation(value="公共配置")
-    public AjaxResult<Map<String, Object>> getConfig() {
-        Map<String, Object> config = iPcService.getConfig();
-        return AjaxResult.success(config);
-    }
-
-    @NotLogin
-    @GetMapping("/articleCenter")
-    @ApiOperation(value="资讯中心")
-    public AjaxResult<List<PcArticleCenterVo>> articleCenter() {
-        List<PcArticleCenterVo> list = iPcService.articleCenter();
-        return AjaxResult.success(list);
-    }
-
-    @NotLogin
-    @GetMapping("/articleDetail")
-    @ApiOperation(value="文章详情")
-    public AjaxResult<PcArticleDetailVo> articleDetail(@Validated @IDMust() @RequestParam("id") Integer id) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        PcArticleDetailVo vo = iPcService.articleDetail(id, userId);
-        return AjaxResult.success(vo);
-    }
-
-}

+ 0 - 55
taphole-front/src/main/java/com/sckj/front/controller/RechargeController.java

@@ -1,55 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.core.PageResult;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IRechargeService;
-import com.sckj.front.validate.RechargeValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeConfigVo;
-import com.sckj.front.vo.RechargeRecordVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/api/recharge")
-@Api(tags = "充值管理")
-public class RechargeController {
-
-    @Resource
-    IRechargeService iRechargeService;
-
-    @GetMapping("/config")
-    @ApiOperation(value = "充值配置")
-    public AjaxResult<Object> config() {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        RechargeConfigVo vo = iRechargeService.config(userId);
-        return AjaxResult.success(vo);
-    }
-
-    @GetMapping("/record")
-    @ApiOperation(value = "充值记录")
-    public AjaxResult<Object> record(@Validated PageValidate pageValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        PageResult<RechargeRecordVo> list = iRechargeService.record(userId, pageValidate);
-        return AjaxResult.success(list);
-    }
-
-    @PostMapping("/placeOrder")
-    @ApiOperation(value = "充值下单")
-    public AjaxResult<Object> placeOrder(@Validated @RequestBody RechargeValidate rechargeValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-
-        Map<String, Object> result = iRechargeService.placeOrder(userId, terminal, rechargeValidate);
-        return AjaxResult.success(result);
-    }
-
-}

+ 0 - 50
taphole-front/src/main/java/com/sckj/front/controller/UploadController.java

@@ -1,50 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.common.enums.AlbumEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.plugin.storage.StorageDriver;
-import com.sckj.common.plugin.storage.UploadFilesVo;
-import com.sckj.common.util.StringUtils;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartRequest;
-
-import javax.servlet.http.HttpServletRequest;
-
-@RestController
-@RequestMapping("/api/upload")
-@Api(tags = "上传管理")
-public class UploadController {
-
-    @NotLogin
-    @PostMapping("/image")
-    @ApiOperation(value="上传图片")
-    public AjaxResult<UploadFilesVo> image(HttpServletRequest request) {
-        MultipartFile multipartFile;
-        try {
-            multipartFile = ((MultipartRequest) request).getFile("file");
-        } catch (Exception e) {
-            throw new OperateException("请正确选择上传图片!");
-        }
-
-        if (multipartFile == null) {
-            throw new OperateException("请选择上传图片!");
-        }
-
-        String folder = "image";
-        if (StringUtils.isNotEmpty(request.getParameter("dir"))) {
-            folder += "/" + request.getParameter("dir");
-        }
-
-        StorageDriver storageDriver = new StorageDriver();
-        UploadFilesVo vo = storageDriver.upload(multipartFile, folder, AlbumEnum.IMAGE.getCode());
-        return AjaxResult.success(vo);
-    }
-
-}

+ 0 - 116
taphole-front/src/main/java/com/sckj/front/controller/UserController.java

@@ -1,116 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IUserService;
-import com.sckj.front.validate.users.*;
-import com.sckj.front.vo.user.UserCenterVo;
-import com.sckj.front.vo.user.UserInfoVo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-
-@RestController
-@RequestMapping("api/user")
-@Api(tags = "用户管理")
-public class UserController {
-
-    @Resource
-    IUserService iUserService;
-
-    @GetMapping("/center")
-    @ApiOperation(value="个人中心")
-    public AjaxResult<UserCenterVo> center() {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-        Integer terminal = TapholeFrontThreadLocal.getTerminal();
-
-        UserCenterVo vo = iUserService.center(userId, terminal);
-        return AjaxResult.success(vo);
-    }
-
-    @GetMapping("/info")
-    @ApiOperation(value="个人信息")
-    public AjaxResult<UserInfoVo> info() {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        UserInfoVo vo = iUserService.info(userId);
-        return AjaxResult.success(vo);
-    }
-
-    @PostMapping("/edit")
-    @ApiOperation(value="编辑信息")
-    public AjaxResult<Object> edit(@Validated @RequestBody UserUpdateValidate updateValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iUserService.edit(updateValidate, userId);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/changePwd")
-    @ApiOperation(value="修改密码")
-    public AjaxResult<Object> changePwd(@Validated @RequestBody UserChangePwdValidate passwordValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iUserService.changePwd(passwordValidate.getPassword(), passwordValidate.getOldPassword(), userId);
-        return AjaxResult.success();
-    }
-
-    @NotLogin
-    @PostMapping("/forgotPwd")
-    @ApiOperation(value="忘记密码")
-    public AjaxResult<Object> forgotPwd(@Validated @RequestBody UserForgetPwdValidate userForgetPwdValidate) {
-        String password = userForgetPwdValidate.getPassword();
-        String mobile = userForgetPwdValidate.getMobile();
-        String code = userForgetPwdValidate.getCode();
-
-        iUserService.forgotPwd(password, mobile, code);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/bindMobile")
-    @ApiOperation(value="绑定手机")
-    public AjaxResult<Object> bindMobile(@Validated @RequestBody UserPhoneBindValidate mobileValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iUserService.bindMobile(mobileValidate, userId);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/mnpMobile")
-    @ApiOperation(value="微信手机号")
-    public AjaxResult<Object> mnpMobile(@Validated @RequestBody UserPhoneMnpValidate mobileValidate) {
-        iUserService.mnpMobile(mobileValidate.getCode().trim());
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/updateUser")
-    @ApiOperation(value="更新新用户信息")
-    public AjaxResult<Object> updateData(@Validated @RequestBody NewUserUpdateValidate newUserUpdateValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-        iUserService.updateNewUserInfo(newUserUpdateValidate, userId);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/bindMnp")
-    @ApiOperation(value="绑定小程序")
-    public AjaxResult<Object> bindMnp(@Validated @RequestBody UserBindWechatValidate BindMnpValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iUserService.bindMnp(BindMnpValidate, userId);
-        return AjaxResult.success();
-    }
-
-    @PostMapping("/bindOa")
-    @ApiOperation(value="绑定微信公众号")
-    public AjaxResult<Object> bindOa(@Validated @RequestBody UserBindWechatValidate BindOaValidate) {
-        Integer userId = TapholeFrontThreadLocal.getUserId();
-
-        iUserService.bindOa(BindOaValidate, userId);
-        return AjaxResult.success();
-    }
-
-}

+ 0 - 34
taphole-front/src/main/java/com/sckj/front/controller/WechatController.java

@@ -1,34 +0,0 @@
-package com.sckj.front.controller;
-
-import com.sckj.common.aop.NotLogin;
-import com.sckj.common.core.AjaxResult;
-import com.sckj.front.service.IWechatService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.validation.constraints.NotEmpty;
-import java.util.Map;
-
-@RestController
-@RequestMapping("api/wechat")
-@Api(tags = "微信管理")
-public class WechatController {
-
-    @Resource
-    IWechatService iWechatService;
-
-    @NotLogin
-    @GetMapping("/jsConfig")
-    @ApiOperation("微信jsConfig")
-    public AjaxResult<Object> jsConfig(@Validated @NotEmpty() @RequestParam("url") String url) throws Exception {
-        Map<String, Object> map = iWechatService.jsConfig(url);
-        return AjaxResult.success(map);
-    }
-
-}

+ 0 - 75
taphole-front/src/main/java/com/sckj/front/service/IArticleService.java

@@ -1,75 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.common.core.PageResult;
-import com.sckj.front.validate.article.ArticleSearchValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.article.ArticleCateVo;
-import com.sckj.front.vo.article.ArticleCollectVo;
-import com.sckj.front.vo.article.ArticleDetailVo;
-import com.sckj.front.vo.article.ArticleListedVo;
-
-import java.util.List;
-
-/**
- * 文章服务接口类
- */
-public interface IArticleService {
-
-    /**
-     * 文章分类
-     *
-     * @author fzr
-     * @return List<ArticleCateVo>
-     */
-    List<ArticleCateVo> category();
-
-    /**
-     * 文章分类
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param pageValidate 分页参数
-     * @param searchValidate 搜索参数
-     * @return PageResult<ArticleListVo>
-     */
-    PageResult<ArticleListedVo> list(Integer userId, PageValidate pageValidate, ArticleSearchValidate searchValidate);
-
-    /**
-     * 文章详情
-     *
-     * @author fzr
-     * @param id 文章主键
-     * @param userId 用户ID
-     * @return ArticleDetailVo
-     */
-    ArticleDetailVo detail(Integer id, Integer userId);
-
-    /**
-     * 文章收藏
-     *
-     * @author fzr
-     * @param pageValidate 分页参数
-     * @param userId 用户ID
-     * @return PageResult<ArticleListVo>
-     */
-    PageResult<ArticleCollectVo> collect(PageValidate pageValidate, Integer userId);
-
-    /**
-     * 加入收藏
-     *
-     * @author fzr
-     * @param articleId 文章ID
-     * @param userId 用户ID
-     */
-    void addCollect(Integer articleId, Integer userId);
-
-    /**
-     * 取消收藏
-     *
-     * @author fzr
-     * @param articleId 主键
-     * @param userId 用户ID
-     */
-    void cancelCollect(Integer articleId, Integer userId);
-
-}

+ 0 - 53
taphole-front/src/main/java/com/sckj/front/service/IIndexService.java

@@ -1,53 +0,0 @@
-package com.sckj.front.service;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 首页服务接口类
- */
-public interface IIndexService {
-
-    /**
-     * 首页
-     *
-     * @author fzr
-     * @return Map<String, Object>
-     */
-    Map<String, Object> index();
-
-    /**
-     * 装修
-     *
-     * @author fzr
-     * @param id 装修ID
-     * @return Map<String, Object>
-     */
-    Map<String, Object> decorate(Integer id);
-
-    /**
-     * 配置
-     *
-     * @author fzr
-     * @return Map<String, Object>
-     */
-    Map<String, Object> config();
-
-    /**
-     * 政策
-     *
-     * @author fzr
-     * @param type 类型 service=服务协议,privacy=隐私协议
-     * @return Map<String, Object>
-     */
-    Map<String, String> policy(String type);
-
-    /**
-     * 热搜
-     *
-     * @author fzr
-     * @return List<String>
-     */
-    List<String> hotSearch();
-
-}

+ 0 - 93
taphole-front/src/main/java/com/sckj/front/service/ILoginService.java

@@ -1,93 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.front.vo.login.LoginTokenVo;
-
-import javax.servlet.http.HttpSession;
-
-/**
- * 登录服务接口类
- */
-public interface ILoginService {
-
-    /**
-     * 账号注册
-     *
-     * @author fzr
-     * @param username 账号
-     * @param password 密码
-     * @param terminal 终端
-     */
-    void register(String username, String password, Integer terminal);
-
-    /**
-     * 账号登录
-     *
-     * @author fzr
-     * @param username 账号
-     * @param password 密码
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    LoginTokenVo accountLogin(String username, String password, Integer terminal);
-
-    /**
-     * 手机登录
-     *
-     * @author fzr
-     * @param mobile 手机号
-     * @param code 验证码
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    LoginTokenVo mobileLogin(String mobile, String code, Integer terminal);
-
-    /**
-     * 微信登录
-     *
-     * @author fzr
-     * @param code 微信code
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    LoginTokenVo mnpLogin(String code, Integer terminal);
-
-    /**
-     * 公众号登录
-     *
-     * @author fzr
-     * @param code 微信Code
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    LoginTokenVo officeLogin(String code, Integer terminal);
-
-    /**
-     * 公众号跳转url
-     *
-     * @author fzr
-     * @param url 连接
-     * @return String
-     */
-    String oaCodeUrl(String url);
-
-    /**
-     * 扫码链接
-     *
-     * @author fzr
-     * @param session session
-     * @return String
-     */
-    String scanCodeUrl(String url, HttpSession session);
-
-    /**
-     * 扫码登录
-     *
-     * @param code 编码
-     * @param state 标识
-     * @param terminal 终端
-     * @param session 会话
-     * @return LoginTokenVo
-     */
-    LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session);
-
-}

+ 0 - 14
taphole-front/src/main/java/com/sckj/front/service/ILogsService.java

@@ -1,14 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.common.core.PageResult;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeRecordVo;
-
-/**
- * 日志接口服务类
- */
-public interface ILogsService {
-
-    PageResult<RechargeRecordVo> userMoney(PageValidate pageValidate, Integer userId, Integer type);
-
-}

+ 0 - 52
taphole-front/src/main/java/com/sckj/front/service/IPayService.java

@@ -1,52 +0,0 @@
-package com.sckj.front.service;
-
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.sckj.front.validate.PaymentValidate;
-import com.sckj.front.vo.pay.PayStatusVo;
-import com.sckj.front.vo.pay.PayWayListVo;
-
-/**
- * 支付接口服务类
- */
-public interface IPayService {
-
-    /**
-     * 支付方式
-     *
-     * @author fzr
-     * @param from 场景
-     * @param orderId 订单ID
-     * @param terminal 终端
-     * @return List<PayWayListedVo>
-     */
-    PayWayListVo payWay(String from, Integer orderId, Integer terminal);
-
-    /**
-     * 支付状态
-     *
-     * @author fzr
-     * @param from 场景
-     * @param orderId 订单ID
-     * @return PayStatusVo
-     */
-    PayStatusVo payStatus(String from, Integer orderId);
-
-    /**
-     * 发起支付
-     *
-     * @param params 参数
-     * @param terminal 终端
-     * @return Object
-     */
-    Object prepay(PaymentValidate params, Integer terminal);
-
-    /**
-     * 支付回调处理
-     *
-     * @param attach 场景码
-     * @param outTradeNo 订单编号
-     * @param transactionId 流水号
-     */
-    void handlePaidNotify(String attach, String outTradeNo, String transactionId) throws WxPayException;
-
-}

+ 0 - 43
taphole-front/src/main/java/com/sckj/front/service/IPcService.java

@@ -1,43 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.front.vo.article.PcArticleCenterVo;
-import com.sckj.front.vo.article.PcArticleDetailVo;
-
-import java.util.List;
-import java.util.Map;
-
-public interface IPcService {
-
-    /**
-     * 配置
-     * @author cjh
-     * @return Map<String, Object>
-     */
-    Map<String, Object> index();
-
-    /**
-     * 配置
-     * @author cjh
-     * @return Map<String, Object>
-     */
-    Map<String, Object> getConfig();
-
-    /**
-     * 资讯中心
-     *
-     * @author fzr
-     * @return PcArticleCenterVo
-     */
-    List<PcArticleCenterVo> articleCenter();
-
-    /**
-     * 文章详情
-     *
-     * @author fzr
-     * @param id 文章ID
-     * @param userId 用户ID
-     * @return PcArticleDetailVo
-     */
-    PcArticleDetailVo articleDetail(Integer id, Integer userId);
-
-}

+ 0 - 45
taphole-front/src/main/java/com/sckj/front/service/IRechargeService.java

@@ -1,45 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.common.core.PageResult;
-import com.sckj.front.validate.RechargeValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeConfigVo;
-import com.sckj.front.vo.RechargeRecordVo;
-
-import java.util.Map;
-
-/**
- * 充值余额接口服务类
- */
-public interface IRechargeService {
-
-    /**
-     * 充值配置
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @return RechargeConfigVo
-     */
-    RechargeConfigVo config(Integer userId);
-
-    /**
-     * 充值记录
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param pageValidate 分页参数
-     * @return PageResult<RechargeRecordVo>
-     */
-    PageResult<RechargeRecordVo> record(Integer userId, PageValidate pageValidate);
-
-    /**
-     * 充值下单
-     *
-     * @param userId 用户ID
-     * @param terminal 总端
-     * @param rechargeValidate 充值参数
-     * @return Map<String, Object>
-     */
-    Map<String, Object> placeOrder(Integer userId, Integer terminal, RechargeValidate rechargeValidate);
-
-}

+ 0 - 103
taphole-front/src/main/java/com/sckj/front/service/IUserService.java

@@ -1,103 +0,0 @@
-package com.sckj.front.service;
-
-import com.sckj.front.validate.users.NewUserUpdateValidate;
-import com.sckj.front.validate.users.UserBindWechatValidate;
-import com.sckj.front.validate.users.UserPhoneBindValidate;
-import com.sckj.front.validate.users.UserUpdateValidate;
-import com.sckj.front.vo.user.UserCenterVo;
-import com.sckj.front.vo.user.UserInfoVo;
-
-/**
- * 用户服务接口类
- */
-public interface IUserService {
-
-    /**
-     * 个人中心
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param terminal 用户终端
-     * @return UserCenterVo
-     */
-    UserCenterVo center(Integer userId, Integer terminal);
-
-    /**
-     * 个人信息
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @return UserInfoVo
-     */
-    UserInfoVo info(Integer userId);
-
-    /**
-     * 编辑信息
-     *
-     * @author fzr
-     * @param updateValidate 参数
-     * @param userId 用户ID
-     */
-    void edit(UserUpdateValidate updateValidate, Integer userId);
-
-    /**
-     * 修改密码
-     *
-     * @author fzr
-     * @param password 新密码
-     * @param oldPassword 旧密码
-     * @param userId 用户ID
-     */
-    void changePwd(String password, String oldPassword, Integer userId);
-
-    /**
-     * 忘记密码
-     *
-     * @author fzr
-     * @param password 新密码
-     * @param mobile 手机号
-     * @param code 验证码
-     */
-    void forgotPwd(String password, String mobile, String code);
-
-    /**
-     * 绑定手机
-     *
-     * @author fzr
-     * @param mobileValidate 参数
-     * @param userId 用户ID
-     */
-    void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId);
-
-    /**
-     * 微信手机
-     *
-     * @author fzr
-     * @param code 获取手机号的Code
-     */
-    void mnpMobile(String code);
-
-    /**
-     * 更新新用户信息
-     *
-     * @param newUserUpdateValidate 参数
-     * @param userId 用户id
-     */
-    void updateNewUserInfo(NewUserUpdateValidate newUserUpdateValidate, Integer userId);
-
-    /**
-     * 绑定微信小程序
-     *
-     * @param bindMnpValidate 参数
-     * @param userId 用户ID
-     */
-    void bindMnp(UserBindWechatValidate bindMnpValidate, Integer userId);
-
-    /**
-     * 绑定微信公众号
-     *
-     * @param bindOaValidate 参数
-     * @param userId 用户ID
-     */
-    void bindOa(UserBindWechatValidate bindOaValidate, Integer userId);
-}

+ 0 - 9
taphole-front/src/main/java/com/sckj/front/service/IWechatService.java

@@ -1,9 +0,0 @@
-package com.sckj.front.service;
-
-import java.util.Map;
-
-public interface IWechatService {
-
-    Map<String, Object> jsConfig(String url) throws Exception;
-
-}

+ 0 - 273
taphole-front/src/main/java/com/sckj/front/service/impl/ArticleServiceImpl.java

@@ -1,273 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.github.yulichang.query.MPJQueryWrapper;
-import com.sckj.common.config.GlobalConfig;
-import com.sckj.common.core.PageResult;
-import com.sckj.common.entity.article.Article;
-import com.sckj.common.entity.article.ArticleCategory;
-import com.sckj.common.entity.article.ArticleCollect;
-import com.sckj.common.mapper.article.ArticleCategoryMapper;
-import com.sckj.common.mapper.article.ArticleCollectMapper;
-import com.sckj.common.mapper.article.ArticleMapper;
-import com.sckj.common.util.StringUtils;
-import com.sckj.common.util.TimeUtils;
-import com.sckj.common.util.UrlUtils;
-import com.sckj.front.service.IArticleService;
-import com.sckj.front.validate.article.ArticleSearchValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.article.ArticleCateVo;
-import com.sckj.front.vo.article.ArticleCollectVo;
-import com.sckj.front.vo.article.ArticleDetailVo;
-import com.sckj.front.vo.article.ArticleListedVo;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * 文章服务实现类
- */
-@Service
-public class ArticleServiceImpl implements IArticleService {
-
-    @Resource
-    ArticleMapper articleMapper;
-
-    @Resource
-    ArticleCategoryMapper articleCategoryMapper;
-
-    @Resource
-    ArticleCollectMapper articleCollectMapper;
-
-    /**
-     * 文章分类
-     *
-     * @author fzr
-     * @return List<ArticleCateVo>
-     */
-    @Override
-    public List<ArticleCateVo> category() {
-        List<ArticleCategory> articleCateVos = articleCategoryMapper.selectList(
-                new QueryWrapper<ArticleCategory>()
-                    .select("id,name")
-                    .eq("is_show", 1)
-                    .eq("is_delete", 0)
-                    .orderByDesc(Arrays.asList("sort", "id")));
-
-        List<ArticleCateVo> list = new LinkedList<>();
-        for (ArticleCategory category: articleCateVos) {
-            ArticleCateVo vo = new ArticleCateVo();
-            BeanUtils.copyProperties(category, vo);
-            list.add(vo);
-        }
-
-        return list;
-    }
-
-    /**
-     * 文章列表
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param pageValidate 分页参数
-     * @param searchValidate 搜索参数
-     * @return PageResult<ArticleListVo>
-     */
-    @Override
-    public PageResult<ArticleListedVo> list(Integer userId, PageValidate pageValidate, ArticleSearchValidate searchValidate) {
-        Integer pageNo   = pageValidate.getPageNo();
-        Integer pageSize = pageValidate.getPageSize();
-
-        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
-        queryWrapper.select("id,title,image,intro,visit,create_time");
-        queryWrapper.eq("is_delete", 0);
-        queryWrapper.eq("is_show", 1);
-
-        articleMapper.setSearch(queryWrapper, searchValidate, new String[]{
-                "like:keyword@title:str"
-        });
-
-        if (StringUtils.isNotNull(searchValidate.getCid()) && searchValidate.getCid() > 0) {
-            queryWrapper.eq("cid", searchValidate.getCid());
-        }
-
-        if (StringUtils.isNotNull(searchValidate.getSort())) {
-            switch (searchValidate.getSort()) {
-                case "hot": // 最热
-                    queryWrapper.orderByDesc(Arrays.asList("visit", "id"));
-                    break;
-                case "new": // 最新
-                    queryWrapper.orderByDesc("id");
-                    break;
-                default:    // 默认
-                    queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
-            }
-        }
-
-        IPage<Article> iPage = articleMapper.selectPage(new Page<>(pageNo, pageSize), queryWrapper);
-
-        List<Integer> ids = new LinkedList<>();
-        List<ArticleListedVo> list = new LinkedList<>();
-        for (Article article : iPage.getRecords()) {
-            ArticleListedVo vo = new ArticleListedVo();
-            BeanUtils.copyProperties(article, vo);
-            vo.setCollect(false);
-            vo.setImage(UrlUtils.toAbsoluteUrl(article.getImage()));
-            vo.setCreateTime(TimeUtils.timestampToDate(article.getCreateTime()));
-            list.add(vo);
-
-            ids.add(article.getId());
-        }
-
-        if (userId != null && userId > 0 && ids.size() > 0) {
-            List<ArticleCollect> articleCollects = articleCollectMapper.selectList(
-                    new QueryWrapper<ArticleCollect>()
-                            .eq("user_id", userId)
-                            .eq("is_delete", 0)
-                            .in("article_id", ids));
-
-            List<Integer> collects = new LinkedList<>();
-            for (ArticleCollect c : articleCollects) {
-                collects.add(c.getArticleId());
-            }
-
-            for (ArticleListedVo vo : list) {
-                vo.setCollect(collects.contains(vo.getId()));
-            }
-        }
-
-        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
-    }
-
-    /**
-     * 文章详情
-     *
-     * @author fzr
-     * @param id 文章主键
-     * @param userId 用户ID
-     * @return ArticleDetailVo
-     */
-    @Override
-    public ArticleDetailVo detail(Integer id, Integer userId) {
-        Article article = articleMapper.selectOne(new QueryWrapper<Article>()
-                .select("id,title,image,intro,summary,visit,author,content,create_time")
-                .eq("id", id)
-                .eq("is_show", 1)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        Assert.notNull(article, "数据不存在!");
-
-        ArticleCollect articleCollect = articleCollectMapper.selectOne(new QueryWrapper<ArticleCollect>()
-                .eq("user_id", userId)
-                .eq("article_id", article.getId())
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        ArticleDetailVo vo = new ArticleDetailVo();
-        BeanUtils.copyProperties(article, vo);
-        vo.setCollect(articleCollect != null);
-        vo.setImage(UrlUtils.toAbsoluteUrl(article.getImage()));
-        vo.setCreateTime(TimeUtils.timestampToDate(article.getCreateTime()));
-
-        article.setVisit(article.getVisit() + 1);
-        articleMapper.updateById(article);
-
-        return vo;
-    }
-
-    /**
-     * 收藏列表
-     *
-     * @author fzr
-     * @param pageValidate 分页参数
-     * @param userId 用户ID
-     * @return PageResult<ArticleCollectVo>
-     */
-    @Override
-    public PageResult<ArticleCollectVo> collect(PageValidate pageValidate, Integer userId) {
-        Integer pageNo   = pageValidate.getPageNo();
-        Integer pageSize = pageValidate.getPageSize();
-
-        MPJQueryWrapper<ArticleCollect> mpjQueryWrapper = new MPJQueryWrapper<>();
-        mpjQueryWrapper.select("t.id,t.article_id,a.title,a.image,a.intro,a.visit,a.create_time")
-                .eq("t.user_id", userId)
-                .eq("t.is_delete", 0)
-                .eq("a.is_delete", 0)
-                .orderByDesc("t.id")
-                .innerJoin("?_article a ON a.id=t.article_id".replace("?_", GlobalConfig.tablePrefix));
-
-        IPage<ArticleCollectVo> iPage = articleCollectMapper.selectJoinPage(
-                new Page<>(pageNo, pageSize),
-                ArticleCollectVo.class,
-                mpjQueryWrapper);
-
-        for (ArticleCollectVo vo : iPage.getRecords()) {
-            vo.setImage(UrlUtils.toAbsoluteUrl(vo.getImage()));
-            vo.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime()));
-        }
-
-        return PageResult.iPageHandle(iPage);
-    }
-
-    /**
-     * 加入收藏
-     *
-     * @author fzr
-     * @param articleId 主键
-     * @param userId 用户ID
-     */
-    @Override
-    public void addCollect(Integer articleId, Integer userId) {
-        ArticleCollect articleCollect = articleCollectMapper.selectOne(
-                new QueryWrapper<ArticleCollect>()
-                    .eq("article_id", articleId)
-                    .eq("user_id", userId)
-                    .last("limit 1"));
-
-        if (StringUtils.isNotNull(articleCollect)) {
-            articleCollect.setIsDelete(0);
-            articleCollect.setUpdateTime(System.currentTimeMillis() / 1000);
-            articleCollectMapper.updateById(articleCollect);
-        } else {
-            ArticleCollect model = new ArticleCollect();
-            model.setArticleId(articleId);
-            model.setUserId(userId);
-            model.setIsDelete(0);
-            model.setCreateTime(System.currentTimeMillis() / 1000);
-            model.setUpdateTime(System.currentTimeMillis() / 1000);
-            articleCollectMapper.insert(model);
-        }
-    }
-
-    /**
-     * 取消收藏
-     *
-     * @author fzr
-     * @param articleId 文章ID
-     * @param userId 用户ID
-     */
-    @Override
-    public void cancelCollect(Integer articleId, Integer userId) {
-        ArticleCollect articleCollect = articleCollectMapper.selectOne(
-                new QueryWrapper<ArticleCollect>()
-                        .eq("article_id", articleId)
-                        .eq("user_id", userId)
-                        .eq("is_delete", 0)
-                        .last("limit 1"));
-
-        Assert.notNull(articleCollect, "收藏不存在!");
-
-        articleCollect.setIsDelete(1);
-        articleCollect.setUpdateTime(System.currentTimeMillis() / 1000);
-        articleCollectMapper.updateById(articleCollect);
-    }
-
-}

+ 0 - 204
taphole-front/src/main/java/com/sckj/front/service/impl/IndexServiceImpl.java

@@ -1,204 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.sckj.common.config.GlobalConfig;
-import com.sckj.common.entity.article.Article;
-import com.sckj.common.entity.decorate.DecoratePage;
-import com.sckj.common.entity.decorate.DecorateTabbar;
-import com.sckj.common.entity.setting.HotSearch;
-import com.sckj.common.mapper.article.ArticleMapper;
-import com.sckj.common.mapper.decorate.DecoratePageMapper;
-import com.sckj.common.mapper.decorate.DecorateTabbarMapper;
-import com.sckj.common.mapper.setting.HotSearchMapper;
-import com.sckj.common.util.*;
-import com.sckj.front.service.IIndexService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-/**
- * 首页服务实现类
- */
-@Service
-public class IndexServiceImpl implements IIndexService {
-
-    @Resource
-    DecoratePageMapper decoratePageMapper;
-
-    @Resource
-    DecorateTabbarMapper decorateTabbarMapper;
-
-    @Resource
-    HotSearchMapper hotSearchMapper;
-
-    @Resource
-    ArticleMapper articleMapper;
-
-    /**
-     * 首页
-     *
-     * @author fzr
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> index() {
-        Map<String, Object> response = new LinkedHashMap<>();
-        DecoratePage decoratePage = decoratePageMapper.selectOne(
-                new QueryWrapper<DecoratePage>()
-                    .eq("id", 1)
-                    .last("limit 1"));
-
-        List<Map<String, Object>> articleList = new LinkedList<>();
-        List<Article> articles = articleMapper.selectList(new QueryWrapper<Article>()
-                .eq("is_show", 1)
-                .eq("is_delete", 0)
-                .orderByDesc("id")
-                .last("limit 20"));
-
-        for (Article article : articles) {
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("id", article.getId());
-            map.put("title", article.getTitle());
-            map.put("intro", article.getIntro());
-            map.put("summary", article.getSummary());
-            map.put("image", UrlUtils.toAbsoluteUrl(article.getImage()));
-            map.put("author", article.getAuthor());
-            map.put("visit", article.getVisit());
-            map.put("createTime", TimeUtils.timestampToDate(article.getCreateTime()));
-            articleList.add(map);
-        }
-
-        response.put("domain", UrlUtils.domain());
-        response.put("pages", decoratePage.getPageData());
-        response.put("article", articleList);
-        return response;
-    }
-
-    /**
-     * 装修
-     *
-     * @author fzr
-     * @param id 主键
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> decorate(Integer id) {
-        DecoratePage decoratePage = decoratePageMapper.selectOne(
-                new QueryWrapper<DecoratePage>()
-                        .eq("id", id)
-                        .last("limit 1"));
-
-        Assert.notNull(decoratePage, "数据不存在!");
-
-        Map<String, Object> response = new LinkedHashMap<>();
-        response.put("type", decoratePage.getPageType());
-        response.put("name", decoratePage.getPageName());
-        response.put("pages", decoratePage.getPageData());
-        return response;
-    }
-
-    /**
-     * 配置
-     *
-     * @author fzr
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> config() {
-        Map<String, Object> response = new LinkedHashMap<>();
-
-        // 底部导航
-        List<Map<String, String>> tabs = new LinkedList<>();
-        List<DecorateTabbar> decorateTabbars = decorateTabbarMapper.selectList(new QueryWrapper<DecorateTabbar>().orderByAsc("id"));
-        for (DecorateTabbar tab: decorateTabbars) {
-            Map<String, String> map = new LinkedHashMap<>();
-            map.put("name", tab.getName());
-            map.put("selected", UrlUtils.toAbsoluteUrl(tab.getSelected()));
-            map.put("unselected", UrlUtils.toAbsoluteUrl(tab.getUnselected()));
-            map.put("link", tab.getLink());
-            tabs.add(map);
-        }
-
-        // 导航颜色
-        String tabbarStyle = ConfigUtils.get("tabbar", "style", "{}");
-
-        // 登录配置
-        Map<String, Object> loginMap = new LinkedHashMap<>();
-        Map<String, String> loginConfig = ConfigUtils.get("login");
-        loginMap.put("loginWay", ListUtils.stringToListAsInt(loginConfig.getOrDefault("loginWay", ""), ","));
-        loginMap.put("forceBindMobile", Integer.parseInt(loginConfig.getOrDefault("forceBindMobile", "0")));
-        loginMap.put("openAgreement", Integer.parseInt(loginConfig.getOrDefault("openAgreement", "0")));
-        loginMap.put("openOtherAuth", Integer.parseInt(loginConfig.getOrDefault("openOtherAuth", "0")));
-        loginMap.put("autoLoginAuth", ListUtils.stringToListAsInt(loginConfig.getOrDefault("autoLoginAuth", ""), ","));
-
-        // 网址信息
-        Map<String, Object> websiteMap = new LinkedHashMap<>();
-        Map<String, String> websiteConfig = ConfigUtils.get("website");
-        websiteMap.put("name", websiteConfig.getOrDefault("shopName", "LikeAdmin"));
-        websiteMap.put("logo", UrlUtils.toAbsoluteUrl(websiteConfig.getOrDefault("shopLogo", "")));
-
-        // H5配置
-        Map<String, Object> h5Map = new LinkedHashMap<>();
-        Map<String, String> h5Config = ConfigUtils.get("h5_channel");
-        h5Map.put("status", Integer.parseInt(h5Config.getOrDefault("status", "0")));
-        h5Map.put("close", Integer.parseInt(h5Config.getOrDefault("close", "0")));
-        h5Map.put("url", h5Config.getOrDefault("url", "0"));
-        h5Map.put("accessLink", RequestUtils.uri());
-
-        // 响应数据
-        response.put("version", GlobalConfig.version);
-        response.put("domain", UrlUtils.domain());
-        response.put("style", MapUtils.jsonToMap(tabbarStyle));
-        response.put("tabbar", tabs);
-        response.put("login", loginMap);
-        response.put("website", websiteMap);
-        response.put("h5", h5Map);
-        return response;
-    }
-
-    /**
-     * 政策
-     *
-     * @author fzr
-     * @param type 类型 service=服务协议,privacy=隐私协议
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, String> policy(String type) {
-        Map<String, String> map = ConfigUtils.getMap("protocol", type);
-        if (map == null) {
-            Map<String, String> m = new LinkedHashMap<>();
-            m.put("name", "");
-            m.put("content", "");
-            return m;
-        }
-        return map;
-    }
-
-    /**
-     * 热搜
-     *
-     * @author fzr
-     * @return List<String>
-     */
-    @Override
-    public List<String> hotSearch() {
-        String isHotSearch = ConfigUtils.get("search", "isHotSearch", "0");
-
-        List<String> list = new LinkedList<>();
-        if (Integer.parseInt(isHotSearch) == 1) {
-            List<HotSearch> hotSearches = hotSearchMapper.selectList(
-                    new QueryWrapper<HotSearch>()
-                        .orderByDesc(Arrays.asList("sort", "id")));
-
-            for (HotSearch hotSearch : hotSearches) {
-                list.add(hotSearch.getName());
-            }
-        }
-
-        return list;
-    }
-
-}

+ 0 - 445
taphole-front/src/main/java/com/sckj/front/service/impl/LoginServiceImpl.java

@@ -1,445 +0,0 @@
-package com.sckj.front.service.impl;
-
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
-import cn.dev33.satoken.stp.StpUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
-import com.sckj.common.entity.user.User;
-import com.sckj.common.entity.user.UserAuth;
-import com.sckj.common.enums.NoticeEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.user.UserAuthMapper;
-import com.sckj.common.mapper.user.UserMapper;
-import com.sckj.common.plugin.notice.NoticeCheck;
-import com.sckj.common.plugin.wechat.WxMnpDriver;
-import com.sckj.common.util.*;
-import com.sckj.front.cache.ScanLoginCache;
-import com.sckj.front.service.ILoginService;
-import com.sckj.front.vo.login.LoginTokenVo;
-import lombok.extern.slf4j.Slf4j;
-import me.chanjar.weixin.common.api.WxConsts;
-import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.api.impl.WxMpOAuth2ServiceImpl;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Map;
-
-/**
- * 登录服务实现类
- */
-@Slf4j
-@Service
-public class LoginServiceImpl implements ILoginService {
-
-    @Resource
-    UserMapper userMapper;
-
-    @Resource
-    UserAuthMapper userAuthMapper;
-
-    /**
-     * 注册账号
-     *
-     * @author fzr
-     * @param username 账号
-     * @param password 密码
-     * @param terminal 总端
-     */
-    @Override
-    public void register(String username, String password, Integer terminal) {
-        User model = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,sn,username")
-                .eq("username", username)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        Assert.isNull(model, "账号已存在,换一个吧!");
-
-        Integer sn  = this.__generateSn();
-        String salt = ToolUtils.randomString(5);
-        String pwd  = ToolUtils.makeMd5(password+salt);
-
-        User user = new User();
-        user.setSn(sn);
-        user.setNickname("用户"+sn);
-        user.setUsername(username);
-        user.setPassword(pwd);
-        user.setSalt(salt);
-        user.setAvatar("/api/static/default_avatar.png");
-        user.setChannel(terminal);
-        user.setIsNew(1);
-        user.setCreateTime(System.currentTimeMillis() / 1000);
-        user.setUpdateTime(System.currentTimeMillis() / 1000);
-        userMapper.insert(user);
-    }
-
-    /**
-     * 账号登录
-     *
-     * @author fzr
-     * @param username 账号
-     * @param password 密码
-     * @return LoginTokenVo
-     */
-    @Override
-    public LoginTokenVo accountLogin(String username, String password, Integer terminal) {
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,username,password,salt,mobile,is_disable,is_new")
-                .eq("username", username)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        Assert.notNull(user, "账号不存在!");
-        String pwd = ToolUtils.makeMd5(password+user.getSalt());
-        Assert.isFalse(!pwd.equals(user.getPassword()), "账号或密码错误!");
-        Assert.isFalse(!user.getIsDisable().equals(0), "账号已被禁用!");
-
-        return this.__loginToken(user.getId(), user.getMobile(), user.getIsNew(), terminal);
-    }
-
-    /**
-     * 手机号登录
-     *
-     * @author fzr
-     * @param mobile 手机号
-     * @param code 验证码
-     * @return LoginTokenVo
-     */
-    @Override
-    public LoginTokenVo mobileLogin(String mobile, String code, Integer terminal) {
-        // 校验验证码
-        int sceneCode = NoticeEnum.LOGIN_CODE.getCode();
-        if (!NoticeCheck.verify(sceneCode, code)) {
-            throw new OperateException("验证码错误!");
-        }
-
-        // 查询手机号
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,username,mobile,is_disable,is_new")
-                .eq("mobile", mobile)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        Assert.notNull(user, "账号不存在!");
-        Assert.isFalse(user.getIsDisable() != 0, "账号已禁用!");
-
-        return this.__loginToken(user.getId(), user.getMobile(), user.getIsNew(), terminal);
-    }
-
-    /**
-     * 微信小程序登录
-     *
-     * @author fzr
-     * @param code 编码
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    @Override
-    @Transactional
-    public LoginTokenVo mnpLogin(String code, Integer terminal) {
-        try {
-            WxMaService wxMaService = WxMnpDriver.mnp();
-            WxMaJscode2SessionResult sessionResult = wxMaService.getUserService().getSessionInfo(code);
-            String openId = sessionResult.getOpenid();
-            String uniId = sessionResult.getUnionid();
-            String unionId = uniId == null ? "0" : uniId;
-
-            return this.__wxLoginHandle(openId, unionId, "", "", terminal);
-        } catch (WxErrorException e) {
-            throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
-        }
-    }
-
-    /**
-     * 公众号登录
-     *
-     * @author fzr
-     * @param code 编码
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    @Override
-    public LoginTokenVo officeLogin(String code, Integer terminal) {
-        try {
-            WxMpService wxMpService = WxMnpDriver.oa();
-            WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
-            String uniId = wxOAuth2AccessToken.getUnionId();
-            String openId  = wxOAuth2AccessToken.getOpenId();
-            String unionId = uniId == null ? "0" : uniId;
-
-            String avatar = "";
-            String nickname = "";
-            try {
-                String accessToken = wxOAuth2AccessToken.getAccessToken();
-                String userInfoUri = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
-                String userInfoUrl = String.format(userInfoUri, accessToken, openId);
-                String resultInfo = HttpUtils.sendGet(userInfoUrl);
-                Map<String, String> resultMap = MapUtils.jsonToMap(resultInfo);
-                avatar   = resultMap.get("headimgurl");
-                nickname = resultMap.get("nickname");
-            } catch (Exception ignored) {}
-
-            return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
-        } catch (WxErrorException e) {
-            throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
-        }
-    }
-
-    /**
-     * 公众号跳转url
-     *
-     * @author fzr
-     * @param url 连接
-     * @return String
-     */
-    @Override
-    public String oaCodeUrl(String url) {
-        WxMpService wxMpService = WxMnpDriver.oa();
-        WxMpOAuth2ServiceImpl wxMpOAuth2Service = new WxMpOAuth2ServiceImpl(wxMpService);
-        return wxMpOAuth2Service.buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
-    }
-
-    /**
-     * 扫码链接
-     *
-     * @author fzr
-     * @param session session
-     * @return String
-     */
-    @Override
-    public String scanCodeUrl(String url, HttpSession session) {
-        // 获取AppId
-        String appId = ConfigUtils.get("op_channel", "appId", "");
-
-        // 微信开放平台授权
-        String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" +
-                "?appid=%s" +
-                "&redirect_uri=%s" +
-                "&response_type=code" +
-                "&scope=snsapi_login" +
-                "&state=%s" +
-                "#wechat_redirect";
-
-        // 回调地址
-        String redirectUrl = url;
-        try {
-            redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            throw new OperateException(e.getMessage());
-        }
-
-        // 防止csrf攻击
-        String state = ToolUtils.makeUUID().replaceAll("-", "");
-        ScanLoginCache.set(session.getId(), state);
-
-        //生成QrcodeUrl
-        return String.format(baseUrl, appId, redirectUrl, state);
-    }
-
-    /**
-     * 扫码登录
-     *
-     * @author fzr
-     * @param code 编码
-     * @param state 标识
-     * @param terminal 终端
-     * @param session 会话
-     */
-    @Override
-    public LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session) {
-        if (!ScanLoginCache.get(session.getId()).equals(state)) {
-            throw new OperateException("二维码已失效或不存在,请重新操作");
-        }
-
-        // 得到配置和授权临时票据code
-        String appId = ConfigUtils.get("op_channel", "appId", "");
-        String appSecret = ConfigUtils.get("op_channel", "appSecret", "");
-
-        //向认证服务器发送请求换取access_token
-        String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
-                "?appid=%s" +
-                "&secret=%s" +
-                "&code=%s" +
-                "&grant_type=authorization_code";
-
-        Map<String, String> resultMap;
-        try {
-            String accessTokenUrl = String.format(baseAccessTokenUrl, appId, appSecret, code);
-            String result = HttpUtils.sendGet(accessTokenUrl);
-            resultMap = MapUtils.jsonToMap(result);
-        } catch (Exception e) {
-            throw new OperateException("获取access_token失败:"+e.getMessage());
-        }
-
-        // 访问微信获取用户信息 (openId,unionId,昵称,头像等)
-        String accessToken = resultMap.get("access_token");
-        String openid = resultMap.get("openid");
-        String baseUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
-        String userInfoUrl = String.format(baseUserInfoUrl, accessToken, openid);
-        Map<String, String> userinfoMap;
-        try {
-            String resultUserInfo = HttpUtils.sendGet(userInfoUrl);
-            userinfoMap = MapUtils.jsonToMap(resultUserInfo);
-        } catch (Exception e) {
-            throw new OperateException("获取用户信息失败:"+e.getMessage());
-        }
-
-        String openId  = userinfoMap.get("openid");
-        String uniId   = userinfoMap.get("unionid");
-        String unionId = uniId == null ? "0" : uniId;
-        String avatar   = resultMap.getOrDefault("headimgurl", "");
-        String nickname = resultMap.getOrDefault("nickname", "");
-
-        return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
-    }
-
-    /**
-     * 处理微信登录
-     *
-     * @param openId   (openId)
-     * @param unionId  (unionId)
-     * @param terminal (terminal)
-     * @param avatar   (用户头像)
-     * @param nickname (用户昵称)
-     * @return LoginTokenVo
-     */
-    private LoginTokenVo __wxLoginHandle(String openId, String unionId, String avatar, String nickname, Integer terminal) {
-        // 查询授权
-        UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                .nested(wq->wq
-                    .eq("unionid", unionId).or()
-                    .eq("openid", openId)
-                ).last("limit 1"));
-
-        // 查询用户
-        User user = null;
-        if (StringUtils.isNotNull(userAuth)) {
-            user = userMapper.selectOne(new QueryWrapper<User>()
-                    .eq("is_delete", 0)
-                    .eq("id", userAuth.getUserId())
-                    .last("limit 1"));
-        }
-
-        // 创建用户
-        if (StringUtils.isNull(user)) {
-            Integer sn = this.__generateSn();
-            String defaultAvatar = "/api/static/default_avatar.png";
-            String defaultNickname = "用户" + sn;
-
-            if (StringUtils.isNotEmpty(avatar)) {
-                try {
-                    Long time = System.currentTimeMillis();
-                    String date = TimeUtils.millisecondToDate(time, "yyyyMMdd");
-                    String name = ToolUtils.makeMd5(ToolUtils.makeUUID()+time) + ".jpg";
-                    String path = "avatar" + date + "/" + name;
-                    String savePath = YmlUtils.get("like.upload-directory") + path;
-                    ToolUtils.download(avatar, savePath);
-                    defaultAvatar = path;
-                } catch (IOException ignored) {}
-            }
-
-            if (StringUtils.isNotEmpty(nickname)) {
-                defaultNickname = nickname;
-            }
-
-            User model = new User();
-            model.setSn(sn);
-            model.setAvatar(defaultAvatar);
-            model.setNickname(defaultNickname);
-            model.setUsername("u" + sn);
-            model.setChannel(terminal);
-            model.setSex(0);
-            model.setLastLoginIp(IpUtils.getHostIp());
-            model.setLastLoginTime(System.currentTimeMillis() / 1000);
-            model.setUpdateTime(System.currentTimeMillis() / 1000);
-            model.setCreateTime(System.currentTimeMillis() / 1000);
-            model.setIsNew(1);
-            userMapper.insert(model);
-            user = model;
-        }
-
-        // 终端授权
-        UserAuth auth = userAuthMapper.selectOne(
-                new QueryWrapper<UserAuth>()
-                        .eq("openid", openId)
-                        .eq("terminal", terminal)
-                        .last("limit 1"));
-
-        // 创建授权
-        if (StringUtils.isNull(auth)) {
-            UserAuth authModel = new UserAuth();
-            authModel.setUserId(user.getId());
-            authModel.setUnionid(unionId);
-            authModel.setOpenid(openId);
-            authModel.setTerminal(terminal);
-            authModel.setCreateTime(System.currentTimeMillis() / 1000);
-            authModel.setUpdateTime(System.currentTimeMillis() / 1000);
-            userAuthMapper.insert(authModel);
-        } else if (StringUtils.isEmpty(auth.getUnionid())) {
-            auth.setUnionid(unionId);
-            auth.setUpdateTime(System.currentTimeMillis() / 1000);
-            userAuthMapper.updateById(auth);
-        }
-
-        return this.__loginToken(user.getId(), user.getMobile(), user.getIsNew(), terminal);
-    }
-
-    /**
-     * 处理录令牌
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param mobile 用户手机
-     * @param terminal 终端
-     * @return LoginTokenVo
-     */
-    private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) {
-        // 实现账号登录
-        StpUtil.login(userId, String.valueOf(terminal));
-
-        // 更新登录信息
-        User user = new User();
-        user.setLastLoginIp(IpUtils.getHostIp());
-        user.setLastLoginTime(System.currentTimeMillis() / 1000);
-        userMapper.update(user, new QueryWrapper<User>().eq("id", userId));
-
-        // 返回登录信息
-        LoginTokenVo vo = new LoginTokenVo();
-        vo.setId(userId);
-        vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
-        vo.setToken(StpUtil.getTokenValue());
-        vo.setIsNew(isNew);
-        return vo;
-    }
-
-    /**
-     * 生成用户编号
-     *
-     * @author fzr
-     * @return Integer
-     */
-    private Integer __generateSn() {
-        Integer sn;
-        while (true) {
-            sn = Integer.parseInt(ToolUtils.randomInt(8));
-            User snModel = userMapper.selectOne(new QueryWrapper<User>()
-                    .select("id,sn")
-                    .eq("sn", sn)
-                    .last("limit 1"));
-            if (snModel == null) {
-                break;
-            }
-        }
-        return sn;
-    }
-
-}

+ 0 - 55
taphole-front/src/main/java/com/sckj/front/service/impl/LogsServiceImpl.java

@@ -1,55 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sckj.common.core.PageResult;
-import com.sckj.common.entity.log.LogMoney;
-import com.sckj.common.enums.LogMoneyEnum;
-import com.sckj.common.mapper.log.LogMoneyMapper;
-import com.sckj.common.util.TimeUtils;
-import com.sckj.front.service.ILogsService;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeRecordVo;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.LinkedList;
-import java.util.List;
-
-@Service
-public class LogsServiceImpl implements ILogsService {
-
-    @Resource
-    LogMoneyMapper logMoneyMapper;
-
-    @Override
-    public PageResult<RechargeRecordVo> userMoney(PageValidate pageValidate, Integer userId, Integer type) {
-        Integer pageNo   = pageValidate.getPageNo();
-        Integer pageSize = pageValidate.getPageSize();
-
-        QueryWrapper<LogMoney> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id", userId);
-        queryWrapper.orderByDesc("id");
-        if (type > 0) {
-            queryWrapper.eq("action", type);
-        }
-
-        IPage<LogMoney> iPage = logMoneyMapper.selectPage(new Page<>(pageNo, pageSize), queryWrapper);
-
-        List<RechargeRecordVo> list = new LinkedList<>();
-        for (LogMoney logMoney : iPage.getRecords()) {
-            RechargeRecordVo vo = new RechargeRecordVo();
-
-            vo.setId(logMoney.getId());
-            vo.setAction(logMoney.getAction());
-            vo.setOrderAmount(logMoney.getChangeAmount());
-            vo.setTips(LogMoneyEnum.getMsgByCode(logMoney.getChangeType()));
-            vo.setCreateTime(TimeUtils.timestampToDate(logMoney.getCreateTime()));
-            list.add(vo);
-        }
-
-        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
-    }
-
-}

+ 0 - 253
taphole-front/src/main/java/com/sckj/front/service/impl/PayServiceImpl.java

@@ -1,253 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.sckj.common.entity.RechargeOrder;
-import com.sckj.common.entity.setting.DevPayConfig;
-import com.sckj.common.entity.setting.DevPayWay;
-import com.sckj.common.entity.user.User;
-import com.sckj.common.entity.user.UserAuth;
-import com.sckj.common.enums.ClientEnum;
-import com.sckj.common.enums.LogMoneyEnum;
-import com.sckj.common.enums.PaymentEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.exception.PaymentException;
-import com.sckj.common.mapper.RechargeOrderMapper;
-import com.sckj.common.mapper.log.LogMoneyMapper;
-import com.sckj.common.mapper.setting.DevPayConfigMapper;
-import com.sckj.common.mapper.setting.DevPayWayMapper;
-import com.sckj.common.mapper.user.UserAuthMapper;
-import com.sckj.common.mapper.user.UserMapper;
-import com.sckj.common.plugin.wechat.WxPayDriver;
-import com.sckj.common.plugin.wechat.request.PaymentRequestV3;
-import com.sckj.common.util.StringUtils;
-import com.sckj.common.util.TimeUtils;
-import com.sckj.common.util.UrlUtils;
-import com.sckj.front.service.IPayService;
-import com.sckj.front.validate.PaymentValidate;
-import com.sckj.front.vo.pay.PayStatusVo;
-import com.sckj.front.vo.pay.PayWayInfoVo;
-import com.sckj.front.vo.pay.PayWayListVo;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-@Slf4j
-@Service
-public class PayServiceImpl implements IPayService {
-
-    @Resource
-    UserMapper userMapper;
-
-    @Resource
-    UserAuthMapper userAuthMapper;
-
-    @Resource
-    DevPayWayMapper devPayWayMapper;
-
-    @Resource
-    DevPayConfigMapper devPayConfigMapper;
-
-    @Resource
-    RechargeOrderMapper rechargeOrderMapper;
-
-    @Resource
-    LogMoneyMapper logMoneyMapper;
-
-    /**
-     * 支付方式
-     *
-     * @author fzr
-     * @param from 场景
-     * @param orderId 订单ID
-     * @param terminal 终端
-     * @return List<PayWayListedVo>
-     */
-    @Override
-    public PayWayListVo payWay(String from, Integer orderId, Integer terminal) {
-        List<DevPayWay> devPayWays = devPayWayMapper.selectList(
-                new QueryWrapper<DevPayWay>()
-                    .eq("scene", terminal)
-                    .eq("status", 1));
-
-        PayWayListVo vo = new PayWayListVo();
-        if (from.equals("recharge")) {
-            RechargeOrder rechargeOrder = rechargeOrderMapper.selectById(orderId);
-            vo.setOrderAmount(rechargeOrder.getOrderAmount());
-        }
-
-        Integer walletType = PaymentEnum.WALLET_PAY.getCode();
-        List<PayWayInfoVo> list = new LinkedList<>();
-        for (DevPayWay way : devPayWays) {
-            if (from.equals("recharge") && way.getPayConfigId().equals(walletType)) {
-                continue;
-            }
-
-            DevPayConfig devPayConfig = devPayConfigMapper.selectById(way.getPayConfigId());
-            PayWayInfoVo infoVo = new PayWayInfoVo();
-            infoVo.setId(devPayConfig.getId());
-            infoVo.setName(devPayConfig.getName());
-            infoVo.setIcon(UrlUtils.toAbsoluteUrl(devPayConfig.getIcon()));
-            infoVo.setIsDefault(way.getIsDefault());
-            list.add(infoVo);
-        }
-
-        vo.setList(list);
-        return vo;
-    }
-
-    /**
-     * 订单状态
-     *
-     * @author fzr
-     * @param from 场景
-     * @param orderId 订单ID
-     * @return PayStatusVo
-     */
-    @Override
-    public PayStatusVo payStatus(String from, Integer orderId) {
-        PayStatusVo vo = new PayStatusVo();
-        boolean orderExist = false;
-
-        switch (from) {
-            case "recharge":
-                RechargeOrder rechargeOrder = rechargeOrderMapper.selectById(orderId);
-                if (StringUtils.isNotNull(rechargeOrder)) {
-                    orderExist = true;
-                    vo.setPayStatus(rechargeOrder.getPayStatus());
-                    vo.setPayWay(PaymentEnum.getPayWayMsg(rechargeOrder.getPayWay()));
-                    vo.setOrderId(rechargeOrder.getId());
-                    vo.setOrderSn(rechargeOrder.getOrderSn());
-                    vo.setOrderAmount(rechargeOrder.getOrderAmount());
-                    vo.setPayTime(StringUtils.isNotEmpty(vo.getPayTime()) ? TimeUtils.timestampToDate(vo.getPayTime()) : "");
-                }
-                break;
-            case "order":
-                break;
-        }
-
-        if (!orderExist) {
-            throw new OperateException("订单不存在!");
-        }
-
-        return vo;
-    }
-
-    /**
-     * 发起支付
-     *
-     * @param params 参数
-     * @param terminal 终端
-     * @return Object
-     */
-    public Object prepay(PaymentValidate params, Integer terminal) {
-        try {
-            String openId = null;
-            UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                    .eq("user_id", params.getUserId())
-                    .eq("terminal", terminal)
-                    .last("limit 1"));
-
-            if (StringUtils.isNotNull(userAuth)) {
-                openId = userAuth.getOpenid();
-            }
-
-            switch (params.getPayWay()) {
-                case 1: // 余额支付
-                    String attach = params.getAttach();
-                    String orderSn = params.getOutTradeNo();
-                    this.handlePaidNotify(attach, orderSn, null);
-                    return Collections.emptyList();
-                case 2: // 微信支付
-                    PaymentRequestV3 requestV3 = new PaymentRequestV3();
-                    requestV3.setTerminal(terminal);
-                    requestV3.setOpenId(openId);
-                    requestV3.setAttach(params.getAttach());
-                    requestV3.setOutTradeNo(params.getOutTradeNo());
-                    requestV3.setOrderAmount(params.getOrderAmount());
-                    requestV3.setDescription(params.getDescription());
-                    Object result = WxPayDriver.unifiedOrder(requestV3);
-                    if (terminal == ClientEnum.H5.getCode()) {
-                        Assert.notNull(params.getRedirectUrl(), "redirectUrl参数缺失");
-                        Map<String, String> map = new LinkedHashMap<>();
-                        String h5Url = result.toString();
-                        map.put("url", h5Url);
-                        return map;
-                    }
-                    return WxPayDriver.unifiedOrder(requestV3);
-            }
-        } catch (Exception e) {
-            throw new PaymentException(e.getMessage());
-        }
-
-        throw new PaymentException("支付发起异常");
-    }
-
-    /**
-     * 支付回调处理
-     *
-     * @author fzr
-     * @param attach 场景码
-     * @param outTradeNo 订单编号
-     * @param transactionId 流水号
-     */
-    @Override
-    @Transactional
-    public void handlePaidNotify(String attach, String outTradeNo, String transactionId) {
-        switch (attach) {
-            case "order":
-                break;
-            case "recharge":
-                this.rechargeCallback(outTradeNo, transactionId);
-                break;
-        }
-    }
-
-    /**
-     * 余额充值回调
-     *
-     * @author fzr
-     * @param outTradeNo 订单号
-     * @param transactionId 流水号
-     */
-    private void rechargeCallback(String outTradeNo, String transactionId) {
-        for (int i=0; i<=0; i++) {
-            RechargeOrder rechargeOrder = rechargeOrderMapper.selectOne(
-                    new QueryWrapper<RechargeOrder>()
-                            .eq("order_sn", outTradeNo)
-                            .last("limit 1"));
-
-            if (StringUtils.isNull(rechargeOrder)) {
-                log.error("充值订单不存在: {} : {}", outTradeNo, transactionId);
-                break;
-            }
-
-            if (rechargeOrder.getPayStatus().equals(PaymentEnum.OK_PAID.getCode())) {
-                log.error("充值订单已支付: {} : {}", outTradeNo, transactionId);
-                break;
-            }
-
-            rechargeOrder.setPayStatus(1);
-            rechargeOrder.setTransactionId(transactionId);
-            rechargeOrder.setPayTime(System.currentTimeMillis() / 1000);
-            rechargeOrder.setUpdateTime(System.currentTimeMillis() / 1000);
-            rechargeOrderMapper.updateById(rechargeOrder);
-
-            User user = userMapper.selectById(rechargeOrder.getUserId());
-            user.setMoney(user.getMoney().add(rechargeOrder.getOrderAmount()));
-            user.setUpdateTime(System.currentTimeMillis() / 1000);
-            userMapper.updateById(user);
-
-            logMoneyMapper.add(rechargeOrder.getUserId(),
-                    LogMoneyEnum.UM_INC_RECHARGE.getCode(),
-                    rechargeOrder.getOrderAmount(),
-                    rechargeOrder.getId(),
-                    rechargeOrder.getOrderSn(),
-                    "用户充值余额", null);
-        }
-    }
-
-}

+ 0 - 312
taphole-front/src/main/java/com/sckj/front/service/impl/PcServiceImpI.java

@@ -1,312 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.sckj.common.config.GlobalConfig;
-import com.sckj.common.entity.article.Article;
-import com.sckj.common.entity.article.ArticleCategory;
-import com.sckj.common.entity.article.ArticleCollect;
-import com.sckj.common.entity.decorate.DecoratePage;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.article.ArticleCategoryMapper;
-import com.sckj.common.mapper.article.ArticleCollectMapper;
-import com.sckj.common.mapper.article.ArticleMapper;
-import com.sckj.common.mapper.decorate.DecoratePageMapper;
-import com.sckj.common.util.*;
-import com.sckj.front.service.IPcService;
-import com.sckj.front.vo.article.PcArticleCenterVo;
-import com.sckj.front.vo.article.PcArticleDetailVo;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.*;
-
-@Service
-public class PcServiceImpI implements IPcService {
-
-    @Resource
-    DecoratePageMapper decoratePageMapper;
-
-    @Resource
-    ArticleCategoryMapper articleCategoryMapper;
-
-    @Resource
-    ArticleCollectMapper articleCollectMapper;
-
-    @Resource
-    ArticleMapper articleMapper;
-
-    /**
-     * 主页
-     *
-     * @author cjh
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> index() {
-        Map<String,Object> indexData = new LinkedHashMap<>();
-        DecoratePage decoratePage = decoratePageMapper.selectOne(
-                new QueryWrapper<DecoratePage>()
-                        .eq("id", 4)
-                        .last("limit 1"));
-        //全部资讯
-        List<Article> articlesAll = articleMapper.selectList(new QueryWrapper<Article>()
-                .eq("is_show", 1)
-                .eq("is_delete", 0)
-                .orderByDesc("sort")
-                .orderByDesc("id")
-                .last("limit 5"));
-        List<Map<String, Object>> articlesAllList = new LinkedList<>();
-        for (Article article : articlesAll) {
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("id", article.getId());
-            map.put("title", article.getTitle());
-            map.put("intro", article.getIntro());
-            map.put("summary", article.getSummary());
-            map.put("image", UrlUtils.toAbsoluteUrl(article.getImage()));
-            map.put("visit", article.getVisit());
-            map.put("author", article.getAuthor());
-            map.put("sort", article.getSort());
-            map.put("createTime", TimeUtils.timestampToDate(article.getCreateTime()));
-            articlesAllList.add(map);
-        }
-
-        //最新资讯
-        List<Article> articlesNew = articleMapper.selectList(new QueryWrapper<Article>()
-                .eq("is_show", 1)
-                .eq("is_delete", 0)
-                .orderByDesc("id")
-                .last("limit 7"));
-        List<Map<String, Object>> articlesNewList = new LinkedList<>();
-        for (Article article : articlesNew) {
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("id", article.getId());
-            map.put("title", article.getTitle());
-            map.put("intro", article.getIntro());
-            map.put("summary", article.getSummary());
-            map.put("image", UrlUtils.toAbsoluteUrl(article.getImage()));
-            map.put("visit", article.getVisit());
-            map.put("sort", article.getSort());
-            map.put("author", article.getAuthor());
-            map.put("createTime", TimeUtils.timestampToDate(article.getCreateTime()));
-            articlesNewList.add(map);
-        }
-
-        //热门资讯
-        List<Article> articlesHot = articleMapper.selectList(new QueryWrapper<Article>()
-                .eq("is_show", 1)
-                .eq("is_delete", 0)
-                .orderByDesc("visit")
-                .last("limit 7"));
-        List<Map<String, Object>> articlesHostList = new LinkedList<>();
-        for (Article article : articlesHot) {
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("id", article.getId());
-            map.put("title", article.getTitle());
-            map.put("intro", article.getIntro());
-            map.put("summary", article.getSummary());
-            map.put("image", UrlUtils.toAbsoluteUrl(article.getImage()));
-            map.put("author", article.getAuthor());
-            map.put("visit", article.getVisit());
-            map.put("sort", article.getSort());
-            map.put("createTime", TimeUtils.timestampToDate(article.getCreateTime()));
-            articlesHostList.add(map);
-        }
-
-        indexData.put("pages", decoratePage.getPageData());
-        indexData.put("all", articlesAllList);
-        indexData.put("new", articlesNewList);
-        indexData.put("hot", articlesHostList);
-        return  indexData;
-    }
-
-    /**
-     * 配置
-     *
-     * @author cjh
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> getConfig() {
-        Map<String, Object> config = new LinkedHashMap<>();
-
-        // 登录配置
-        Map<String, Object> loginMap = new LinkedHashMap<>();
-        Map<String, String> loginConfig = ConfigUtils.get("login");
-        loginMap.put("loginWay", ListUtils.stringToListAsInt(loginConfig.getOrDefault("loginWay", ""), ","));
-        loginMap.put("forceBindMobile", Integer.parseInt(loginConfig.getOrDefault("forceBindMobile", "0")));
-        loginMap.put("openOtherAuth", Integer.parseInt(loginConfig.getOrDefault("openOtherAuth", "0")));
-        loginMap.put("openAgreement", Integer.parseInt(loginConfig.getOrDefault("openAgreement", "0")));
-        loginMap.put("autoLoginAuth", ListUtils.stringToListAsInt(loginConfig.getOrDefault("autoLoginAuth", ""), ","));
-
-        // 网址信息
-        Map<String, Object> websiteMap = new LinkedHashMap<>();
-        Map<String, String> websiteConfig = ConfigUtils.get("website");
-        String copyright = websiteConfig.getOrDefault("copyright", "[]");
-        List<Map<String, String>> copyrightMap = ListUtils.stringToListAsMapStr(copyright);
-
-        websiteMap.put("shopName", websiteConfig.getOrDefault("shopName", "LikeAdmin"));
-        websiteMap.put("shopLogo", UrlUtils.toAbsoluteUrl(websiteConfig.getOrDefault("shopLogo", "")));
-        websiteMap.put("pcDesc", websiteConfig.getOrDefault("pcDesc", ""));
-        websiteMap.put("pcIco", UrlUtils.toAbsoluteUrl(websiteConfig.getOrDefault("pcIco", "")));
-        websiteMap.put("pcKeywords", websiteConfig.getOrDefault("pcKeywords", ""));
-        websiteMap.put("pcLogo", UrlUtils.toAbsoluteUrl(websiteConfig.getOrDefault("pcLogo", "")));
-        websiteMap.put("pcTitle", websiteConfig.getOrDefault("pcTitle", ""));
-
-        // 演示公众号和小程序二维码
-        Map<String,String> qrCodeMap = new LinkedHashMap<>();
-        qrCodeMap.put("mnp", UrlUtils.toAbsoluteUrl(ConfigUtils.get("mp_channel","qrCode")));
-        qrCodeMap.put("oa", UrlUtils.toAbsoluteUrl(ConfigUtils.get("oa_channel","qrCode")));
-
-        // 返回数据
-        config.put("version", GlobalConfig.version);
-        config.put("domain", UrlUtils.domain());
-        config.put("login", loginMap);
-        config.put("website", websiteMap);
-        config.put("copyright",copyrightMap);
-        config.put("qrcode",qrCodeMap);
-        return config;
-    }
-
-    /**
-     * 资讯中心
-     *
-     * @author fzr
-     * @return List<PcArticleCenterVo>
-     */
-    @Override
-    public List<PcArticleCenterVo> articleCenter() {
-        List<ArticleCategory> articleCategoryList = articleCategoryMapper.selectList(
-                new QueryWrapper<ArticleCategory>()
-                    .eq("is_show", 1)
-                    .eq("is_delete", 0)
-                    .orderByDesc(Arrays.asList("sort", "id")));
-
-        List<PcArticleCenterVo> list = new LinkedList<>();
-        for (ArticleCategory articleCategory : articleCategoryList) {
-            List<Article> articleList = articleMapper.selectList(new QueryWrapper<Article>()
-                    .eq("cid", articleCategory.getId())
-                    .eq("is_show", 1)
-                    .eq("is_delete", 0)
-                    .orderByDesc(Arrays.asList("sort", "id"))
-                    .last("limit 10"));
-
-            List<Map<String, Object>> articles = new LinkedList<>();
-            for (Article article : articleList) {
-                Map<String, Object> a = new LinkedHashMap<>();
-                a.put("id", article.getId());
-                a.put("title", article.getTitle());
-                a.put("image", UrlUtils.toAbsoluteUrl(article.getImage()));
-                articles.add(a);
-            }
-
-            PcArticleCenterVo vo = new PcArticleCenterVo();
-            vo.setId(articleCategory.getId());
-            vo.setName(articleCategory.getName());
-            vo.setArticle(articles);
-            list.add(vo);
-        }
-
-        return list;
-    }
-
-    /**
-     * 文章详情
-     *
-     * @author fzr
-     * @param id 文章主键
-     * @param userId 用户ID
-     * @return PcArticleDetailVo
-     */
-    @Override
-    public PcArticleDetailVo articleDetail(Integer id, Integer userId) {
-        // 文章详情
-        Article article = articleMapper.selectOne(new QueryWrapper<Article>()
-                .select(Article.class, info->
-                        !info.getColumn().equals("is_show") &&
-                        !info.getColumn().equals("is_delete") &&
-                        !info.getColumn().equals("delete_time"))
-                .eq("id", id)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        if (StringUtils.isNull(article)) {
-            throw new OperateException("文章数据不存在!");
-        }
-
-        // 分类名称
-        ArticleCategory articleCategory = articleCategoryMapper.selectOne(
-                new QueryWrapper<ArticleCategory>()
-                    .eq("id", article.getCid())
-                    .eq("is_delete", 0));
-
-        // 上一条记录
-        Article prev = articleMapper.selectOne(new QueryWrapper<Article>()
-                .select("id,title")
-                .lt("id", id)
-                .eq("is_delete", 0)
-                .orderByDesc(Arrays.asList("sort", "id"))
-                .last("limit 1"));
-
-        // 下一条记录
-        Article next = articleMapper.selectOne(new QueryWrapper<Article>()
-                .select("id,title")
-                .gt("id", id)
-                .eq("is_delete", 0)
-                .orderByDesc(Arrays.asList("sort", "id"))
-                .last("limit 1"));
-
-        // 是否收藏
-        ArticleCollect collect = articleCollectMapper.selectOne(new QueryWrapper<ArticleCollect>()
-                .eq("article_id", article.getId())
-                .eq("user_id", userId)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        // 最新资讯
-        List<Article> news = articleMapper.selectList(new QueryWrapper<Article>()
-                .select("id,title,image,create_time,update_time")
-                .eq("cid", article.getCid())
-                .eq("is_delete", 0)
-                .orderByDesc("id")
-                .last("limit 8"));
-
-        List<Map<String, Object>> newsList = new LinkedList<>();
-        for (Article newArticle : news) {
-            Map<String, Object> newsMap = new LinkedHashMap<>();
-            newsMap.put("id", newArticle.getId());
-            newsMap.put("title", newArticle.getTitle());
-            newsMap.put("image", UrlUtils.toAbsoluteUrl(newArticle.getImage()));
-            newsMap.put("createTime", TimeUtils.timestampToDate(newArticle.getCreateTime()));
-            newsMap.put("updateTime", TimeUtils.timestampToDate(newArticle.getUpdateTime()));
-            newsList.add(newsMap);
-        }
-
-        // 处理数据
-        PcArticleDetailVo vo = new PcArticleDetailVo();
-        BeanUtils.copyProperties(article, vo);
-        vo.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime()));
-        vo.setUpdateTime(TimeUtils.timestampToDate(vo.getUpdateTime()));
-        vo.setCategory(StringUtils.isNotNull(articleCategory) ? articleCategory.getName() : "");
-        vo.setIsCollect(StringUtils.isNotNull(collect) ? 1 : 0);
-        vo.setNews(newsList);
-        vo.setPrev(null);
-        vo.setNext(null);
-
-        if (StringUtils.isNotNull(prev)) {
-            Map<String, Object> prevMap = new LinkedHashMap<>();
-            prevMap.put("id", prev.getId());
-            prevMap.put("title", prev.getTitle());
-            vo.setPrev(prevMap);
-        }
-
-        if (StringUtils.isNotNull(next)) {
-            Map<String, Object> nextMap = new LinkedHashMap<>();
-            nextMap.put("id", next.getId());
-            nextMap.put("title", next.getTitle());
-            vo.setNext(nextMap);
-        }
-
-        return vo;
-    }
-}

+ 0 - 131
taphole-front/src/main/java/com/sckj/front/service/impl/RechargeServiceImpl.java

@@ -1,131 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sckj.common.core.PageResult;
-import com.sckj.common.entity.RechargeOrder;
-import com.sckj.common.entity.user.User;
-import com.sckj.common.enums.PaymentEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.RechargeOrderMapper;
-import com.sckj.common.mapper.user.UserMapper;
-import com.sckj.common.util.ConfigUtils;
-import com.sckj.common.util.TimeUtils;
-import com.sckj.front.service.IRechargeService;
-import com.sckj.front.validate.RechargeValidate;
-import com.sckj.front.validate.common.PageValidate;
-import com.sckj.front.vo.RechargeConfigVo;
-import com.sckj.front.vo.RechargeRecordVo;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 充值余额服务实现类
- */
-@Service
-public class RechargeServiceImpl implements IRechargeService {
-
-    @Resource
-    RechargeOrderMapper rechargeOrderMapper;
-
-    @Resource
-    UserMapper userMapper;
-
-    /**
-     * 充值配置
-     *
-     * @author fzr
-     *  @param userId 用户ID
-     * @return RechargeConfigVo
-     */
-    @Override
-    public RechargeConfigVo config(Integer userId) {
-        User user = userMapper.selectById(userId);
-        Map<String, String> config = ConfigUtils.get("recharge");
-
-        RechargeConfigVo vo = new RechargeConfigVo();
-        vo.setOpenRecharge(Integer.parseInt(config.getOrDefault("openRecharge", "0")));
-        vo.setMinRechargeMoney(new BigDecimal(config.getOrDefault("minRechargeMoney", "0")));
-        vo.setUserMoney(user.getMoney());
-        return vo;
-    }
-
-    /**
-     * 充值记录
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param pageValidate 分页参数
-     * @return PageResult<RechargeRecordVo>
-     */
-    @Override
-    public PageResult<RechargeRecordVo> record(Integer userId, PageValidate pageValidate) {
-        Integer pageNo   = pageValidate.getPageNo();
-        Integer pageSize = pageValidate.getPageSize();
-
-        QueryWrapper<RechargeOrder> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("user_id", userId);
-        queryWrapper.eq("pay_status", PaymentEnum.OK_PAID.getCode());
-        queryWrapper.orderByDesc("id");
-
-        IPage<RechargeOrder> iPage = rechargeOrderMapper.selectPage(new Page<>(pageNo, pageSize), queryWrapper);
-
-        List<RechargeRecordVo> list = new LinkedList<>();
-        for (RechargeOrder rechargeOrder : iPage.getRecords()) {
-            RechargeRecordVo vo = new RechargeRecordVo();
-            vo.setId(rechargeOrder.getId());
-            vo.setAction(1);
-            vo.setOrderAmount(rechargeOrder.getOrderAmount());
-            vo.setCreateTime(TimeUtils.timestampToDate(rechargeOrder.getPayTime()));
-            vo.setTips("充值" + vo.getOrderAmount() + "元");
-            list.add(vo);
-        }
-
-        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
-    }
-
-    /**
-     * 创建充值订单
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @param terminal 设备端
-     * @param rechargeValidate 参数
-     * @return Map<String, Object>
-     */
-    @Override
-    public Map<String, Object> placeOrder(Integer userId, Integer terminal, RechargeValidate rechargeValidate) {
-        RechargeConfigVo config = this.config(userId);
-        if (config.getOpenRecharge().equals(0)) {
-            throw new OperateException("充值功能已关闭");
-        }
-
-        if (rechargeValidate.getOrderAmount().compareTo(config.getMinRechargeMoney()) < 0) {
-            throw new OperateException("充值金额不能少于" + config.getMinRechargeMoney());
-        }
-
-        RechargeOrder order = new RechargeOrder();
-        order.setUserId(userId);
-        order.setOrderTerminal(terminal);
-        order.setOrderSn(rechargeOrderMapper.randMakeOrderSn("order_sn"));
-        order.setPayStatus(0);
-        order.setRefundStatus(0);
-        order.setOrderAmount(rechargeValidate.getOrderAmount());
-        order.setCreateTime(System.currentTimeMillis() / 1000);
-        order.setUpdateTime(System.currentTimeMillis() / 1000);
-        order.setDeleteTime(System.currentTimeMillis() / 1000);
-        rechargeOrderMapper.insert(order);
-
-        Map<String, Object> response = new LinkedHashMap<>();
-        response.put("orderId", order.getId());
-        return response;
-    }
-
-}

+ 0 - 432
taphole-front/src/main/java/com/sckj/front/service/impl/UserServiceImpl.java

@@ -1,432 +0,0 @@
-package com.sckj.front.service.impl;
-
-import cn.binarywang.wx.miniapp.api.WxMaService;
-import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
-import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.sckj.common.config.GlobalConfig;
-import com.sckj.common.entity.user.User;
-import com.sckj.common.entity.user.UserAuth;
-import com.sckj.common.enums.ClientEnum;
-import com.sckj.common.enums.NoticeEnum;
-import com.sckj.common.exception.OperateException;
-import com.sckj.common.mapper.user.UserAuthMapper;
-import com.sckj.common.mapper.user.UserMapper;
-import com.sckj.common.plugin.notice.NoticeCheck;
-import com.sckj.common.plugin.wechat.WxMnpDriver;
-import com.sckj.common.util.*;
-import com.sckj.front.TapholeFrontThreadLocal;
-import com.sckj.front.service.IUserService;
-import com.sckj.front.validate.users.NewUserUpdateValidate;
-import com.sckj.front.validate.users.UserBindWechatValidate;
-import com.sckj.front.validate.users.UserPhoneBindValidate;
-import com.sckj.front.validate.users.UserUpdateValidate;
-import com.sckj.front.vo.user.UserCenterVo;
-import com.sckj.front.vo.user.UserInfoVo;
-import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
-import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.api.WxMpService;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
-
-import javax.annotation.Resource;
-import java.util.Map;
-
-/**
- * 用户服务实现类
- */
-@Service
-public class UserServiceImpl implements IUserService {
-
-    @Resource
-    UserMapper userMapper;
-
-    @Resource
-    UserAuthMapper userAuthMapper;
-
-    /**
-     * 个人中心
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @return UserCenterVo
-     */
-    @Override
-    public UserCenterVo center(Integer userId, Integer terminal) {
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,sn,avatar,real_name,nickname,username,mobile,money,is_new,password")
-                .eq("id", userId)
-                .last("limit 1"));
-
-        UserCenterVo vo = new UserCenterVo();
-        BeanUtils.copyProperties(user, vo);
-        if (user.getAvatar().equals("")) {
-            String avatar = ConfigUtils.get("user", "defaultAvatar", "");
-            vo.setAvatar(UrlUtils.toAbsoluteUrl(avatar));
-        } else {
-            vo.setAvatar(UrlUtils.toAbsoluteUrl(user.getAvatar()));
-        }
-
-        vo.setIsBindWechat(false);
-        if (terminal.equals(ClientEnum.OA.getCode()) || terminal.equals(ClientEnum.MNP.getCode())) {
-            UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                    .select("id,openid,terminal")
-                    .eq("user_id", userId)
-                    .eq("terminal", terminal)
-                    .last("limit 1"));
-            vo.setIsBindWechat(userAuth != null);
-        }
-
-        // 是否有设置登录密码
-        vo.setHasPwd(StringUtils.isNotBlank(user.getPassword()));
-
-        return vo;
-    }
-
-    /**
-     * 个人信息
-     *
-     * @author fzr
-     * @param userId 用户ID
-     * @return UserInfoVo
-     */
-    @Override
-    public UserInfoVo info(Integer userId) {
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,sn,avatar,real_name,nickname,username,mobile,password,sex,create_time")
-                .eq("id", userId)
-                .last("limit 1"));
-
-        UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                .select("id,openid")
-                .eq("user_id", userId)
-                .last("limit 1"));
-
-        UserInfoVo vo = new UserInfoVo();
-        BeanUtils.copyProperties(user, vo);
-        vo.setIsPassword(!user.getPassword().equals(""));
-        vo.setIsBindMnp(userAuth != null);
-        vo.setVersion(GlobalConfig.version);
-        vo.setSex(user.getSex());
-        vo.setCreateTime(TimeUtils.timestampToDate(user.getCreateTime()));
-
-        if (!user.getAvatar().equals("")) {
-            vo.setAvatar(UrlUtils.toAbsoluteUrl(user.getAvatar()));
-        } else {
-            String avatar = ConfigUtils.get("user", "defaultAvatar", "");
-            vo.setAvatar(UrlUtils.toAbsoluteUrl(avatar));
-        }
-
-        return vo;
-    }
-
-    /**
-     * 编辑信息
-     *
-     * @author fzr
-     * @param updateValidate 参数
-     * @param userId 用户ID
-     */
-    @Override
-    public void edit(UserUpdateValidate updateValidate, Integer userId) {
-        String field = updateValidate.getField();
-        String value = updateValidate.getValue();
-
-        switch (field) {
-            case "avatar":
-                User avatarUser = new User();
-                avatarUser.setId(userId);
-                avatarUser.setAvatar(UrlUtils.toRelativeUrl(value));
-                avatarUser.setUpdateTime(System.currentTimeMillis() / 1000);
-                userMapper.updateById(avatarUser);
-                break;
-            case "username":
-                User usernameUser = userMapper.selectOne(new QueryWrapper<User>()
-                        .select("id,username")
-                        .eq("username", value)
-                        .eq("is_delete", 0)
-                        .last("limit 1"));
-
-                if (StringUtils.isNotNull(usernameUser) && !usernameUser.getId().equals(userId)) {
-                    throw new OperateException("账号已被使用!");
-                }
-
-                if (StringUtils.isNotNull(usernameUser) && usernameUser.getUsername().equals(value)) {
-                    throw new OperateException("新账号与旧账号一致,修改失败!");
-                }
-
-                User u = new User();
-                u.setId(userId);
-                u.setUsername(value);
-                u.setUpdateTime(System.currentTimeMillis() / 1000);
-                userMapper.updateById(u);
-                break;
-            case "nickname":
-                User nicknameUser = new User();
-                nicknameUser.setId(userId);
-                nicknameUser.setNickname(value);
-                nicknameUser.setUpdateTime(System.currentTimeMillis() / 1000);
-                userMapper.updateById(nicknameUser);
-                break;
-            case "sex":
-                User sexUser = new User();
-                sexUser.setId(userId);
-                sexUser.setSex(Integer.parseInt(value));
-                sexUser.setUpdateTime(System.currentTimeMillis() / 1000);
-                userMapper.updateById(sexUser);
-                break;
-            default:
-                throw new OperateException("不被支持的类型");
-        }
-    }
-
-    /**
-     * 修改密码
-     *
-     * @author fzr
-     * @param password 新密码
-     * @param userId 用户ID
-     */
-    @Override
-    public void changePwd(String password, String oldPassword, Integer userId) {
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,password,salt")
-                .eq("id", userId)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        Assert.notNull(user, "用户不存在");
-
-        if (!user.getPassword().equals("")) {
-            Assert.notNull(oldPassword, "oldPassword参数缺失");
-            String oldPwd = ToolUtils.makeMd5(oldPassword.trim() + user.getSalt());
-            if (!oldPwd.equals(user.getPassword())) {
-                throw new OperateException("原密码不正确!");
-            }
-        }
-
-        String salt = ToolUtils.randomString(5);
-        String pwd  = ToolUtils.makeMd5(password.trim()+salt);
-
-        User u = new User();
-        u.setId(userId);
-        u.setPassword(pwd);
-        u.setSalt(salt);
-        u.setUpdateTime(System.currentTimeMillis() / 1000);
-        userMapper.updateById(u);
-    }
-
-    /**
-     * 忘记密码
-     *
-     * @author fzr
-     * @param password 新密码
-     * @param mobile 手机号
-     * @param code 验证码
-     */
-    @Override
-    public void forgotPwd(String password, String mobile, String code) {
-        // 校验验证码
-        int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode();
-        if (!NoticeCheck.verify(sceneCode, code)) {
-            throw new OperateException("验证码错误!");
-        }
-
-        // 查询手机号
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,username,mobile,is_disable")
-                .eq("is_delete", 0)
-                .eq("mobile", mobile)
-                .last("limit 1"));
-
-        // 验证账号
-        com.baomidou.mybatisplus.core.toolkit.Assert.notNull(user, "账号不存在!");
-
-        String salt = ToolUtils.randomString(5);
-        String pwd  = ToolUtils.makeMd5(password.trim()+salt);
-
-        // 更新密码
-        user.setPassword(pwd);
-        user.setSalt(salt);
-        user.setUpdateTime(System.currentTimeMillis() / 1000);
-        userMapper.updateById(user);
-    }
-
-    /**
-     * 绑定手机
-     *
-     * @author fzr
-     * @param mobileValidate 参数
-     * @param userId 用户ID
-     */
-    @Override
-    public void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId) {
-        String type   = mobileValidate.getType();
-        String mobile = mobileValidate.getMobile();
-        String code   = mobileValidate.getCode().toLowerCase();
-
-        // 校验验证码
-        int sceneCode = type.equals("bind") ? NoticeEnum.BIND_MOBILE_CODE.getCode() : NoticeEnum.CHANGE_MOBILE_CODE.getCode() ;
-        if (!NoticeCheck.verify(sceneCode, code)) {
-            throw new OperateException("验证码错误!");
-        }
-
-        User user = userMapper.selectOne(new QueryWrapper<User>()
-                .select("id,username,mobile")
-                .eq("mobile", mobile)
-                .eq("is_delete", 0)
-                .last("limit 1"));
-
-        if (StringUtils.isNotNull(user) && user.getId().equals(userId)) {
-            throw new OperateException("手机号已被其它账号绑定!");
-        }
-
-        User u = new User();
-        u.setId(userId);
-        u.setMobile(mobile);
-        u.setUpdateTime(System.currentTimeMillis() / 1000);
-        userMapper.updateById(u);
-    }
-
-    /**
-     * 微信手机号
-     *
-     * @author fzr
-     * @param code 获取手机号的Code
-     */
-    @Override
-    public void mnpMobile(String code) {
-        Map<String, String> config = ConfigUtils.get("mp_channel");
-        WxMaService wxMaService = new WxMaServiceImpl();
-        WxMaDefaultConfigImpl wxConfig = new WxMaDefaultConfigImpl();
-        wxConfig.setSecret(config.getOrDefault("appSecret", ""));
-        wxConfig.setAppid(config.getOrDefault("appId", ""));
-        wxMaService.setWxMaConfig(wxConfig);
-
-        try {
-            WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxMaService.getUserService().getNewPhoneNoInfo(code);
-
-            Integer userId = TapholeFrontThreadLocal.getUserId();
-            User user = new User();
-            user.setId(userId);
-            user.setMobile(wxMaPhoneNumberInfo.getPhoneNumber());
-            user.setUpdateTime(System.currentTimeMillis() / 1000);
-            userMapper.updateById(user);
-        } catch (WxErrorException e) {
-            throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
-        }
-    }
-
-
-    /**
-     * 更新新用户昵称头像等信息
-     *
-     * @param newUserUpdateValidate 参数
-     * @param userId 用户id
-     */
-    @Override
-    public void updateNewUserInfo(NewUserUpdateValidate newUserUpdateValidate, Integer userId) {
-        User user = new User();
-        user.setId(userId);
-        user.setNickname(newUserUpdateValidate.getNickname());
-        user.setAvatar(UrlUtils.toRelativeUrl(newUserUpdateValidate.getAvatar()));
-        user.setIsNew(0);
-        user.setUpdateTime(System.currentTimeMillis() / 1000);
-        userMapper.updateById(user);
-    }
-
-    /**
-     * 绑定小程序
-     *
-     * @param bindMnpValidate 参数
-     * @param userId 用户ID
-     */
-    @Override
-    public void bindMnp(UserBindWechatValidate bindMnpValidate, Integer userId) {
-        try {
-            // 通过code获取微信信息
-            String code = bindMnpValidate.getCode();
-            WxMaService wxMaService = WxMnpDriver.mnp();
-            WxMaJscode2SessionResult sessionResult = wxMaService.getUserService().getSessionInfo(code);
-            String openId = sessionResult.getOpenid();
-            String uniId = sessionResult.getUnionid();
-            String unionId = uniId == null ? "0" : uniId;
-
-            // 授权校验,未授权创建授权,已授权返回
-            bindWechatAuth(openId, unionId, ClientEnum.MNP.getCode(), userId);
-
-        } catch (WxErrorException e) {
-            throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
-        }
-    }
-
-    /**
-     * 绑定公众号
-     *
-     * @param bindOaValidate 参数
-     * @param userId 用户ID
-     */
-    @Override
-    public void bindOa(UserBindWechatValidate bindOaValidate, Integer userId) {
-        try {
-            // 通过code获取微信信息
-            WxMpService wxMpService = WxMnpDriver.oa();
-            WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(bindOaValidate.getCode());
-            String uniId = wxOAuth2AccessToken.getUnionId();
-            String openId  = wxOAuth2AccessToken.getOpenId();
-            String unionId = uniId == null ? "0" : uniId;
-
-            // 授权校验,未授权创建授权,已授权返回
-            bindWechatAuth(openId, unionId, ClientEnum.OA.getCode(), userId);
-
-        } catch (WxErrorException e) {
-            throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
-        }
-    }
-
-    /**
-     * 绑定微信授权
-     *
-     * @param openId openId
-     * @param unionId unionId
-     * @param terminal 客户端端
-     * @param userId 用户ID
-     */
-    public void bindWechatAuth(String openId, String unionId, Integer terminal, Integer userId) {
-        // 授权表中查找授权记录
-        UserAuth userAuthOpenId = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                .eq("openid", openId)
-                .last("limit 1"));
-
-        if (userAuthOpenId != null) {
-            // 该微信已绑定
-            throw new OperateException("该微信已绑定");
-        }
-
-        // 已有授权,返回已绑定微信。 没有授权,绑定微信
-        if (!StringUtils.isBlank(unionId)) {
-            UserAuth userAuthUnionId = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
-                    .eq("unionid", unionId)
-                    .last("limit 1"));
-
-            if (userAuthUnionId != null && !userId.equals(userAuthUnionId.getUserId())) {
-                // 该微信已绑定
-                throw new OperateException("该微信已绑定");
-            }
-        }
-
-        // 记录微信授权
-        UserAuth authModel = new UserAuth();
-        authModel.setUserId(userId);
-        authModel.setUnionid(unionId);
-        authModel.setOpenid(openId);
-        authModel.setTerminal(terminal);
-        authModel.setCreateTime(System.currentTimeMillis() / 1000);
-        authModel.setUpdateTime(System.currentTimeMillis() / 1000);
-        userAuthMapper.insert(authModel);
-    }
-
-}

+ 0 - 47
taphole-front/src/main/java/com/sckj/front/service/impl/WechatServiceImpl.java

@@ -1,47 +0,0 @@
-package com.sckj.front.service.impl;
-
-import com.sckj.common.plugin.wechat.WxMnpDriver;
-import com.sckj.common.util.ConfigUtils;
-import com.sckj.front.service.IWechatService;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-@Service
-public class WechatServiceImpl implements IWechatService {
-
-    @Override
-    public Map<String, Object> jsConfig(String url) throws Exception {
-        String appId = ConfigUtils.get("oa_channel", "appId");
-        String accessToken = WxMnpDriver.mnp().getAccessToken();
-        String jsapiTicket = WxMnpDriver.getJsSdkGetTicket(accessToken);
-        String timestamp = Long.toString(System.currentTimeMillis() / 1000);
-        String nonceStr = UUID.randomUUID().toString();
-        String signature = WxMnpDriver.buildJSSDKSignature(jsapiTicket,timestamp,nonceStr,url);
-
-        List<String> array = Arrays.asList(
-                "onMenuShareTimeline",
-                "onMenuShareAppMessage",
-                "onMenuShareQQ",
-                "onMenuShareWeibo",
-                "onMenuShareQZone",
-                "openLocation",
-                "getLocation",
-                "chooseWXPay",
-                "updateAppMessageShareData",
-                "updateTimelineShareData",
-                "openAddress",
-                "scanQRCode");
-
-        Map<String,Object> map = new HashMap<>();
-        map.put("url", url);
-        map.put("jsapi_ticket", jsapiTicket);
-        map.put("nonceStr", nonceStr);
-        map.put("timestamp", timestamp);
-        map.put("signature", signature);
-        map.put("appid", appId);
-        map.put("jsApiList", array);
-        return map;
-    }
-
-}

+ 0 - 47
taphole-front/src/main/java/com/sckj/front/validate/PaymentValidate.java

@@ -1,47 +0,0 @@
-package com.sckj.front.validate;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel("预支付订单参数")
-public class PaymentValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "scene参数缺失")
-    @ApiModelProperty("支付场景: [recharge=充值,order=普通订单]")
-    private String scene;
-
-    @NotNull(message = "payWay参数缺失")
-    @ApiModelProperty("支付方式: [1=余额支付,2=微信支付,3=支付宝支付]")
-    private Integer payWay;
-
-    @NotNull(message = "orderId参数缺失")
-    @ApiModelProperty("订单ID")
-    private Integer orderId;
-
-    @ApiModelProperty(value = "重定向链接: H5端需要")
-    private String redirectUrl;
-
-    @ApiModelProperty(value = "用户ID", notes = "该参数无需传递")
-    private Integer userId;
-
-    @ApiModelProperty(value = "订单类型", notes = "该参数无需传递")
-    private String attach;
-
-    @ApiModelProperty(value = "订单编号", notes = "该参数无需传递")
-    private String outTradeNo;
-
-    @ApiModelProperty(value = "订单金额", notes = "该参数无需传递")
-    private BigDecimal orderAmount;
-
-    @ApiModelProperty(value = "用户描述", notes = "该参数无需传递")
-    private String description;
-
-}

+ 0 - 19
taphole-front/src/main/java/com/sckj/front/validate/RechargeValidate.java

@@ -1,19 +0,0 @@
-package com.sckj.front.validate;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel("新用户更新信息参数")
-public class RechargeValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "orderAmount参数缺失")
-    private BigDecimal orderAmount;
-
-}

+ 0 - 22
taphole-front/src/main/java/com/sckj/front/validate/article/ArticleCollectValidate.java

@@ -1,22 +0,0 @@
-package com.sckj.front.validate.article;
-
-import com.sckj.common.validator.annotation.IDMust;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("文章收藏参数")
-public class ArticleCollectValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "articleId参数缺失")
-    @IDMust(message = "articleId参数必须大于0")
-    @ApiModelProperty(value = "文章ID", required = true)
-    private Integer articleId;
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/validate/article/ArticleSearchValidate.java

@@ -1,27 +0,0 @@
-package com.sckj.front.validate.article;
-
-import com.sckj.common.validator.annotation.StringContains;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel("文章搜索参数")
-public class ArticleSearchValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    private Integer cid;
-
-    @Length(max = 100, message = "关键词过长了")
-    @ApiModelProperty(value = "关键词")
-    private String keyword;
-
-    @StringContains(values = {"hot", "new"})
-    @ApiModelProperty(value = "排序号")
-    private String sort;
-
-}

+ 0 - 25
taphole-front/src/main/java/com/sckj/front/validate/common/PageValidate.java

@@ -1,25 +0,0 @@
-package com.sckj.front.validate.common;
-
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-import javax.validation.constraints.DecimalMax;
-import javax.validation.constraints.DecimalMin;
-import java.io.Serializable;
-
-@Data
-@ApiModel("分页参数")
-public class PageValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    // 当前分页
-    @DecimalMin(value = "1", message = "pageNo参数必须大于0的数字")
-    public Integer pageNo = 1;
-
-    // 每页条数
-    @DecimalMin(value = "1", message = "pageSize参数必须是大于0的数字")
-    @DecimalMax(value = "60", message = "pageSize参数必须是小于60的数字")
-    private Integer pageSize = 20;
-
-}

+ 0 - 30
taphole-front/src/main/java/com/sckj/front/validate/common/SmsValidate.java

@@ -1,30 +0,0 @@
-package com.sckj.front.validate.common;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.io.Serializable;
-
-@Data
-@ApiModel("短信发送参数")
-public class SmsValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "scene参数缺失")
-    @ApiModelProperty(value = "场景码")
-    private Integer scene;
-
-    @NotNull(message = "mobile参数缺失")
-    @NotEmpty(message = "手机号不能为空")
-    @Length(min = 11, max = 11, message = "手机号只能为11位")
-    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
-    @ApiModelProperty(value = "手机号")
-    private String mobile;
-
-}

+ 0 - 17
taphole-front/src/main/java/com/sckj/front/validate/login/LoginCodeValidate.java

@@ -1,17 +0,0 @@
-package com.sckj.front.validate.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-
-@Data
-@ApiModel("微信登录参数")
-public class LoginCodeValidate {
-
-    @NotNull(message = "code参数缺失")
-    @ApiModelProperty(value = "微信code", required = true)
-    private String code;
-
-}

+ 0 - 29
taphole-front/src/main/java/com/sckj/front/validate/login/LoginPhoneValidate.java

@@ -1,29 +0,0 @@
-package com.sckj.front.validate.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-
-@Data
-@ApiModel("手机号登录参数")
-public class LoginPhoneValidate {
-
-    @NotNull(message = "mobile参数缺失")
-    @NotEmpty(message = "手机号不能为空")
-    @Length(min = 11, max = 11, message = "手机号只能为11位")
-    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
-    @ApiModelProperty(value = "手机号", required = true)
-    private String mobile;
-
-    @NotNull(message = "code参数缺失")
-    @NotEmpty(message = "code不能为空")
-    @Length(min = 4, max = 6, message = "验证码长度不符合")
-    @ApiModelProperty(value = "验证码", required = true)
-    private String code;
-
-}

+ 0 - 24
taphole-front/src/main/java/com/sckj/front/validate/login/LoginPwdValidate.java

@@ -1,24 +0,0 @@
-package com.sckj.front.validate.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-
-@Data
-@ApiModel("账号登录参数")
-public class LoginPwdValidate {
-
-    @NotNull(message = "username参数缺失")
-    @NotEmpty(message = "账号不能为空")
-    @ApiModelProperty(value = "登录账号", required = true)
-    private String username;
-
-    @NotNull(message = "password参数缺失")
-    @NotEmpty(message = "密码不能为空")
-    @ApiModelProperty(value = "登录密码", required = true)
-    private String password;
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/validate/login/LoginScanValidate.java

@@ -1,27 +0,0 @@
-package com.sckj.front.validate.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("扫码登录验证")
-public class LoginScanValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "code参数缺失")
-    @NotEmpty(message = "code不能为空")
-    @ApiModelProperty(value = "微信code", required = true)
-    private String code;
-
-    @NotNull(message = "二维码已失效或不存在,请重新操作")
-    @NotEmpty(message = "二维码已失效或不存在,请重新操作")
-    @ApiModelProperty(value = "state码", required = true)
-    private String state;
-
-}

+ 0 - 32
taphole-front/src/main/java/com/sckj/front/validate/login/RegisterValidate.java

@@ -1,32 +0,0 @@
-package com.sckj.front.validate.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.io.Serializable;
-
-@Data
-@ApiModel("注册账号参数")
-public class RegisterValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "username参数缺失")
-    @NotEmpty(message = "账号不能为空")
-    @Length(min = 3, max = 12, message = "账号必须在3~12个字符内")
-    @Pattern(message = "账号应该为3-12位数字、字母组合", regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{3,12}$")
-    @ApiModelProperty(value = "登录账号", required = true)
-    private String username;
-
-    @NotNull(message = "password参数缺失")
-    @NotEmpty(message = "密码不能为空")
-    @Length(min = 6, max = 12, message = "密码必须在6~12个字符内")
-    @ApiModelProperty(value = "登录密码", required = true)
-    private String password;
-
-}

+ 0 - 24
taphole-front/src/main/java/com/sckj/front/validate/users/NewUserUpdateValidate.java

@@ -1,24 +0,0 @@
-package com.sckj.front.validate.users;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("新用户更新信息参数")
-public class NewUserUpdateValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "昵称参数缺失")
-    @ApiModelProperty(value = "昵称", required = true)
-    private String nickname;
-
-    @NotNull(message = "头像参数缺失")
-    @ApiModelProperty(value = "头像", required = true)
-    private String avatar;
-
-}

+ 0 - 20
taphole-front/src/main/java/com/sckj/front/validate/users/UserBindWechatValidate.java

@@ -1,20 +0,0 @@
-package com.sckj.front.validate.users;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("绑定微信小程序或公众号")
-public class UserBindWechatValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "code参数缺失")
-    @ApiModelProperty(value = "微信code", required = true)
-    private String code;
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/validate/users/UserChangePwdValidate.java

@@ -1,27 +0,0 @@
-package com.sckj.front.validate.users;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.io.Serializable;
-
-@Data
-@ApiModel("修改密码参数")
-public class UserChangePwdValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "password参数缺失")
-    @Pattern(message = "密码必须是6-20字母+数字组合!", regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$")
-    @ApiModelProperty(value = "新密码", required = true)
-    private String password;
-
-    @NotNull(message = "oldPassword参数缺失")
-    @NotNull(message = "旧密码不能为空")
-    @ApiModelProperty(value = "旧密码", required = true)
-    private String oldPassword="";
-
-}

+ 0 - 36
taphole-front/src/main/java/com/sckj/front/validate/users/UserForgetPwdValidate.java

@@ -1,36 +0,0 @@
-package com.sckj.front.validate.users;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.io.Serializable;
-
-@Data
-@ApiModel("忘记密码参数")
-public class UserForgetPwdValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "mobile参数缺失")
-    @NotEmpty(message = "手机号不能为空")
-    @Length(min = 11, max = 11, message = "手机号只能为11位")
-    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
-    @ApiModelProperty(value = "手机号", required = true)
-    private String mobile;
-
-    @NotNull(message = "code参数缺失")
-    @NotEmpty(message = "验证码不能为空")
-    @ApiModelProperty(value = "验证码", required = true)
-    private String code;
-
-    @NotNull(message = "password参数缺失")
-    @NotEmpty(message = "新密码不能为空")
-    @ApiModelProperty(value = "新密码", required = true)
-    private String password;
-
-}

+ 0 - 37
taphole-front/src/main/java/com/sckj/front/validate/users/UserPhoneBindValidate.java

@@ -1,37 +0,0 @@
-package com.sckj.front.validate.users;
-
-import com.sckj.common.validator.annotation.StringContains;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.io.Serializable;
-
-@Data
-@ApiModel("绑定手机参数")
-public class UserPhoneBindValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "type参数缺失")
-    @StringContains(values = {"bind", "change"})
-    @ApiModelProperty(value = "操作类型", required = true, example = "bind=绑定,change=修改")
-    private String type;
-
-    @NotNull(message = "mobile参数缺失")
-    @NotEmpty(message = "手机号不能为空")
-    @Length(min = 11, max = 11, message = "手机号只能为11位")
-    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")
-    @ApiModelProperty(value = "手机号", required = true)
-    private String mobile;
-
-    @NotNull(message = "code参数缺失")
-    @NotEmpty(message = "验证码不能为空")
-    @ApiModelProperty(value = "验证码", required = true)
-    private String code;
-
-}

+ 0 - 20
taphole-front/src/main/java/com/sckj/front/validate/users/UserPhoneMnpValidate.java

@@ -1,20 +0,0 @@
-package com.sckj.front.validate.users;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("微信手机参数")
-public class UserPhoneMnpValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "code参数缺失")
-    @ApiModelProperty(value = "微信code", required = true)
-    private String code;
-
-}

+ 0 - 26
taphole-front/src/main/java/com/sckj/front/validate/users/UserUpdateValidate.java

@@ -1,26 +0,0 @@
-package com.sckj.front.validate.users;
-
-import com.sckj.common.validator.annotation.StringContains;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-import java.io.Serializable;
-
-@Data
-@ApiModel("用户更新参数")
-public class UserUpdateValidate implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @NotNull(message = "field参数缺失")
-    @StringContains(values = {"avatar", "username", "nickname", "sex"})
-    @ApiModelProperty(value = "操作字段", required = true, example = "avatar,username,nickname,sex")
-    private String field;
-
-    @NotNull(message = "value参数缺失")
-    @ApiModelProperty(value = "变更的值", required = true)
-    private String value;
-
-}

+ 0 - 25
taphole-front/src/main/java/com/sckj/front/vo/RechargeConfigVo.java

@@ -1,25 +0,0 @@
-package com.sckj.front.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel(value = "充值配置Vo")
-public class RechargeConfigVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty("是否开启充值: 0=否,1=是")
-    private Integer openRecharge;
-
-    @ApiModelProperty("最低充值金额")
-    private BigDecimal minRechargeMoney;
-
-    @ApiModelProperty("用户钱包")
-    private BigDecimal userMoney;
-
-}

+ 0 - 31
taphole-front/src/main/java/com/sckj/front/vo/RechargeRecordVo.java

@@ -1,31 +0,0 @@
-package com.sckj.front.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel(value = "充值记录Vo")
-public class RechargeRecordVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "金额")
-    private BigDecimal orderAmount;
-
-    @ApiModelProperty(value = "描述")
-    private String tips;
-
-    @ApiModelProperty(value = "操作")
-    private Integer action;
-
-    @ApiModelProperty(value = "时间")
-    private String createTime;
-
-}

+ 0 - 21
taphole-front/src/main/java/com/sckj/front/vo/article/ArticleCateVo.java

@@ -1,21 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "文章分类Vo")
-public class ArticleCateVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "分类ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "分类名称")
-    private String name;
-
-}

+ 0 - 36
taphole-front/src/main/java/com/sckj/front/vo/article/ArticleCollectVo.java

@@ -1,36 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "文章收藏Vo")
-public class ArticleCollectVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "收藏主键")
-    private Integer id;
-
-    @ApiModelProperty(value = "文章ID")
-    private Integer articleId;
-
-    @ApiModelProperty(value = "文章标题")
-    private String title;
-
-    @ApiModelProperty(value = "文章封面")
-    private String image;
-
-    @ApiModelProperty(value = "文章简介")
-    private String intro;
-
-    @ApiModelProperty(value = "浏览数量")
-    private Integer visit;
-
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
-
-}

+ 0 - 45
taphole-front/src/main/java/com/sckj/front/vo/article/ArticleDetailVo.java

@@ -1,45 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "文章详情Vo")
-public class ArticleDetailVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "文章ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "文章标题")
-    private String title;
-
-    @ApiModelProperty(value = "文章封面")
-    private String image;
-
-    @ApiModelProperty(value = "文章简介")
-    private String intro;
-
-    @ApiModelProperty(value = "文章描述")
-    private String summary;
-
-    @ApiModelProperty(value = "浏览数量")
-    private Integer visit;
-
-    @ApiModelProperty(value = "作者名称")
-    private String author;
-
-    @ApiModelProperty(value = "是否收藏")
-    private Boolean collect;
-
-    @ApiModelProperty(value = "文章内容")
-    private String content;
-
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
-
-}

+ 0 - 36
taphole-front/src/main/java/com/sckj/front/vo/article/ArticleListedVo.java

@@ -1,36 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "文章列表Vo")
-public class ArticleListedVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "文章ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "文章标题")
-    private String title;
-
-    @ApiModelProperty(value = "文章封面")
-    private String image;
-
-    @ApiModelProperty(value = "文章简介")
-    private String intro;
-
-    @ApiModelProperty(value = "浏览数量")
-    private Integer visit;
-
-    @ApiModelProperty(value = "是否收藏")
-    private Boolean collect;
-
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
-
-}

+ 0 - 22
taphole-front/src/main/java/com/sckj/front/vo/article/PcArticleCenterVo.java

@@ -1,22 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "PC资讯中心Vo")
-public class PcArticleCenterVo implements Serializable {
-
-    @ApiModelProperty(value = "ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "名称")
-    private String name;
-
-    @ApiModelProperty(value = "文章")
-    private Object article;
-
-}

+ 0 - 64
taphole-front/src/main/java/com/sckj/front/vo/article/PcArticleDetailVo.java

@@ -1,64 +0,0 @@
-package com.sckj.front.vo.article;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "PC文章详情Vo")
-public class PcArticleDetailVo implements Serializable {
-
-    @ApiModelProperty(value = "文章ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "分类ID")
-    private Integer cid;
-
-    @ApiModelProperty(value = "分类名称")
-    private String category;
-
-    @ApiModelProperty(value = "文章标题")
-    private String title;
-
-    @ApiModelProperty(value = "文章简介")
-    private String intro;
-
-    @ApiModelProperty(value = "文章描述")
-    private String summary;
-
-    @ApiModelProperty(value = "文章封面")
-    private String image;
-
-    @ApiModelProperty(value = "文章内容")
-    private String content;
-
-    @ApiModelProperty(value = "文章作者")
-    private String author;
-
-    @ApiModelProperty(value = "浏览数量")
-    private Integer visit;
-
-    @ApiModelProperty(value = "排序编号")
-    private Integer sort;
-
-    @ApiModelProperty(value = "是否收藏")
-    private Integer isCollect;
-
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
-
-    @ApiModelProperty(value = "更新时间")
-    private String updateTime;
-
-    @ApiModelProperty(value = "上一页")
-    private Object prev;
-
-    @ApiModelProperty(value = "下一页")
-    private Object next;
-
-    @ApiModelProperty(value = "最新推荐")
-    private Object news;
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/vo/login/LoginTokenVo.java

@@ -1,27 +0,0 @@
-package com.sckj.front.vo.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "系统登录Vo")
-public class LoginTokenVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "用户ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "绑定手机")
-    private Boolean isBindMobile;
-
-    @ApiModelProperty(value = "登录令牌")
-    private String token;
-
-    @ApiModelProperty(value = "是否为新用户")
-    private Integer isNew;
-
-}

+ 0 - 18
taphole-front/src/main/java/com/sckj/front/vo/login/LoginUrlsVo.java

@@ -1,18 +0,0 @@
-package com.sckj.front.vo.login;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "跳转链接Vo")
-public class LoginUrlsVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "http链接")
-    private String url;
-
-}

+ 0 - 34
taphole-front/src/main/java/com/sckj/front/vo/pay/PayStatusVo.java

@@ -1,34 +0,0 @@
-package com.sckj.front.vo.pay;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel(value = "支付状态Vo")
-public class PayStatusVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "支付状态: [0=待支付, 1=已支付]")
-    private Integer payStatus;
-
-    @ApiModelProperty(value = "支付状态: [0=待支付, 1=已支付]")
-    private String payWay;
-
-    @ApiModelProperty(value = "支付时间")
-    private String payTime;
-
-    @ApiModelProperty(value = "订单ID")
-    private Integer orderId;
-
-    @ApiModelProperty(value = "订单编号")
-    private String orderSn;
-
-    @ApiModelProperty(value = "订单金额")
-    private BigDecimal orderAmount;
-
-}

+ 0 - 27
taphole-front/src/main/java/com/sckj/front/vo/pay/PayWayInfoVo.java

@@ -1,27 +0,0 @@
-package com.sckj.front.vo.pay;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "支付方式信息Vo")
-public class PayWayInfoVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "名称")
-    private String name;
-
-    @ApiModelProperty(value = "图标")
-    private String icon;
-
-    @ApiModelProperty(value = "是否默认: [0=否, 1=是]")
-    private Integer isDefault;
-
-}

+ 0 - 21
taphole-front/src/main/java/com/sckj/front/vo/pay/PayWayListVo.java

@@ -1,21 +0,0 @@
-package com.sckj.front.vo.pay;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-@ApiModel(value = "支付方式列表Vo")
-public class PayWayListVo implements Serializable {
-
-    @ApiModelProperty(value = "订单金额")
-    private BigDecimal orderAmount;
-
-    @ApiModelProperty(value = "方式列表")
-    private List<PayWayInfoVo> list;
-
-}

+ 0 - 49
taphole-front/src/main/java/com/sckj/front/vo/user/UserCenterVo.java

@@ -1,49 +0,0 @@
-package com.sckj.front.vo.user;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-
-@Data
-@ApiModel(value = "个人中心Vo")
-public class UserCenterVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "用户ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "用户编号")
-    private Integer sn;
-
-    @ApiModelProperty(value = "用户头像")
-    private String avatar;
-
-    @ApiModelProperty(value = "真实姓名")
-    private String realName;
-
-    @ApiModelProperty(value = "用户昵称")
-    private String nickname;
-
-    @ApiModelProperty(value = "用户账号")
-    private String username;
-
-    @ApiModelProperty(value = "手机号码")
-    private String mobile;
-
-    @ApiModelProperty(value = "钱包余额")
-    private BigDecimal money;
-
-    @ApiModelProperty(value = "是否新用户")
-    private Integer isNew;
-
-    @ApiModelProperty(value = "是否绑定微信")
-    private Boolean isBindWechat;
-
-    @ApiModelProperty(value = "是否有设置登录密码")
-    private Boolean hasPwd;
-
-}

+ 0 - 65
taphole-front/src/main/java/com/sckj/front/vo/user/UserInfoVo.java

@@ -1,65 +0,0 @@
-package com.sckj.front.vo.user;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-@ApiModel(value = "个人信息Vo")
-public class UserInfoVo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "用户ID")
-    private Integer id;
-
-    @ApiModelProperty(value = "用户编号")
-    private Integer sn;
-
-    @ApiModelProperty(value = "用户头像")
-    private String avatar;
-
-    @ApiModelProperty(value = "真实姓名")
-    private String realName;
-
-    @ApiModelProperty(value = "用户昵称")
-    private String nickname;
-
-    @ApiModelProperty(value = "用户账号")
-    private String username;
-
-    @ApiModelProperty(value = "手机号码")
-    private String mobile;
-
-    @ApiModelProperty(value = "用户性别")
-    private String sex;
-
-    @ApiModelProperty(value = "是否设置密码")
-    private Boolean isPassword;
-
-    @ApiModelProperty(value = "是否绑定微信")
-    private Boolean isBindMnp;
-
-    @ApiModelProperty(value = "版本信息")
-    private String version;
-
-    @ApiModelProperty(value = "创建时间")
-    private String createTime;
-
-    public void setSex(Integer sex) {
-        switch (sex) {
-            case 0:
-                this.sex = "未知";
-                break;
-            case 1:
-                this.sex = "男";
-                break;
-            case 2:
-                this.sex = "女";
-                break;
-        }
-    }
-
-}

+ 0 - 19
taphole-front/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@@ -1,19 +0,0 @@
-{
-  "properties": [
-    {
-      "name": "like.upload-directory",
-      "type": "java.lang.String",
-      "description": "Description for like.upload-directory."
-    },
-    {
-      "name": "like.swagger.enabled",
-      "type": "java.lang.String",
-      "description": "Description for like.swagger.enabled."
-    },
-    {
-      "name": "like.swagger.pathMapping",
-      "type": "java.lang.String",
-      "description": "Description for like.swagger.pathMapping."
-    }
-  ]
-}

+ 0 - 24
taphole-front/src/main/resources/application-dev-example.yml

@@ -1,24 +0,0 @@
-# 项目配置
-like:
-  upload-directory: /www/uploads/likeadmin-java/ # 上传目录
-
-# 框架配置
-spring:
-  # 数据源配置
-  datasource:
-    url: jdbc:mysql://localhost:3306/【库名称】?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
-    type: com.zaxxer.hikari.HikariDataSource # 数据源类型
-    driver-class-name: com.mysql.jdbc.Driver # MySql的驱动
-    username: root # 数据库账号
-    password: root # 数据库密码
-  # Redis配置
-  redis:
-    host: localhost   # Redis服务地址
-    port: 6379        # Redis端口
-    password:         # Redis密码
-    database: 0       # 数据库索引
-
-# Mybatis-plus配置 【是否开启SQL日志输出】
-#mybatis-plus:
-#    configuration:
-#      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 0 - 83
taphole-front/src/main/resources/application.yml

@@ -1,83 +0,0 @@
-# 项目配置
-like:
-  # 上传目录
-  upload-directory: /www/uploads/likeadmin-java/
-  # Swagger配置
-  swagger:
-    # 是否开启swagger
-    enabled: true
-    # 请求前缀
-    pathMapping: /dev-api
-
-# 服务配置
-server:
-  port: 8084
-#  servlet:
-#    context-path: /
-
-# 框架配置
-spring:
-  profiles:
-    active: dev
-  mvc:
-    static-path-pattern: /api/static/**
-    throw-exception-if-no-handler-found: true
-    pathmatch:
-      matching-strategy: ant_path_matcher
-  # 数据源配置
-  datasource:
-    url: jdbc:mysql://localhost:3306/local_likeadmin?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
-    type: com.zaxxer.hikari.HikariDataSource # 数据源类型
-    driver-class-name: com.mysql.jdbc.Driver # MySql的驱动
-    username: root # 数据库账号
-    password: root # 数据库密码
-    hikari:
-      connection-timeout: 30000     # 等待连接分配连接的最大时长(毫秒),超出时长还没可用连接则发送SQLException,默认30秒
-      minimum-idle: 5               # 最小连接数
-      maximum-pool-size: 20         # 最大连接数
-      auto-commit: true             # 自动提交
-      idle-timeout: 600000          # 连接超时的最大时长(毫秒),超时则被释放(retired),默认10分钟
-      pool-name: DateSourceHikariCP # 连接池名称
-      max-lifetime: 1800000         # 连接的生命时长(毫秒),超时而且没被使用则被释放,默认30分钟(1800000ms)
-      connection-init-sql: SELECT 1 # 连接时发起SQL测试脚本
-  # 限制配置
-  servlet:
-    multipart:
-      max-file-size: 100MB    # 文件上传大小限制
-      max-request-size: 100MB # 文件最大请求限制
-      enabled: true
-  # Redis配置
-  redis:
-    host: localhost   # Redis服务地址
-    port: 6379        # Redis端口
-    password:         # Redis密码
-    database: 0       # 数据库索引
-    timeout: 5000     # 连接超时
-    lettuce:
-      pool:
-        max-wait: 30000 # 连接池最大阻塞等待时间(使用负数表示没有限制,默认-1)
-        max-active: 100 # 连接池最大连接数(使用负数表示没有限制,默认8)
-        max-idle: 20    # 连接池中的最大空闲连接(默认8)
-        min-idle: 0     # 连接池中的最小空闲连接(默认0)
-
-# Mybatis-plus配置
-mybatis-plus:
-  mapper-locations: classpath*:/mapper/**Mapper.xml
-  typeAliasesPackage: com.mdd.**.mapper
-  global-config:
-    banner: false
-    db-config:
-      table-prefix: la_
-  configuration-properties:
-    prefix: la_
-
-# Sa-token配置
-sa-token:
-  token-name: like-token  # token的名称
-  timeout: 2592000        # token有效期单位s(默认30天,-1代表永不过期)
-  activity-timeout: -1    # token临时有效期(指定时间无操作掉线)
-  is-concurrent: true     # 是否允许同一账号并发登录
-  is-share: false         # 多人同登账号共用token
-  token-style: random-64  # token生成的风格
-  is-print: false         # 打印版本字符画
-  is-log: false           # 是否输出操作日志

+ 0 - 10
taphole-front/src/main/resources/banner.txt

@@ -1,10 +0,0 @@
-Spring Boot Version: ${spring-boot.version}
-///////////////////////////////////////////////////////
-//   _     _ _        _       _           _          //
-//  | |   (_) | __   / \   __| |_ __ ___ (_)_ __     //
-//  | |   | | |/ /  / _ \ / _` | '_ ` _ \| | '_ \    //
-//  | |___| |   <  / ___ \ (_| | | | | | | | | | |   //
-//  |_____|_|_|\_\/_/   \_\__,_|_| |_| |_|_|_| |_|   //
-//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    //
-//       佛祖保佑       永不宕机      永无BUG         //
-//////////////////////////////////////////////////////

+ 0 - 80
taphole-front/src/main/resources/log4j2-spring.xml

@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- 日志级别排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
-<configuration monitorInterval="5">
-
-    <!-- 变量配置 -->
-    <Properties>
-        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
-        <property name="FILE_PATH" value="./logs/front" />
-        <property name="FILE_NAME" value="front-log4j2" />
-    </Properties>
-
-    <appenders>
-        <!-- 控制台输出 -->
-        <console name="Console" target="SYSTEM_OUT">
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
-        </console>
-
-        <!-- 临时测试日志 -->
-        <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-        </File>
-
-        <!-- Info日志分割压缩 -->
-        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
-            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-
-        <!-- warn日志分割压缩 -->
-        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
-            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-
-        <!-- error日志分割压缩 -->
-        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
-            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-            <Policies>
-                <TimeBasedTriggeringPolicy interval="1"/>
-                <SizeBasedTriggeringPolicy size="10MB"/>
-            </Policies>
-            <DefaultRolloverStrategy max="15"/>
-        </RollingFile>
-    </appenders>
-
-    <loggers>
-        <!-- 过滤指定DEBUG信息 -->
-        <logger name="org.mybatis" level="info" additivity="false">
-            <AppenderRef ref="Console"/>
-        </logger>
-
-        <!-- 监控系统信息 -->
-        <Logger name="org.springframework" level="info" additivity="false">
-            <AppenderRef ref="Console"/>
-        </Logger>
-
-        <!-- 初始化日志 -->
-        <root level="info">
-            <appender-ref ref="Console"/>
-            <appender-ref ref="Filelog"/>
-            <appender-ref ref="RollingFileInfo"/>
-            <appender-ref ref="RollingFileWarn"/>
-            <appender-ref ref="RollingFileError"/>
-        </root>
-    </loggers>
-
-</configuration>

+ 8 - 0
taphole-iron/src/main/java/com/sckj/iron/controller/TCameraController.java

@@ -252,6 +252,14 @@ public class TCameraController {
         return AjaxResult.success(list);
     }
 
+    @GetMapping("/getCameras")
+    @ApiOperation(value = "摄像头列表")
+    public AjaxResult<PageResult<TCameraListedVo>> getCameras(@Validated PageValidate pageValidate,
+                                                        @Validated TCameraSearchValidate searchValidate) {
+        PageResult<TCameraListedVo> list = iTCameraService.getCameras(pageValidate, searchValidate);
+        return AjaxResult.success(list);
+    }
+
     @GetMapping("/detail")
     @ApiOperation(value = "摄像头详情")
     public AjaxResult<TCameraDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {

+ 56 - 5
taphole-iron/src/main/java/com/sckj/iron/controller/TIronModelController.java

@@ -1,20 +1,71 @@
 package com.sckj.iron.controller;
 
+import com.sckj.common.aop.Log;
+import com.sckj.common.core.AjaxResult;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.validate.commons.IdValidate;
+import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.common.validator.annotation.IDMust;
 import com.sckj.iron.service.impl.TIronModelServiceImpl;
+import com.sckj.iron.validate.*;
+import com.sckj.iron.vo.TIronModelDetailVo;
+import com.sckj.iron.vo.TIronModelListedVo;
+import com.sckj.iron.vo.TIronParamDetailVo;
+import com.sckj.iron.vo.TIronParamListedVo;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 @RestController
-@RequestMapping("api/param")
-@Api(tags = "参数设定管理")
+@RequestMapping("api/model")
+@Api(tags = "出铁相关模型")
 public class TIronModelController {
 
+
     @Resource
-    TIronModelServiceImpl ironModelService;
+    TIronModelServiceImpl iTIronModelService;
+
+    @GetMapping("/list")
+    @ApiOperation(value = "出铁相关模型列表")
+    public AjaxResult<PageResult<TIronModelListedVo>> list(@Validated PageValidate pageValidate,
+                                                           @Validated TIronModelSearchValidate searchValidate) {
+        PageResult<TIronModelListedVo> list = iTIronModelService.list(pageValidate, searchValidate);
+        return AjaxResult.success(list);
+    }
+
+    @GetMapping("/detail")
+    @ApiOperation(value = "出铁相关模型详情")
+    public AjaxResult<TIronModelDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
+        TIronModelDetailVo detail = iTIronModelService.detail(id);
+        return AjaxResult.success(detail);
+    }
+
+    @Log(title = "出铁相关模型新增")
+    @PostMapping("/add")
+    @ApiOperation(value = "出铁相关模型新增")
+    public AjaxResult<Object> add(@Validated @RequestBody TIronModelCreateValidate createValidate) {
+        iTIronModelService.add(createValidate);
+        return AjaxResult.success();
+    }
 
+    @Log(title = "出铁相关模型编辑")
+    @PostMapping("/edit")
+    @ApiOperation(value = "出铁相关模型编辑")
+    public AjaxResult<Object> edit(@Validated @RequestBody TIronModelUpdateValidate updateValidate) {
+        iTIronModelService.edit(updateValidate);
+        return AjaxResult.success();
+    }
 
+    @Log(title = "出铁相关模型删除")
+    @PostMapping("/del")
+    @ApiOperation(value = "出铁相关模型删除")
+    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
+        iTIronModelService.del(idValidate.getId());
+        return AjaxResult.success();
+    }
 
 }

+ 71 - 22
taphole-iron/src/main/java/com/sckj/iron/controller/TIronStepController.java

@@ -5,8 +5,17 @@ import com.sckj.common.aop.Log;
 import com.sckj.common.aop.NotLogin;
 import com.sckj.common.aop.NotPower;
 import com.sckj.common.core.AjaxResult;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.validate.commons.IdValidate;
+import com.sckj.common.validate.commons.PageValidate;
+import com.sckj.common.validator.annotation.IDMust;
 import com.sckj.iron.entity.TIronStep;
 import com.sckj.iron.service.impl.TIronStepServiceImpl;
+import com.sckj.iron.validate.TIronStepCreateValidate;
+import com.sckj.iron.validate.TIronStepSearchValidate;
+import com.sckj.iron.validate.TIronStepUpdateValidate;
+import com.sckj.iron.vo.TIronStepDetailVo;
+import com.sckj.iron.vo.TIronStepListedVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.validation.annotation.Validated;
@@ -23,6 +32,46 @@ public class TIronStepController {
     @Resource
     TIronStepServiceImpl iTIronStepService;
 
+    @GetMapping("/list")
+    @ApiOperation(value="出铁步骤配置列表")
+    public AjaxResult<PageResult<TIronStepListedVo>> list(@Validated PageValidate pageValidate,
+                                                          @Validated TIronStepSearchValidate searchValidate) {
+        PageResult<TIronStepListedVo> list = iTIronStepService.list(pageValidate, searchValidate);
+        return AjaxResult.success(list);
+    }
+
+    @GetMapping("/detail")
+    @ApiOperation(value="出铁步骤配置详情")
+    public AjaxResult<TIronStepDetailVo> detail(@Validated @IDMust() @RequestParam("id") String id) {
+        TIronStepDetailVo detail = iTIronStepService.detail(id);
+        return AjaxResult.success(detail);
+    }
+
+    @Log(title = "出铁步骤配置新增")
+    @PostMapping("/add")
+    @ApiOperation(value="出铁步骤配置新增")
+    public AjaxResult<Object> add(@Validated @RequestBody TIronStepCreateValidate createValidate) {
+        iTIronStepService.add(createValidate);
+        return AjaxResult.success();
+    }
+
+    @Log(title = "出铁步骤配置编辑")
+    @PostMapping("/edit")
+    @ApiOperation(value="出铁步骤配置编辑")
+    public AjaxResult<Object> edit(@Validated @RequestBody TIronStepUpdateValidate updateValidate) {
+        iTIronStepService.edit(updateValidate);
+        return AjaxResult.success();
+    }
+
+    @Log(title = "出铁步骤配置删除")
+    @PostMapping("/del")
+    @ApiOperation(value="出铁步骤配置删除")
+    public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
+        iTIronStepService.del(idValidate.getId());
+        return AjaxResult.success();
+    }
+
+
     @GetMapping("/getTreeSteps")
     @ApiOperation(value = "获取步骤")
     public AjaxResult getTreeSteps() {
@@ -68,28 +117,28 @@ public class TIronStepController {
         return AjaxResult.success(LocalDateTime.now());
     }
 
-    @Log(title = "新增或者更新")
-    @PostMapping("/saveOrUpdate")
-    @ApiOperation(value = "新增或者更新")
-    public AjaxResult saveOrUpdate(@Validated @RequestBody TIronStep tIronStep) {
-        iTIronStepService.saveOrUpdate(tIronStep);
-        return AjaxResult.success();
-    }
-
-    @Log(title = "删除")
-    @PostMapping("/del")
-    @ApiOperation(value = "删除")
-    public AjaxResult del(@Validated @RequestBody TIronStep tIronStep) {
-        iTIronStepService.removeById(tIronStep);
-        return AjaxResult.success();
-    }
-
-    @GetMapping("/detail")
-    @ApiOperation(value="详情")
-    public AjaxResult detail(TIronStep tIronStep) {
-        TIronStep detail = iTIronStepService.getById(tIronStep.getStepId());
-        return AjaxResult.success(detail);
-    }
+//    @Log(title = "新增或者更新")
+//    @PostMapping("/saveOrUpdate")
+//    @ApiOperation(value = "新增或者更新")
+//    public AjaxResult saveOrUpdate(@Validated @RequestBody TIronStep tIronStep) {
+//        iTIronStepService.saveOrUpdate(tIronStep);
+//        return AjaxResult.success();
+//    }
+//
+//    @Log(title = "删除")
+//    @PostMapping("/del")
+//    @ApiOperation(value = "删除")
+//    public AjaxResult del(@Validated @RequestBody TIronStep tIronStep) {
+//        iTIronStepService.removeById(tIronStep);
+//        return AjaxResult.success();
+//    }
+//
+//    @GetMapping("/detail")
+//    @ApiOperation(value="详情")
+//    public AjaxResult detail(TIronStep tIronStep) {
+//        TIronStep detail = iTIronStepService.getById(tIronStep.getStepId());
+//        return AjaxResult.success(detail);
+//    }
 
 
 }

+ 3 - 0
taphole-iron/src/main/java/com/sckj/iron/entity/TIronModel.java

@@ -48,6 +48,9 @@ public class TIronModel implements Serializable {
     @ApiModelProperty(value = "参数说明")
     private String modelDesc;
 
+    @ApiModelProperty(value = "模型存储位置")
+    private String modelPath;
+
     @ApiModelProperty(value = "状态(1正常 0停用)")
     private String status;
 

+ 22 - 25
taphole-iron/src/main/java/com/sckj/iron/entity/TIronStepLog.java

@@ -1,62 +1,50 @@
 package com.sckj.iron.entity;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
 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 com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import nonapi.io.github.classgraph.json.Id;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 @Data
 @ApiModel("出铁步骤日志记录")
 @TableName("t_iron_step_log")
-public class TIronStepLog implements Serializable {
+public class TIronStepLog  implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+//    @TableId(value = "step_log_id", type = IdType.INPUT)
+    @ApiModelProperty(value = "自增主键")
+    private String stepLogId;
+
     @ApiModelProperty(value = "创建人")
     private String createBy;
 
     @ApiModelProperty(value = "创建时间")
     private String createTime;
 
-
-    @TableId(value="step_id", type= IdType.INPUT)
-    @ApiModelProperty(value = "stepId")
+    @ApiModelProperty(value = "步骤编号")
     private String stepId;
 
-    @ApiModelProperty(value = "是否流程必须项(0否 1是)")
-    private String required;
-
     @ApiModelProperty(value = "步骤名称")
     private String stepName;
 
-    @ApiModelProperty(value = "通过条件")
-    private String stepCondition;
-
-    @ApiModelProperty(value = "节点类型(start、end、node、child)")
-    private String nodeType;
-
-    @ApiModelProperty(value = "状态(1正常 0停用)")
-    private String status;
-
-    @ApiModelProperty(value = "确认方式(1自动 2手动)")
-    private String confirmMode;
-
     @ApiModelProperty(value = "唯一名称")
     private String identifier;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "订阅点名称(通道.设备.标识)")
-    private String pointName;
-
-    @ApiModelProperty(value = "步骤名称表达式")
-    private String stepNameExpression;
-
     @ApiModelProperty(value = "数据内容")
     private Object data;
 
@@ -66,4 +54,13 @@ public class TIronStepLog implements Serializable {
     @ApiModelProperty(value = "通过结果(1通过、0未通过)")
     private int passResult;
 
+    @ApiModelProperty(value = "锅炉编号")
+    @ExcelIgnore
+    private Long boilerId;
+
+    @ApiModelProperty(value = "铁口区域编号")
+    @ExcelProperty("铁口区域编号")
+    @ColumnWidth(25)
+    private Long tapholeId;
+
 }

+ 1 - 1
taphole-iron/src/main/java/com/sckj/iron/manager/hik/HCNetSDK.java

@@ -42,7 +42,7 @@ public interface HCNetSDK extends  Library {
 	 * @return
 	 */
 	static String getLibPath(){
-		return  isWindows() ? System.getProperty("user.dir") + "\\taphole-camera\\src\\main\\resources\\lib\\win\\HCNetSDK.dll":"/home/xiaofei/taphole/hcsdk/linux/libhcnetsdk.so";
+		return  isWindows() ? System.getProperty("user.dir") + "\\taphole-iron\\src\\main\\resources\\lib\\win\\HCNetSDK.dll":"/home/xiaofei/taphole/hcsdk/linux/libhcnetsdk.so";
 	}
 
 	HCNetSDK INSTANCE =  (HCNetSDK)Native.loadLibrary(getLibPath(),HCNetSDK.class);

+ 3 - 0
taphole-iron/src/main/java/com/sckj/iron/mapper/TIronStepLogMapper.java

@@ -3,6 +3,7 @@ package com.sckj.iron.mapper;
 import com.sckj.common.core.basics.IBaseMapper;
 import com.sckj.iron.entity.TIronStep;
 import com.sckj.iron.entity.TIronStepLog;
+import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
@@ -11,4 +12,6 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface TIronStepLogMapper extends IBaseMapper<TIronStepLog> {
+
+    int insertOrUpdate(TIronStepLog step);
 }

+ 81 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TCameraServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckj.common.TapholeAdminThreadLocal;
 import com.sckj.common.aop.CameraLogin;
+import com.sckj.common.config.GlobalConfig;
 import com.sckj.common.core.AjaxResult;
 import com.sckj.common.core.PageResult;
 import com.sckj.common.exception.OperateException;
@@ -33,6 +34,7 @@ import com.sckj.iron.manager.hik.HCNetTools;
 import com.sckj.iron.mapper.TCameraMapper;
 import com.sckj.iron.util.HikCameraUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -43,6 +45,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -102,10 +105,88 @@ public class TCameraServiceImpl extends ServiceImpl<TCameraMapper, TCamera> {
         IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
 
         List<TCameraListedVo> list = new LinkedList<>();
+
+        HCNetTools hcNetTools = new HCNetTools();
+
         for (TCamera item : iPage.getRecords()) {
             TCameraListedVo vo = new TCameraListedVo();
             BeanUtils.copyProperties(item, vo);
             vo.setAddress("rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPort() + "/102");
+
+            int result = hcNetTools.deviceLogin(item.getIp(), item.getPort(), item.getAccount(), item.getPassword());
+            if (result > -1) {
+                vo.setOnlineStatus("1");
+
+//                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+//                String name = dtf.format(LocalDateTime.now()) + ".jpg";
+//                String path = "/picture/" + item.getIp().replace(".", "") + "/";
+//                String filePath = YmlUtils.get("like.upload-directory") + path + name;
+//                if(ObjectUtils.isNotEmpty(hcNetTools.getChannelNumber())){
+//                    boolean dvrPic = hcNetTools.getDVRPic(HikCameraUtils.analyzeChannel(hcNetTools.getChannelNumber().get(0)), filePath);
+//                    if (dvrPic) {
+//                        vo.setCatchPicUrl(path + name);
+//                    }
+//                }
+            } else {
+                vo.setOnlineStatus("0");
+            }
+
+            list.add(vo);
+        }
+
+        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
+    }
+
+    public PageResult<TCameraListedVo> getCameras(PageValidate pageValidate, TCameraSearchValidate searchValidate) {
+        Integer page = pageValidate.getPageNo();
+        Integer limit = pageValidate.getPageSize();
+
+        QueryWrapper<TCamera> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", "1");
+        queryWrapper.orderByDesc("id");
+
+        tCameraMapper.setSearch(queryWrapper, searchValidate, new String[]{
+                "=:no:str",
+                "like:name:str",
+                "=:model:str",
+        });
+
+        IPage<TCamera> iPage = tCameraMapper.selectPage(new Page<>(page, limit), queryWrapper.eq("type", "1"));
+
+        List<TCameraListedVo> list = new LinkedList<>();
+
+        HCNetTools hcNetTools = new HCNetTools();
+
+        TIronParam webrtc = ironParamService.lambdaQuery().eq(TIronParam::getParamName, "webrtc_url").one();
+
+        for (TCamera item : iPage.getRecords()) {
+            TCameraListedVo vo = new TCameraListedVo();
+            BeanUtils.copyProperties(item, vo);
+            vo.setAddress("rtsp://" + item.getAccount() + ":" + item.getPassword() + "@" + item.getIp() + ":" + item.getPort() + "/102");
+
+            int result = hcNetTools.deviceLogin(item.getIp(), item.getPort(), item.getAccount(), item.getPassword());
+            if (result > -1) {
+                vo.setOnlineStatus("1");
+
+                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+                String name = dtf.format(LocalDateTime.now()) + ".jpg";
+                String path = "/picture/" + item.getIp().replace(".", "") + "/";
+                String filePath = YmlUtils.get("like.upload-directory") + path;
+                try {
+                    FileUtils.createParentDirectories(new File(filePath));
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+                if (ObjectUtils.isNotEmpty(hcNetTools.getChannelNumber())) {
+                    boolean dvrPic = hcNetTools.getDVRPic(HikCameraUtils.analyzeChannel(hcNetTools.getChannelNumber().get(0)), filePath + name);
+                    if (dvrPic) {
+                        vo.setCatchPicUrl("http://192.168.110.65:28080/" + GlobalConfig.publicPrefix + path + name);
+                        vo.setWebrtcUrl(webrtc.getParamValue());
+                    }
+                }
+            } else {
+                vo.setOnlineStatus("0");
+            }
             list.add(vo);
         }
 

+ 140 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronModelServiceImpl.java

@@ -1,11 +1,26 @@
 package com.sckj.iron.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.validate.commons.PageValidate;
 import com.sckj.iron.entity.TIronModel;
 import com.sckj.iron.mapper.TIronModelMapper;
+import com.sckj.iron.validate.TIronModelCreateValidate;
+import com.sckj.iron.validate.TIronModelSearchValidate;
+import com.sckj.iron.validate.TIronModelUpdateValidate;
+import com.sckj.iron.vo.TIronModelDetailVo;
+import com.sckj.iron.vo.TIronModelListedVo;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
  * 参数设定实现类
@@ -18,5 +33,130 @@ public class TIronModelServiceImpl extends ServiceImpl<TIronModelMapper, TIronMo
     @Resource
     TIronModelMapper tIronModelMapper;
 
+    /**
+     * 出铁相关模型列表
+     *
+     * @author LikeAdmin
+     * @param pageValidate 分页参数
+     * @param searchValidate 搜索参数
+     * @return PageResult<TIronModelListedVo>
+     */
+    public PageResult<TIronModelListedVo> list(PageValidate pageValidate, TIronModelSearchValidate searchValidate) {
+        Integer page  = pageValidate.getPageNo();
+        Integer limit = pageValidate.getPageSize();
+
+        QueryWrapper<TIronModel> queryWrapper = new QueryWrapper<>();
+        queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
+
+        tIronModelMapper.setSearch(queryWrapper, searchValidate, new String[]{
+                "like:modelName@model_name:str",
+                "=:modelExpression@model_expression:str",
+                "=:modelDesc@model_desc:str",
+                "=:modelPath@model_path:str",
+                "=:status:str",
+                "=:sort:int",
+                "=:createBy@create_by:str",
+                "=:updateBy@update_by:str",
+                "=:tapholeId@taphole_id:long",
+                "=:boilerId@boiler_id:long",
+        });
+
+        IPage<TIronModel> iPage = tIronModelMapper.selectPage(new Page<>(page, limit), queryWrapper);
+
+        List<TIronModelListedVo> list = new LinkedList<>();
+        for(TIronModel item : iPage.getRecords()) {
+            TIronModelListedVo vo = new TIronModelListedVo();
+            BeanUtils.copyProperties(item, vo);
+            list.add(vo);
+        }
+
+        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
+    }
+
+    /**
+     * 出铁相关模型详情
+     *
+     * @author LikeAdmin
+     * @param id 主键参数
+     * @return TIronModel
+     */
+    public TIronModelDetailVo detail(Integer id) {
+        TIronModel model = tIronModelMapper.selectOne(
+                new QueryWrapper<TIronModel>()
+                        .eq("id", id)
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在");
+
+        TIronModelDetailVo vo = new TIronModelDetailVo();
+        BeanUtils.copyProperties(model, vo);
+        return vo;
+    }
+
+    /**
+     * 出铁相关模型新增
+     *
+     * @author LikeAdmin
+     * @param createValidate 参数
+     */
+    public void add(TIronModelCreateValidate createValidate) {
+        TIronModel model = new TIronModel();
+        model.setModelName(createValidate.getModelName());
+        model.setModelExpression(createValidate.getModelExpression());
+        model.setModelDesc(createValidate.getModelDesc());
+        model.setModelPath(createValidate.getModelPath());
+        model.setStatus(createValidate.getStatus());
+        model.setSort(createValidate.getSort());
+        model.setCreateBy(createValidate.getCreateBy());
+        model.setUpdateBy(createValidate.getUpdateBy());
+        model.setTapholeId(createValidate.getTapholeId());
+        model.setBoilerId(createValidate.getBoilerId());
+        tIronModelMapper.insert(model);
+    }
+
+    /**
+     * 出铁相关模型编辑
+     *
+     * @author LikeAdmin
+     * @param updateValidate 参数
+     */
+    public void edit(TIronModelUpdateValidate updateValidate) {
+        TIronModel model = tIronModelMapper.selectOne(
+                new QueryWrapper<TIronModel>()
+                        .eq("id",  updateValidate.getId())
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        model.setId(updateValidate.getId());
+        model.setModelName(updateValidate.getModelName());
+        model.setModelExpression(updateValidate.getModelExpression());
+        model.setModelDesc(updateValidate.getModelDesc());
+        model.setModelPath(updateValidate.getModelPath());
+        model.setStatus(updateValidate.getStatus());
+        model.setSort(updateValidate.getSort());
+        model.setCreateBy(updateValidate.getCreateBy());
+        model.setUpdateBy(updateValidate.getUpdateBy());
+        model.setTapholeId(updateValidate.getTapholeId());
+        model.setBoilerId(updateValidate.getBoilerId());
+        tIronModelMapper.updateById(model);
+    }
+
+    /**
+     * 出铁相关模型删除
+     *
+     * @author LikeAdmin
+     * @param id 主键ID
+     */
+    public void del(Integer id) {
+        TIronModel model = tIronModelMapper.selectOne(
+                new QueryWrapper<TIronModel>()
+                        .eq("id", id)
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        tIronModelMapper.delete(new QueryWrapper<TIronModel>().eq("id", id));
+    }
 
 }

+ 37 - 5
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronParamServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.eventbus.AsyncEventBus;
 import com.sckj.common.TapholeAdminThreadLocal;
 import com.sckj.common.core.AjaxResult;
 import com.sckj.common.core.PageResult;
@@ -41,6 +42,9 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
     @Resource
     TIronParamMapper tIronParamMapper;
 
+    @Resource
+    private AsyncEventBus asyncEventBus;
+
     /**
      * 参数设定列表
      *
@@ -54,13 +58,28 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
         Integer limit = pageValidate.getPageSize();
 
         QueryWrapper<TIronParam> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtils.isNotEmpty(searchValidate.getParamType())){
+            queryWrapper.lambda().like(TIronParam::getParamType, searchValidate.getParamType());
+        }
+
+        if(ObjectUtils.isNotEmpty(searchValidate.getParamName())){
+            queryWrapper.lambda().like(TIronParam::getParamName, searchValidate.getParamName());
+        }
+
+        if(ObjectUtils.isNotEmpty(searchValidate.getParamValue())){
+            queryWrapper.lambda().like(TIronParam::getParamValue, searchValidate.getParamValue());
+        }
+        if(ObjectUtils.isNotEmpty(searchValidate.getParamDesc())){
+            queryWrapper.lambda().like(TIronParam::getParamDesc, searchValidate.getParamDesc());
+        }
+
+        if(ObjectUtils.isNotEmpty(searchValidate.getStatus())){
+            queryWrapper.lambda().eq(TIronParam::getStatus, searchValidate.getStatus());
+        }
+
         queryWrapper.orderByDesc("id");
 
-        tIronParamMapper.setSearch(queryWrapper, searchValidate, new String[]{
-                "=:kkhs:str",
-                "=:ctsj:str",
-                "=:ctl:str",
-        });
+
 
         IPage<TIronParam> iPage = tIronParamMapper.selectPage(new Page<>(page, limit), queryWrapper);
 
@@ -108,6 +127,7 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
         model.setParamName(createValidate.getParamName());
         model.setParamValue(createValidate.getParamValue());
         tIronParamMapper.insert(model);
+        refreshParams();
     }
 
     /**
@@ -129,7 +149,11 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
         model.setParamType(updateValidate.getParamType());
         model.setParamName(updateValidate.getParamName());
         model.setParamValue(updateValidate.getParamValue());
+        model.setParamUnit(updateValidate.getParamUnit());
+        model.setStatus(updateValidate.getStatus());
+        model.setSort(updateValidate.getSort());
         tIronParamMapper.updateById(model);
+        refreshParams();
     }
 
     /**
@@ -147,6 +171,7 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
         Assert.notNull(model, "数据不存在!");
 
         tIronParamMapper.delete(new QueryWrapper<TIronParam>().eq("id", id));
+        refreshParams();
     }
 
     /**
@@ -164,6 +189,7 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
             return AjaxResult.failed("数据不存在");
         }
         tIronParamMapper.delete(new QueryWrapper<TIronParam>().in("id", ids));
+        refreshParams();
         return AjaxResult.success();
     }
 
@@ -188,6 +214,7 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
             }
             update(wrapper);
         }
+        refreshParams();
     }
 
     public void updateBatchData(List<TIronParam> paramList) {
@@ -203,6 +230,11 @@ public class TIronParamServiceImpl extends ServiceImpl<TIronParamMapper, TIronPa
             }
             update(wrapper);
         }
+        refreshParams();
+    }
+
+    public void refreshParams() {
+        asyncEventBus.post("2");
     }
 
 }

+ 4 - 0
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronStepLogServiceImpl.java

@@ -1,6 +1,7 @@
 package com.sckj.iron.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckj.iron.entity.TIronStep;
 import com.sckj.iron.entity.TIronStepLog;
 import com.sckj.iron.mapper.TIronStepLogMapper;
 import org.springframework.stereotype.Service;
@@ -19,6 +20,9 @@ public class TIronStepLogServiceImpl extends ServiceImpl<TIronStepLogMapper, TIr
     TIronStepLogMapper tIronStepLogMapper;
 
 
+    public int insertOrUpdate(TIronStepLog step) {
+        return tIronStepLogMapper.insertOrUpdate(step);
+    }
 
 
 }

+ 143 - 49
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronStepServiceImpl.java

@@ -1,15 +1,23 @@
 package com.sckj.iron.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.eventbus.AsyncEventBus;
+import com.sckj.common.core.PageResult;
+import com.sckj.common.validate.commons.PageValidate;
 import com.sckj.iron.entity.TIronStep;
 import com.sckj.iron.mapper.TIronStepMapper;
+import com.sckj.iron.validate.TIronStepCreateValidate;
+import com.sckj.iron.validate.TIronStepSearchValidate;
+import com.sckj.iron.validate.TIronStepUpdateValidate;
 import com.sckj.iron.vo.IronStepVO;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
+import com.sckj.iron.vo.TIronStepDetailVo;
+import com.sckj.iron.vo.TIronStepListedVo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -67,53 +75,7 @@ public class TIronStepServiceImpl extends ServiceImpl<TIronStepMapper, TIronStep
         return stepDTOList;
     }
 
-//    public Map<String,IronStepVO> getLinkedMapSteps(){
-//        QueryWrapper<TIronStep> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.lambda().eq(TIronStep::getStatus, "1").orderByAsc(TIronStep::getSort);
-//        List<TIronStep> stepList = list(queryWrapper);
-//
-//        //将 stepList 转换为 LinkedHashMap
-//        Map<String, IronStepVO> stepMap = stepList.stream()
-//                .map(step->{
-//                    IronStepVO vo = new IronStepVO();
-//                    BeanUtils.copyProperties(step, vo);
-//                    return vo;
-//                })
-//                .collect(Collectors.toMap(
-//                        IronStepVO::getStepId,
-//                        step -> step,
-//                        (existing, replacement) -> existing,
-//                        LinkedHashMap::new
-//                ));
-//
-//        Map<String,IronStepVO> treeMap = new LinkedHashMap<>();
-//
-//        String key = "";
-//        for(Map.Entry<String,IronStepVO> entry: stepMap.entrySet()){
-//            IronStepVO step = entry.getValue();
-//            if (step.getStepId().length() == 3) {
-//                key = entry.getKey();
-//                step.setChilds(new LinkedHashMap<>());
-//                treeMap.put(key,step);
-////                stepDTO = new IronStepVO();
-////                stepDTO.setChilds(new ArrayList<>());
-////                BeanUtils.copyProperties(step, stepDTO);
-////                stepDTOList.add(stepDTO);
-//            } else {
-//                treeMap.get(key).getChilds().put(entry.getKey(),entry.getValue());
-
-    /// /                if (ObjectUtils.isNotEmpty(stepDTO) && StringUtils.startsWith(step.getStepId(), stepDTO.getStepId())) {
-    /// /                    IronStepVO stepChildDTO = new IronStepVO();
-    /// /                    BeanUtils.copyProperties(step, stepChildDTO);
-    /// /                    stepDTO.getChilds().add(stepChildDTO);
-    /// /                }
-//            }
-//        }
-//
-//
-//        return stepMap;
-//
-//    }
+
     public void refreshTreeSteps() {
         asyncEventBus.post("1");
     }
@@ -132,5 +94,137 @@ public class TIronStepServiceImpl extends ServiceImpl<TIronStepMapper, TIronStep
     }
 
 
+    /**
+     * 出铁步骤配置列表
+     *
+     * @author LikeAdmin
+     * @param pageValidate 分页参数
+     * @param searchValidate 搜索参数
+     * @return PageResult<TIronStepListedVo>
+     */
+    
+    public PageResult<TIronStepListedVo> list(PageValidate pageValidate, TIronStepSearchValidate searchValidate) {
+        Integer page  = pageValidate.getPageNo();
+        Integer limit = pageValidate.getPageSize();
+
+        QueryWrapper<TIronStep> queryWrapper = new QueryWrapper<>();
+        queryWrapper.orderByDesc(Arrays.asList("sort", "identifier"));
+
+        tIronStepMapper.setSearch(queryWrapper, searchValidate, new String[]{
+                "=:stepId@step_id:str",
+                "=:required:str",
+                "=:identifier:str",
+                "like:stepName@step_name:str",
+                "=:stepNameExpression@step_name_expression:str",
+                "=:stepCondition@step_condition:str",
+                "=:sort:int",
+                "=:nodeType@node_type:str",
+                "=:status:str",
+                "=:confirmMode@confirm_mode:str",
+                "like:pointName@point_name:str",
+        });
+
+        IPage<TIronStep> iPage = tIronStepMapper.selectPage(new Page<>(page, limit), queryWrapper);
+
+        List<TIronStepListedVo> list = new LinkedList<>();
+        for(TIronStep item : iPage.getRecords()) {
+            TIronStepListedVo vo = new TIronStepListedVo();
+            BeanUtils.copyProperties(item, vo);
+            list.add(vo);
+        }
+
+        return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
+    }
+
+    /**
+     * 出铁步骤配置详情
+     *
+     * @author LikeAdmin
+     * @param id 主键参数
+     * @return TIronStep
+     */
+    
+    public TIronStepDetailVo detail(String id) {
+        TIronStep model = tIronStepMapper.selectOne(
+                new QueryWrapper<TIronStep>()
+                        .eq("step_id", id)
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在");
+
+        TIronStepDetailVo vo = new TIronStepDetailVo();
+        BeanUtils.copyProperties(model, vo);
+        return vo;
+    }
+
+    /**
+     * 出铁步骤配置新增
+     *
+     * @author LikeAdmin
+     * @param createValidate 参数
+     */
+    
+    public void add(TIronStepCreateValidate createValidate) {
+        TIronStep model = new TIronStep();
+        model.setStepId(createValidate.getStepId());
+        model.setRequired(createValidate.getRequired());
+        model.setStepName(createValidate.getStepName());
+        model.setStepNameExpression(createValidate.getStepNameExpression());
+        model.setStepCondition(createValidate.getStepCondition());
+        model.setSort(createValidate.getSort());
+        model.setNodeType(createValidate.getNodeType());
+        model.setStatus(createValidate.getStatus());
+        model.setConfirmMode(createValidate.getConfirmMode());
+        model.setPointName(createValidate.getPointName());
+        tIronStepMapper.insert(model);
+    }
+
+    /**
+     * 出铁步骤配置编辑
+     *
+     * @author LikeAdmin
+     * @param updateValidate 参数
+     */
+    
+    public void edit(TIronStepUpdateValidate updateValidate) {
+        TIronStep model = tIronStepMapper.selectOne(
+                new QueryWrapper<TIronStep>()
+                        .eq("identifier",  updateValidate.getIdentifier())
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        model.setStepId(updateValidate.getStepId());
+        model.setRequired(updateValidate.getRequired());
+        model.setIdentifier(updateValidate.getIdentifier());
+        model.setStepName(updateValidate.getStepName());
+        model.setStepNameExpression(updateValidate.getStepNameExpression());
+        model.setStepCondition(updateValidate.getStepCondition());
+        model.setSort(updateValidate.getSort());
+        model.setNodeType(updateValidate.getNodeType());
+        model.setStatus(updateValidate.getStatus());
+        model.setConfirmMode(updateValidate.getConfirmMode());
+        model.setPointName(updateValidate.getPointName());
+        tIronStepMapper.updateById(model);
+    }
+
+    /**
+     * 出铁步骤配置删除
+     *
+     * @author LikeAdmin
+     * @param id 主键ID
+     */
+    
+    public void del(Integer id) {
+        TIronStep model = tIronStepMapper.selectOne(
+                new QueryWrapper<TIronStep>()
+                        .eq("identifier", id)
+                        .last("limit 1"));
+
+        Assert.notNull(model, "数据不存在!");
+
+        tIronStepMapper.delete(new QueryWrapper<TIronStep>().eq("identifier", id));
+    }
+
 }
 

+ 52 - 56
taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java

@@ -42,6 +42,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.expression.Expression;
 import org.springframework.expression.spel.standard.SpelExpressionParser;
@@ -869,72 +870,57 @@ public class DeviceEventListener extends EventListener { //
 
     //计算每步结果
     private synchronized void setStepResult(List<IronStepVO> mSteps) {
-        uuid = UUID.randomUUID().toString().replace("-","");
         boolean foundFalsePass = false;
         //发现第一个pass是false,后续都为false,包括父项和子项
         for (IronStepVO stepDTO : mSteps) {
             for (IronStepVO child : stepDTO.getChilds()) {
                 for (IronStepVO grandchild : child.getChilds()) {
                     //孙子项 验证是否通过
-                    validateStepPass(grandchild);
-                    if (!foundFalsePass && 0 == grandchild.getPassResult()) {
-                        foundFalsePass = true;
-                    }
-
-                    if (foundFalsePass) {
-                        grandchild.setPassResult(0);
-                        if(Objects.equals(grandchild.getConfirmMode(),"2")){
-                            grandchild.setData("0");
-                        }
-                    }
-
-                    taskExecutor.execute(()->{
-                        TIronStepLog stepLog = new TIronStepLog();
-                        stepLog.setUuid(uuid);
-                        BeanUtils.copyProperties(grandchild, stepLog);
-                        ironStepLogService.save(stepLog);
-                    });
-
+                    foundFalsePass = isFoundFalsePass(grandchild, foundFalsePass);
                 }
-
-                //子项验证是否通过
-                validateStepPass(child);
-                if (!foundFalsePass && 0 == child.getPassResult()) {
-                    foundFalsePass = true;
-                }
-                //子项
-                if (foundFalsePass) {
-                    child.setPassResult(0);
-                    if(Objects.equals(child.getConfirmMode(),"2")){
-                        child.setData("0");
-                    }
-                }
-                taskExecutor.execute(()->{
-                    TIronStepLog stepLog = new TIronStepLog();
-                    stepLog.setUuid(uuid);
-                    BeanUtils.copyProperties(child, stepLog);
-                    ironStepLogService.save(stepLog);
-                });
+                //子项 验证是否通过
+                foundFalsePass = isFoundFalsePass(child, foundFalsePass);
             }
-            //父项
-            validateStepPass(stepDTO);
-            if (!foundFalsePass && 0 == stepDTO.getPassResult()) {
-                foundFalsePass = true;
+            //父项 验证是否通过
+            foundFalsePass = isFoundFalsePass(stepDTO, foundFalsePass);
+        }
+    }
+
+    /***
+     * 发现并标记第一个不通过的步骤,并且将后续的步骤都强制标记为不通过
+     * @param stepDTO
+     * @param foundFalsePass
+     * @return
+     */
+    private boolean isFoundFalsePass(IronStepVO stepDTO, boolean foundFalsePass) {
+        validateStepPass(stepDTO);
+        if (!foundFalsePass && 0 == stepDTO.getPassResult()) {
+            foundFalsePass = true;
+        }
+        //父项
+        if (foundFalsePass) {
+            stepDTO.setPassResult(0);
+            if (Objects.equals(stepDTO.getConfirmMode(), "2")) {
+                //确认模式为手动确认,并且当前步骤不通过的时候重置data,让用户再次点击确认
+                stepDTO.setData("0");
             }
-            //父项
-            if (foundFalsePass) {
-                stepDTO.setPassResult(0);
-                if(Objects.equals(stepDTO.getConfirmMode(),"2")){
-                    stepDTO.setData("0");
+        }
+        taskExecutor.execute(() -> {
+            //记录每个步骤
+            if (ObjectUtils.isNotEmpty(uuid)) {
+                TIronStepLog stepLog = null;
+                try {
+                    stepLog = new TIronStepLog();
+                    stepLog.setStepLogId(uuid);
+                    BeanUtils.copyProperties(stepDTO, stepLog);
+                    ironStepLogService.insertOrUpdate(stepLog);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    log.error(">>>>>> {}", stepLog);
                 }
             }
-            taskExecutor.execute(()->{
-                TIronStepLog stepLog = new TIronStepLog();
-                stepLog.setUuid(uuid);
-                BeanUtils.copyProperties(stepDTO, stepLog);
-                ironStepLogService.save(stepLog);
-            });
-        }
+        });
+        return foundFalsePass;
     }
 
 
@@ -965,6 +951,7 @@ public class DeviceEventListener extends EventListener { //
             return;
         }
 
+        //通过条件不为空执行表达式
         if (ObjectUtils.isNotEmpty(stepVO.getStepCondition())) {
             boolean result = false;
             try {
@@ -1055,9 +1042,18 @@ public class DeviceEventListener extends EventListener { //
     }
 
     private boolean validateManualData(IronStepDTO message, String userId, IronStepVO stepDTO) {
-        if (Objects.equals(stepDTO.getStepId(), message.getStepId()) && Objects.equals(stepDTO.getIdentifier(), message.getIdentifier()) && Objects.equals("2", stepDTO.getConfirmMode())) {
+        if (Objects.equals(stepDTO.getStepId(), message.getStepId())
+                && Objects.equals(stepDTO.getIdentifier(), message.getIdentifier())
+                && Objects.equals("2", stepDTO.getConfirmMode())) {
             stepDTO.setData(message.getData());
 
+            if (Objects.equals("001001", stepDTO.getStepId())
+                    && Objects.equals("ylgc", stepDTO.getIdentifier())
+                    && Objects.equals(1, stepDTO.getData())
+            ) {
+                uuid = UUID.randomUUID().toString().replace("-", "");
+            }
+
             //这里手动记录时间
             log.info("userId:{},stepId:{},identifier:{},data:{},pass:{}", userId, message.getStepId(), message.getIdentifier(), message.getData());
 

+ 57 - 0
taphole-iron/src/main/java/com/sckj/iron/validate/TIronModelCreateValidate.java

@@ -0,0 +1,57 @@
+package com.sckj.iron.validate;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Date;
+import javax.validation.constraints.*;
+
+@Data
+@ApiModel("出铁相关模型创建参数")
+public class TIronModelCreateValidate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @NotNull(message = "modelName参数缺失")
+    @ApiModelProperty(value = "模型名称")
+    private String modelName;
+
+    @NotNull(message = "modelExpression参数缺失")
+    @ApiModelProperty(value = "模型公式")
+    private String modelExpression;
+
+    @NotNull(message = "modelDesc参数缺失")
+    @ApiModelProperty(value = "描述")
+    private String modelDesc;
+
+    @NotNull(message = "modelPath参数缺失")
+    @ApiModelProperty(value = "模型存储位置")
+    private String modelPath;
+
+    @NotNull(message = "status参数缺失")
+    @ApiModelProperty(value = "状态(1正常 0停用)")
+    private String status;
+
+    @NotNull(message = "sort参数缺失")
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    @NotNull(message = "createBy参数缺失")
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @NotNull(message = "updateBy参数缺失")
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @NotNull(message = "tapholeId参数缺失")
+    @ApiModelProperty(value = "铁口区域编号")
+    private Long tapholeId;
+
+    @NotNull(message = "boilerId参数缺失")
+    @ApiModelProperty(value = "锅炉编号")
+    private Long boilerId;
+
+}

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä