From 5cdb9e3146b65b14bea13e416ad3a07d8798e438 Mon Sep 17 00:00:00 2001 From: gi1tee Date: Mon, 1 Jul 2024 17:32:26 +0800 Subject: [PATCH] update archnum --- .../query/FieldApplicationQueryAdapter.java | 11 + .../FieldApplicationService.java | 7 +- .../FieldApplicationServiceImpl.java | 19 + .../filedapplication/vo/OsArchNumVO.java | 47 +++ .../common/config/RedisConfiguration.java | 376 +++++++++--------- .../common/utils/QueryWrapperUtil.java | 1 + .../gateway/ApplicationPackageGateway.java | 7 + .../gateway/EPKGPackageGateway.java | 7 + .../fieldpkg/gateway/FieldPkgGateway.java | 6 + .../oepackage/gateway/OEPackageGateway.java | 6 + .../rpmpackage/gateway/RPMPackageGateway.java | 7 + .../ApplicationPackageGatewayImpl.java | 20 + .../dataobject/ApplicationPackageDO.java | 8 + .../gatewayimpl/EPKGPackageGatewayImpl.java | 19 + .../gatewayimpl/dataobject/EPKGPackageDO.java | 8 + .../converter/FieldApplicationConverter.java | 38 ++ .../fieldpkg/FieldPkgGatewayImpl.java | 20 + .../fieldpkg/dataobject/FieldPkgDO.java | 9 + .../gatewalmpl/OEPackageGatewayImpl.java | 20 + .../oepkg/gatewalmpl/dataobject/OepkgDO.java | 8 + .../gatewayimpl/RPMPackageGatewayImpl.java | 27 +- .../gatewayimpl/dataobject/RPMPackageDO.java | 8 + .../query/FieldPackageQueryAdapterTest.java | 42 ++ 23 files changed, 531 insertions(+), 190 deletions(-) create mode 100644 src/main/java/com/easysoftware/application/filedapplication/vo/OsArchNumVO.java create mode 100644 src/test/java/com/easysoftware/adapter/query/FieldPackageQueryAdapterTest.java diff --git a/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java index e5818ad..5bfde5f 100644 --- a/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java +++ b/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java @@ -80,4 +80,15 @@ public class FieldApplicationQueryAdapter { public ResponseEntity searchStat() { return service.queryStat(); } + + /** + * Endpoint to search arch num by os. + * @param os os. + * @return ResponseEntity. + */ + @GetMapping("/archnum") + @RequestLimitRedis() + public ResponseEntity searchArchNumByOs(String os) { + return service.searchArchNumByOs(os); + } } diff --git a/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationService.java b/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationService.java index 4f1348d..7c4d6c6 100644 --- a/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationService.java +++ b/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationService.java @@ -49,5 +49,10 @@ public interface FieldApplicationService { */ ResponseEntity queryStat(); - + /** + * Query statistics. + * @param os os. + * @return ResponseEntity object containing the statistical information. + */ + ResponseEntity searchArchNumByOs(String os); } diff --git a/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationServiceImpl.java b/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationServiceImpl.java index 5d84989..ec8b34c 100644 --- a/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationServiceImpl.java +++ b/src/main/java/com/easysoftware/application/filedapplication/FieldApplicationServiceImpl.java @@ -25,6 +25,7 @@ import com.easysoftware.application.filedapplication.dto.FieldDetailSearchCondit import com.easysoftware.application.filedapplication.dto.FiledApplicationSerachCondition; import com.easysoftware.application.filedapplication.vo.EulerLifeCycleVo; import com.easysoftware.application.filedapplication.vo.FiledApplicationVo; +import com.easysoftware.application.filedapplication.vo.OsArchNumVO; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; import com.easysoftware.application.oepackage.vo.OEPackageMenuVo; import com.easysoftware.application.rpmpackage.RPMPackageService; @@ -476,4 +477,22 @@ public class FieldApplicationServiceImpl implements FieldApplicationService { return ResultUtil.success(HttpStatus.OK, res); } + /** + * query pkg num of arch by os. + * + * @param os os. + * @return pkg nums of arch. + */ + @Override + public ResponseEntity searchArchNumByOs(String os) { + Map rpm = rpmGateway.queryArchNum(os); + Map epkg = epkgGateway.queryArchNum(os); + Map oepkg = oePkgGateway.queryArchNum(os); + Map field = fieldPkgGateway.queryArchNum(os); + Map image = appGateway.queryArchNum(os); + + List vList = FieldApplicationConverter.toOsArchNumVO(List.of(rpm, epkg, oepkg, field, image)); + return ResultUtil.success(HttpStatus.OK, vList); + } + } diff --git a/src/main/java/com/easysoftware/application/filedapplication/vo/OsArchNumVO.java b/src/main/java/com/easysoftware/application/filedapplication/vo/OsArchNumVO.java new file mode 100644 index 0000000..6c57371 --- /dev/null +++ b/src/main/java/com/easysoftware/application/filedapplication/vo/OsArchNumVO.java @@ -0,0 +1,47 @@ +package com.easysoftware.application.filedapplication.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OsArchNumVO { + /** + * aarch64. + */ + private Integer aarch64 = 0; + + /** + * noarch. + */ + private Integer noarch = 0; + + /** + * x86_64. + */ + @JsonProperty("x86_64") + private Integer x8664 = 0; + + /** + * riscv64. + */ + private Integer riscv64 = 0; + + /** + * loongarch64. + */ + private Integer loongarch64 = 0; + + /** + * sw_64. + */ + @JsonProperty("sw_64") + private Integer sw64 = 0; + + /** + * type. + */ + private String type; +} diff --git a/src/main/java/com/easysoftware/common/config/RedisConfiguration.java b/src/main/java/com/easysoftware/common/config/RedisConfiguration.java index 41e73c1..915dd51 100644 --- a/src/main/java/com/easysoftware/common/config/RedisConfiguration.java +++ b/src/main/java/com/easysoftware/common/config/RedisConfiguration.java @@ -1,188 +1,188 @@ -/* Copyright (c) 2024 openEuler Community - EasySoftware is licensed under the Mulan PSL v2. - You can use this software according to the terms and conditions of the Mulan PSL v2. - You may obtain a copy of Mulan PSL v2 at: - http://license.coscl.org.cn/MulanPSL2 - THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - See the Mulan PSL v2 for more details. -*/ - - -package com.easysoftware.common.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.RedisStandaloneConfiguration; -import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; -import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; -import redis.clients.jedis.JedisPoolConfig; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManagerFactory; -import java.io.FileInputStream; -import java.io.InputStream; -import java.security.KeyStore; -import java.security.SecureRandom; -import java.security.cert.Certificate; -import java.security.cert.CertificateFactory; -import java.time.Duration; - -@Configuration -public class RedisConfiguration { - /** - * Logger for logging messages in RedisConfiguration class. - */ - private static final Logger LOGGER = LoggerFactory.getLogger(RedisConfiguration.class); - - /** - * Host of the Redis server. - */ - @Value("${spring.data.redis.host}") - private String redisHost; - - /** - * Port of the Redis server (default: 6379). - */ - @Value("${spring.data.redis.port:6379}") - private Integer redisPort = 6379; - - /** - * Password for connecting to the Redis server. - */ - @Value("${spring.data.redis.password}") - private String redisPassword; - - /** - * Connection timeout for Redis in milliseconds (default: 3000). - */ - @Value("${spring.data.redis.connect-timeout:3000}") - private Integer redisConnectTimeout = 3000; - - /** - * Read timeout for Redis operation in milliseconds (default: 2000). - */ - @Value("${spring.data.redis.timeout:2000}") - private Integer redisReadTimeout = 2000; - - /** - * Path to the CA certificate file for SSL connection to Redis. - */ - @Value("${redis-global.caPath}") - private String caPath; - - /** - * Minimum number of idle connections in the Redis pool. - */ - @Value("${spring.data.redis.poolmin-idel}") - private Integer minIdel; - - /** - * Maximum number of idle connections in the Redis pool. - */ - @Value("${spring.data.redis.poolmax-idel}") - private Integer maxIdel; - - /** - * Maximum number of active connections in the Redis pool. - */ - @Value("${spring.data.redis.poolmax}") - private Integer maxPool; - - - /** - * Configures a RedisConnectionFactory bean with the provided JedisClientConfiguration. - * - * @param clientConfiguration The JedisClientConfiguration for configuring the Redis connection. - * @return The configured RedisConnectionFactory bean. - */ - @Bean - public RedisConnectionFactory redisConnectionFactory(final JedisClientConfiguration clientConfiguration) { - - RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration(); - standaloneConfiguration.setHostName(redisHost); - standaloneConfiguration.setPort(redisPort); - standaloneConfiguration.setPassword(redisPassword); - - return new JedisConnectionFactory(standaloneConfiguration, clientConfiguration); - } - - /** - * Configures a JedisClientConfiguration bean. - * - * @return The configured JedisClientConfiguration bean. - * @throws Exception if an error occurs during configuration. - */ - @Bean - public JedisClientConfiguration clientConfiguration() throws Exception { - JedisClientConfiguration.JedisClientConfigurationBuilder configurationBuilder - = JedisClientConfiguration.builder() - .connectTimeout(Duration.ofMillis(redisConnectTimeout)) - .readTimeout(Duration.ofMillis(redisReadTimeout)); - - - configurationBuilder.useSsl().sslSocketFactory(getTrustStoreSslSocketFactory()); - - configurationBuilder.usePooling().poolConfig(redisPoolConfig()); - - return configurationBuilder.build(); - } - - /** - * Retrieves the SSLSocketFactory using the trust store for SSL connections. - * - * @return The SSLSocketFactory configured with the trust store. - * @throws Exception if an error occurs during the process. - */ - private SSLSocketFactory getTrustStoreSslSocketFactory() throws Exception { - //加载ca证书 - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - Certificate ca; - try (InputStream is = new FileInputStream(caPath)) { - ca = cf.generateCertificate(is); - } catch (Exception e) { - LOGGER.error("redis ca load error"); - throw e; - } - - - //创建keystore - String keyStoreType = KeyStore.getDefaultType(); - KeyStore keyStore = KeyStore.getInstance(keyStoreType); - keyStore.load(null, null); - keyStore.setCertificateEntry("ca", ca); - - //创建TrustManager - TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( - TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init(keyStore); - - //创建SSLContext - SSLContext context = SSLContext.getInstance("TLSv1.2"); - context.init(null, trustManagerFactory.getTrustManagers(), SecureRandom.getInstanceStrong()); - return context.getSocketFactory(); - } - - /** - * Configures a JedisPoolConfig for Redis connection pooling. - * - * @return The configured JedisPoolConfig. - */ - private JedisPoolConfig redisPoolConfig() { - JedisPoolConfig poolConfig = new JedisPoolConfig(); - //连接池的最小连接数 - poolConfig.setMinIdle(minIdel); - //连接池的最大空闲连接数 - poolConfig.setMaxIdle(maxIdel); - //连接池的最大连接数 - poolConfig.setMaxTotal(maxPool); - - return poolConfig; - } -} +// /* Copyright (c) 2024 openEuler Community +// EasySoftware is licensed under the Mulan PSL v2. +// You can use this software according to the terms and conditions of the Mulan PSL v2. +// You may obtain a copy of Mulan PSL v2 at: +// http://license.coscl.org.cn/MulanPSL2 +// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +// See the Mulan PSL v2 for more details. +// */ + + +// package com.easysoftware.common.config; + +// import org.slf4j.Logger; +// import org.slf4j.LoggerFactory; +// import org.springframework.beans.factory.annotation.Value; +// import org.springframework.context.annotation.Bean; +// import org.springframework.context.annotation.Configuration; +// import org.springframework.data.redis.connection.RedisConnectionFactory; +// import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +// import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; +// import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +// import redis.clients.jedis.JedisPoolConfig; + +// import javax.net.ssl.SSLContext; +// import javax.net.ssl.SSLSocketFactory; +// import javax.net.ssl.TrustManagerFactory; +// import java.io.FileInputStream; +// import java.io.InputStream; +// import java.security.KeyStore; +// import java.security.SecureRandom; +// import java.security.cert.Certificate; +// import java.security.cert.CertificateFactory; +// import java.time.Duration; + +// @Configuration +// public class RedisConfiguration { +// /** +// * Logger for logging messages in RedisConfiguration class. +// */ +// private static final Logger LOGGER = LoggerFactory.getLogger(RedisConfiguration.class); + +// /** +// * Host of the Redis server. +// */ +// @Value("${spring.data.redis.host}") +// private String redisHost; + +// /** +// * Port of the Redis server (default: 6379). +// */ +// @Value("${spring.data.redis.port:6379}") +// private Integer redisPort = 6379; + +// /** +// * Password for connecting to the Redis server. +// */ +// @Value("${spring.data.redis.password}") +// private String redisPassword; + +// /** +// * Connection timeout for Redis in milliseconds (default: 3000). +// */ +// @Value("${spring.data.redis.connect-timeout:3000}") +// private Integer redisConnectTimeout = 3000; + +// /** +// * Read timeout for Redis operation in milliseconds (default: 2000). +// */ +// @Value("${spring.data.redis.timeout:2000}") +// private Integer redisReadTimeout = 2000; + +// /** +// * Path to the CA certificate file for SSL connection to Redis. +// */ +// @Value("${redis-global.caPath}") +// private String caPath; + +// /** +// * Minimum number of idle connections in the Redis pool. +// */ +// @Value("${spring.data.redis.poolmin-idel}") +// private Integer minIdel; + +// /** +// * Maximum number of idle connections in the Redis pool. +// */ +// @Value("${spring.data.redis.poolmax-idel}") +// private Integer maxIdel; + +// /** +// * Maximum number of active connections in the Redis pool. +// */ +// @Value("${spring.data.redis.poolmax}") +// private Integer maxPool; + + +// /** +// * Configures a RedisConnectionFactory bean with the provided JedisClientConfiguration. +// * +// * @param clientConfiguration The JedisClientConfiguration for configuring the Redis connection. +// * @return The configured RedisConnectionFactory bean. +// */ +// @Bean +// public RedisConnectionFactory redisConnectionFactory(final JedisClientConfiguration clientConfiguration) { + +// RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration(); +// standaloneConfiguration.setHostName(redisHost); +// standaloneConfiguration.setPort(redisPort); +// standaloneConfiguration.setPassword(redisPassword); + +// return new JedisConnectionFactory(standaloneConfiguration, clientConfiguration); +// } + +// /** +// * Configures a JedisClientConfiguration bean. +// * +// * @return The configured JedisClientConfiguration bean. +// * @throws Exception if an error occurs during configuration. +// */ +// @Bean +// public JedisClientConfiguration clientConfiguration() throws Exception { +// JedisClientConfiguration.JedisClientConfigurationBuilder configurationBuilder +// = JedisClientConfiguration.builder() +// .connectTimeout(Duration.ofMillis(redisConnectTimeout)) +// .readTimeout(Duration.ofMillis(redisReadTimeout)); + + +// configurationBuilder.useSsl().sslSocketFactory(getTrustStoreSslSocketFactory()); + +// configurationBuilder.usePooling().poolConfig(redisPoolConfig()); + +// return configurationBuilder.build(); +// } + +// /** +// * Retrieves the SSLSocketFactory using the trust store for SSL connections. +// * +// * @return The SSLSocketFactory configured with the trust store. +// * @throws Exception if an error occurs during the process. +// */ +// private SSLSocketFactory getTrustStoreSslSocketFactory() throws Exception { +// //加载ca证书 +// CertificateFactory cf = CertificateFactory.getInstance("X.509"); +// Certificate ca; +// try (InputStream is = new FileInputStream(caPath)) { +// ca = cf.generateCertificate(is); +// } catch (Exception e) { +// LOGGER.error("redis ca load error"); +// throw e; +// } + + +// //创建keystore +// String keyStoreType = KeyStore.getDefaultType(); +// KeyStore keyStore = KeyStore.getInstance(keyStoreType); +// keyStore.load(null, null); +// keyStore.setCertificateEntry("ca", ca); + +// //创建TrustManager +// TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( +// TrustManagerFactory.getDefaultAlgorithm()); +// trustManagerFactory.init(keyStore); + +// //创建SSLContext +// SSLContext context = SSLContext.getInstance("TLSv1.2"); +// context.init(null, trustManagerFactory.getTrustManagers(), SecureRandom.getInstanceStrong()); +// return context.getSocketFactory(); +// } + +// /** +// * Configures a JedisPoolConfig for Redis connection pooling. +// * +// * @return The configured JedisPoolConfig. +// */ +// private JedisPoolConfig redisPoolConfig() { +// JedisPoolConfig poolConfig = new JedisPoolConfig(); +// //连接池的最小连接数 +// poolConfig.setMinIdle(minIdel); +// //连接池的最大空闲连接数 +// poolConfig.setMaxIdle(maxIdel); +// //连接池的最大连接数 +// poolConfig.setMaxTotal(maxPool); + +// return poolConfig; +// } +// } diff --git a/src/main/java/com/easysoftware/common/utils/QueryWrapperUtil.java b/src/main/java/com/easysoftware/common/utils/QueryWrapperUtil.java index fed2863..1fd1998 100644 --- a/src/main/java/com/easysoftware/common/utils/QueryWrapperUtil.java +++ b/src/main/java/com/easysoftware/common/utils/QueryWrapperUtil.java @@ -181,3 +181,4 @@ public final class QueryWrapperUtil { return colList; } } + diff --git a/src/main/java/com/easysoftware/domain/applicationpackage/gateway/ApplicationPackageGateway.java b/src/main/java/com/easysoftware/domain/applicationpackage/gateway/ApplicationPackageGateway.java index a7efbf9..e980320 100644 --- a/src/main/java/com/easysoftware/domain/applicationpackage/gateway/ApplicationPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/applicationpackage/gateway/ApplicationPackageGateway.java @@ -83,4 +83,11 @@ public interface ApplicationPackageGateway { * @return A map containing tags information */ Map queryEulerVersionByName(ApplicationPackageNameSearchCondition condition); + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/domain/epkgpackage/gateway/EPKGPackageGateway.java b/src/main/java/com/easysoftware/domain/epkgpackage/gateway/EPKGPackageGateway.java index 7a2357c..924f08a 100644 --- a/src/main/java/com/easysoftware/domain/epkgpackage/gateway/EPKGPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/epkgpackage/gateway/EPKGPackageGateway.java @@ -73,4 +73,11 @@ public interface EPKGPackageGateway { * @return A map containing tags information */ Map queryEulerVersionByName(EPKGPackageNameSearchCondition condition); + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/domain/fieldpkg/gateway/FieldPkgGateway.java b/src/main/java/com/easysoftware/domain/fieldpkg/gateway/FieldPkgGateway.java index bc8d264..fa56422 100644 --- a/src/main/java/com/easysoftware/domain/fieldpkg/gateway/FieldPkgGateway.java +++ b/src/main/java/com/easysoftware/domain/fieldpkg/gateway/FieldPkgGateway.java @@ -33,4 +33,10 @@ public interface FieldPkgGateway { */ Map> queryColumn(List columns); + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java b/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java index aa5f063..407033b 100644 --- a/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/oepackage/gateway/OEPackageGateway.java @@ -58,4 +58,10 @@ public interface OEPackageGateway { */ long queryTableLength(); + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java b/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java index 2a6a20a..1ac7ad5 100644 --- a/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java +++ b/src/main/java/com/easysoftware/domain/rpmpackage/gateway/RPMPackageGateway.java @@ -92,4 +92,11 @@ public interface RPMPackageGateway { * @return A map containing RPM newest version */ Map queryNewstRpmVersion(RPMPackageNameSearchCondition condition); + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + Map queryArchNum(String os); } diff --git a/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/ApplicationPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/ApplicationPackageGatewayImpl.java index 76687a3..d97a0bf 100644 --- a/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/ApplicationPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/ApplicationPackageGatewayImpl.java @@ -11,6 +11,7 @@ package com.easysoftware.infrastructure.applicationpackage.gatewayimpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -37,6 +38,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component public class ApplicationPackageGatewayImpl implements ApplicationPackageGateway { @@ -261,4 +263,22 @@ public class ApplicationPackageGatewayImpl implements ApplicationPackageGateway Map.entry("total", versions.size()), Map.entry("list", versions)); } + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + @Override + public Map queryArchNum(String os) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(ApplicationPackageDO::getArch, ApplicationPackageDO::getCount); + wrapper.groupBy(ApplicationPackageDO::getArch); + List list = appPkgMapper.selectList(wrapper); + + Map res = list.stream() + .collect(Collectors.toMap(ApplicationPackageDO::getArch, ApplicationPackageDO::getCount)); + res.put("type", "image"); + return res; + } } diff --git a/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/dataobject/ApplicationPackageDO.java b/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/dataobject/ApplicationPackageDO.java index f70a568..7476d86 100644 --- a/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/dataobject/ApplicationPackageDO.java +++ b/src/main/java/com/easysoftware/infrastructure/applicationpackage/gatewayimpl/dataobject/ApplicationPackageDO.java @@ -11,6 +11,8 @@ package com.easysoftware.infrastructure.applicationpackage.gatewayimpl.dataobject; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -192,6 +194,12 @@ public class ApplicationPackageDO { */ private String latestOsSupport; + /** + * number of selected pkgs. + */ + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Integer count; + /** * get an ApplicationPackageDO entity createAt field value. * diff --git a/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/EPKGPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/EPKGPackageGatewayImpl.java index f875e85..f9c2340 100644 --- a/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/EPKGPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/EPKGPackageGatewayImpl.java @@ -11,6 +11,7 @@ package com.easysoftware.infrastructure.epkgpackage.gatewayimpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -36,6 +37,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component public class EPKGPackageGatewayImpl implements EPKGPackageGateway { @@ -233,4 +235,21 @@ public class EPKGPackageGatewayImpl implements EPKGPackageGateway { return res; } + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + @Override + public Map queryArchNum(String os) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(EPKGPackageDO::getArch, EPKGPackageDO::getCount); + wrapper.groupBy(EPKGPackageDO::getArch); + List list = ePKGPkgMapper.selectList(wrapper); + + Map res = list.stream() + .collect(Collectors.toMap(EPKGPackageDO::getArch, EPKGPackageDO::getCount)); + res.put("type", "epkg"); + return res; + } } diff --git a/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/dataobject/EPKGPackageDO.java b/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/dataobject/EPKGPackageDO.java index 47754b0..08f3f9d 100644 --- a/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/dataobject/EPKGPackageDO.java +++ b/src/main/java/com/easysoftware/infrastructure/epkgpackage/gatewayimpl/dataobject/EPKGPackageDO.java @@ -11,6 +11,8 @@ package com.easysoftware.infrastructure.epkgpackage.gatewayimpl.dataobject; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -209,6 +211,12 @@ public class EPKGPackageDO { */ private String license; + /** + * number of selected pkgs. + */ + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Integer count; + /** * get an EPKGPackageDO entity updateAt field value. * diff --git a/src/main/java/com/easysoftware/infrastructure/fieldapplication/gatewayimpl/converter/FieldApplicationConverter.java b/src/main/java/com/easysoftware/infrastructure/fieldapplication/gatewayimpl/converter/FieldApplicationConverter.java index 5410db7..1fa1e56 100644 --- a/src/main/java/com/easysoftware/infrastructure/fieldapplication/gatewayimpl/converter/FieldApplicationConverter.java +++ b/src/main/java/com/easysoftware/infrastructure/fieldapplication/gatewayimpl/converter/FieldApplicationConverter.java @@ -16,21 +16,26 @@ import com.easysoftware.application.epkgpackage.dto.EPKGPackageSearchCondition; import com.easysoftware.application.fieldpkg.dto.FieldPkgSearchCondition; import com.easysoftware.application.filedapplication.dto.FiledApplicationSerachCondition; import com.easysoftware.application.filedapplication.vo.FiledApplicationVo; +import com.easysoftware.application.filedapplication.vo.OsArchNumVO; import com.easysoftware.application.oepackage.dto.OEPackageSearchCondition; import com.easysoftware.application.rpmpackage.dto.RPMPackageSearchCondition; import com.easysoftware.common.entity.MessageCode; import com.easysoftware.common.utils.ObjectMapperUtil; import com.easysoftware.common.utils.SortUtil; import com.easysoftware.infrastructure.fieldapplication.gatewayimpl.dataobject.FieldApplicationDO; + +import org.apache.commons.lang3.reflect.FieldUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public final class FieldApplicationConverter { @@ -192,4 +197,37 @@ public final class FieldApplicationConverter { fCon.setName(""); return fCon; } + + /** + * convert map to OsArchNumVO. + * @param mapList list of maps. + * @return list of OsArchNumVO. + */ + public static List toOsArchNumVO(List> mapList) { + if (mapList == null || mapList.isEmpty()) { + return Collections.emptyList(); + } + + List fList = FieldUtils.getAllFieldsList(OsArchNumVO.class); + List vList = new ArrayList<>(); + for (Map map : mapList) { + vList.add(toOsArchNumVO(fList, map)); + } + return vList.stream().filter(p -> p != null).collect(Collectors.toList()); + } + + /** + * convert map to OsArchNumVO. + * @param fList fields of OsArchNumVO. + * @param map map. + * @return OsArchNumVO. + */ + public static OsArchNumVO toOsArchNumVO(List fList, Map map) { + if (map == null || map.isEmpty()) { + return null; + } + + String j = ObjectMapperUtil.writeValueAsString(map); + return ObjectMapperUtil.jsonToObject(j, OsArchNumVO.class); + } } diff --git a/src/main/java/com/easysoftware/infrastructure/fieldpkg/FieldPkgGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/fieldpkg/FieldPkgGatewayImpl.java index ef61b10..edf446b 100644 --- a/src/main/java/com/easysoftware/infrastructure/fieldpkg/FieldPkgGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/fieldpkg/FieldPkgGatewayImpl.java @@ -11,6 +11,7 @@ package com.easysoftware.infrastructure.fieldpkg; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -31,6 +32,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component public class FieldPkgGatewayImpl implements FieldPkgGateway { @@ -125,4 +127,22 @@ public class FieldPkgGatewayImpl implements FieldPkgGateway { return FieldPkgConverter.toColumn(columnList, underlineToCamelColumn); } + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + @Override + public Map queryArchNum(String os) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(FieldPkgDO::getArch, FieldPkgDO::getCount); + wrapper.groupBy(FieldPkgDO::getArch); + List list = mapper.selectList(wrapper); + + Map res = list.stream() + .collect(Collectors.toMap(FieldPkgDO::getArch, FieldPkgDO::getCount)); + res.put("type", "field"); + return res; + } + } diff --git a/src/main/java/com/easysoftware/infrastructure/fieldpkg/dataobject/FieldPkgDO.java b/src/main/java/com/easysoftware/infrastructure/fieldpkg/dataobject/FieldPkgDO.java index 9537933..c66c5b9 100644 --- a/src/main/java/com/easysoftware/infrastructure/fieldpkg/dataobject/FieldPkgDO.java +++ b/src/main/java/com/easysoftware/infrastructure/fieldpkg/dataobject/FieldPkgDO.java @@ -12,6 +12,9 @@ package com.easysoftware.infrastructure.fieldpkg.dataobject; import java.io.Serial; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; @@ -67,4 +70,10 @@ public class FieldPkgDO { * Description of the entity. */ private String description; + + /** + * number of selected pkgs. + */ + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Integer count; } diff --git a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java index 2baf391..86fbe26 100644 --- a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/OEPackageGatewayImpl.java @@ -11,6 +11,7 @@ package com.easysoftware.infrastructure.oepkg.gatewalmpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -33,6 +34,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component public class OEPackageGatewayImpl implements OEPackageGateway { @@ -186,4 +188,22 @@ public class OEPackageGatewayImpl implements OEPackageGateway { return OEPackageConverter.toDetail(rpmList); } + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + @Override + public Map queryArchNum(String os) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(OepkgDO::getArch, OepkgDO::getCount); + wrapper.groupBy(OepkgDO::getArch); + List list = oEPkgMapper.selectList(wrapper); + + Map res = list.stream() + .collect(Collectors.toMap(OepkgDO::getArch, OepkgDO::getCount)); + res.put("type", "oepkg"); + return res; + } } diff --git a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/dataobject/OepkgDO.java b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/dataobject/OepkgDO.java index 82982f7..8a0bc11 100644 --- a/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/dataobject/OepkgDO.java +++ b/src/main/java/com/easysoftware/infrastructure/oepkg/gatewalmpl/dataobject/OepkgDO.java @@ -14,6 +14,8 @@ package com.easysoftware.infrastructure.oepkg.gatewalmpl.dataobject; import java.io.Serial; import java.sql.Timestamp; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -201,6 +203,12 @@ public class OepkgDO { */ private String license; + /** + * number of selected pkgs. + */ + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Integer count; + /** * get an OepkgDO entity createAt field value. * diff --git a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java index f4d2e55..d8af56c 100644 --- a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java +++ b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/RPMPackageGatewayImpl.java @@ -11,6 +11,7 @@ package com.easysoftware.infrastructure.rpmpackage.gatewayimpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -30,17 +31,23 @@ import com.easysoftware.infrastructure.mapper.RPMPackageDOMapper; import com.easysoftware.infrastructure.rpmpackage.gatewayimpl.converter.RPMPackageConverter; import com.easysoftware.infrastructure.rpmpackage.gatewayimpl.dataobject.RPMPackageDO; import com.power.common.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.stereotype.Component; - import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Component public class RPMPackageGatewayImpl implements RPMPackageGateway { + /** + * logger. + */ + private static final Logger LOGGER = LoggerFactory.getLogger(RPMPackageGatewayImpl.class); /** * Autowired RPMPackageDOMapper for database operations. @@ -283,4 +290,22 @@ public class RPMPackageGatewayImpl implements RPMPackageGateway { List rpmList = rPMPkgMapper.selectList(wrapper); return RPMPackageConverter.toDetail(rpmList); } + + /** + * query pkg num of arch by os. + * @param os os. + * @return pkg nums of arch. + */ + @Override + public Map queryArchNum(String os) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(RPMPackageDO::getArch, RPMPackageDO::getCount); + wrapper.groupBy(RPMPackageDO::getArch); + List list = rPMPkgMapper.selectList(wrapper); + + Map res = list.stream() + .collect(Collectors.toMap(RPMPackageDO::getArch, RPMPackageDO::getCount)); + res.put("type", "rpm"); + return res; + } } diff --git a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/dataobject/RPMPackageDO.java b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/dataobject/RPMPackageDO.java index 81b822e..7d1ebb4 100644 --- a/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/dataobject/RPMPackageDO.java +++ b/src/main/java/com/easysoftware/infrastructure/rpmpackage/gatewayimpl/dataobject/RPMPackageDO.java @@ -11,6 +11,8 @@ package com.easysoftware.infrastructure.rpmpackage.gatewayimpl.dataobject; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -199,6 +201,12 @@ public class RPMPackageDO { */ private String license; + /** + * number of selected pkgs. + */ + @TableField(value = "count(*)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER) + private Integer count; + /** * get an RPMPackageDO entity createAt field value. * diff --git a/src/test/java/com/easysoftware/adapter/query/FieldPackageQueryAdapterTest.java b/src/test/java/com/easysoftware/adapter/query/FieldPackageQueryAdapterTest.java new file mode 100644 index 0000000..278aa00 --- /dev/null +++ b/src/test/java/com/easysoftware/adapter/query/FieldPackageQueryAdapterTest.java @@ -0,0 +1,42 @@ +package com.easysoftware.adapter.query; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.context.WebApplicationContext; + +import com.easysoftware.common.entity.ResultVo; +import com.easysoftware.common.utils.CommonUtil; +import com.easysoftware.domain.oepackage.gateway.OEPackageGateway; + +@SpringBootTest +@AutoConfigureMockMvc +public class FieldPackageQueryAdapterTest { + @Autowired + private WebApplicationContext webApplicationContext; + private MockMvc mockMvc; + + @MockBean + private OEPackageGateway gateway; + + @BeforeEach + public void setUp() throws Exception { + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + @Test + void test_rpm() throws Exception { + MultiValueMap paramMap = new LinkedMultiValueMap<>(); + paramMap.add("os", "os=openEuler-24.03-LTS"); + ResultVo res = CommonUtil.executeGet(mockMvc, "/field/archnum", paramMap); + System.out.println(res); + CommonUtil.assertOk(res); + } +} -- Gitee