xiongzhu 4 năm trước cách đây
mục cha
commit
63d4d57d1d

+ 6 - 0
pom.xml

@@ -400,6 +400,12 @@
             <artifactId>adapay-java-sdk</artifactId>
             <version>1.2.10</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.21</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 1 - 0
src/main/java/com/izouma/nineth/security/WebSecurityConfig.java

@@ -98,6 +98,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/order/**/status").permitAll()
                 .antMatchers("/activity/all").permitAll()
                 .antMatchers("/activity/get/*").permitAll()
+                .antMatchers("/druid/**").permitAll()
                 // all other requests need to be authenticated
                 .anyRequest().authenticated().and()
                 // make sure we use stateless session; session won't be used to

+ 10 - 7
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -372,18 +372,18 @@ public class AssetService {
         });
     }
 
-    public List<User> holdQuery(List<String> names, LocalDateTime startTime, LocalDateTime endTime) {
-        List<User> match = new ArrayList<>();
+    public Map<User, Integer> holdQuery(List<String> names, LocalDateTime startTime, LocalDateTime endTime) {
+        Map<User, Integer> result = new HashMap<>();
         userRepo.findAll().stream().parallel().forEach(user -> {
             List<Asset> assets = assetRepo.findByUserId(user.getId());
             assets = assets.stream().filter(a -> names.stream().anyMatch(n -> n.equals(a.getName())))
                     .collect(Collectors.toList());
-            if (assets.size() < 4) {
+            if (assets.size() < names.size()) {
                 return;
             }
             assets = assets.stream().filter(a -> a.getCreatedAt().isBefore(startTime))
                     .collect(Collectors.toList());
-            if (assets.size() < 4) {
+            if (assets.size() < names.size()) {
                 return;
             }
             assets = assets.stream().filter(a -> {
@@ -396,13 +396,16 @@ public class AssetService {
                     })
                     .collect(Collectors.toList());
             boolean flag = true;
+            Map<String, Integer> map = new HashMap<>();
             for (String name : names) {
-                flag = flag && assets.stream().anyMatch(a -> name.equals(a.getName()));
+                int c = (int) assets.stream().filter(a -> name.equals(a.getName())).count();
+                map.put(name, c);
+                flag = flag && (c > 0);
             }
             if (flag) {
-                match.add(user);
+                result.put(user, map.values().stream().mapToInt(i -> i).min().orElse(0));
             }
         });
-        return match;
+        return result;
     }
 }

+ 44 - 0
src/main/resources/application.yaml

@@ -23,6 +23,50 @@ spring:
       max-lifetime: 1800000
       connection-timeout: 30000
       connection-test-query: SELECT 1
+    druid:
+      # 连接池的配置信息
+      # 初始化大小,最小,最大
+      initial-size: 10
+      min-idle: 10
+      maxActive: 300
+      # 配置获取连接等待超时的时间
+      maxWait: 10000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      # 打开PSCache,并且指定每个连接上PSCache的大小
+      poolPreparedStatements: true
+      maxPoolPreparedStatementPerConnectionSize: 20
+      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+      filters: stat,wall,slf4j
+      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
+      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+      remove-abandoned: true
+      remove-abandoned-timeout: 1800
+      log-abandoned: true
+      # 配置DruidStatFilter
+      web-stat-filter:
+        enabled: true
+        url-pattern: "/*"
+        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
+      # 配置DruidStatViewServlet
+      stat-view-servlet:
+        enabled: true
+        url-pattern: "/druid/*"
+        login-username: admin
+        login-password: 3edc#EDC
+      filter:
+        wall:
+          enabled: true
+          config:
+            condition-and-alway-false-allow: true
+            condition-and-alway-true-allow: true
+            select-where-alway-true-check: false
   jpa:
     database: MySQL
     database_platform: org.hibernate.dialect.MySQL5InnoDBDialect

+ 7 - 4
src/test/java/com/izouma/nineth/service/AssetServiceTest.java

@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 class AssetServiceTest extends ApplicationTests {
     @Autowired
@@ -82,12 +83,14 @@ class AssetServiceTest extends ApplicationTests {
 
     @Test
     public void stat() {
-        List<User> match = assetService.holdQuery(Arrays.asList("国潮-兰陵武王-高长恭", "国潮-燕南三士-赵云", "国潮-武安君-李牧", "国潮-战神无双-吕布"),
+        Map<User, Integer> match = assetService.holdQuery(Arrays.asList("国潮-兰陵武王-高长恭", "国潮-燕南三士-赵云", "国潮-武安君-李牧", "国潮-战神无双-吕布"),
                 LocalDateTime.of(2021, 12, 23, 23, 0, 0),
                 LocalDateTime.of(2021, 12, 23, 23, 59, 59));
-        for (User user : match) {
-            System.out.printf("%d,%s,%s%n", user.getId(), user.getNickname(), user.getPhone());
+        System.out.println("用户ID,昵称,手机,持有套数");
+        for (Map.Entry<User, Integer> e : match.entrySet()) {
+            User user = e.getKey();
+            System.out.printf("%d,%s,%s,%d%n", user.getId(), user.getNickname(), user.getPhone(), e.getValue());
         }
-        System.out.println(match);
+
     }
 }