diff --git a/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java b/src/main/java/com/easysoftware/adapter/query/FieldApplicationQueryAdapter.java index e5818adf6b54d40d7e6896e591b886177f39842f..5bfde5f04205eb719b66c24ebf6b28204269985d 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 4f1348d97cde920ab13418ea2d052dec1fef6078..7c4d6c661559cce89b0730876aa4f061acf75278 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 5d84989f6d6af925613c635b2c9aa16ba622ab9f..ec8b34c4dc34c0a0e516bac8b68670cea4d910ca 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 0000000000000000000000000000000000000000..6c573717149449663086b114a9020f6db953abd9 --- /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 41e73c1313db4ec5241a3621b2f49512ff3fcccd..915dd51e92d736e7dc9e6db767e8f9d23511d773 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 fed2863d15065cc32dbcea8a357d3856f141a16d..1fd19986d7366236439e65c4f0afaeb7d47f9b6f 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 a7efbf9b3d97bf07065c130eee57bfd7ab744e12..e9803200a16ec32b28aaaf57d446b684c3146a2a 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 7a2357ce4b52e6d5881b4f468c4202738b182b7d..924f08ae2d1060dbb74196203d0ebc62a5d41d65 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 bc8d264000c5f3f60aecc4372793174ccd02f86c..fa56422796e64f22dd63ed44f64cb5f3b551928e 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 aa5f063397f762881ba9f06f20c5aa336d1e1f81..407033b078dae3375ff7b8dc9cb1da2d508117a8 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 2a6a20a8fe753fe5d01ab090b8be908fdd931c76..1ac7ad58fb98f9c46299cbf689cd9d9b58442aef 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 76687a3675d996eec1b4564ca5641e133cafa106..d97a0bffb7b006f2e71541e5a388199a6eac0e38 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 f70a5687a964e3a9cc7e4cf62e6c49c6f6f02292..7476d866f200dc7edf07eda5f8533069f3b197b1 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 f875e85ae2bcae1e35a160b8db5e45268e1b2b94..f9c23405cab5255e7d5f3d6ea9ca5b4d21d38cab 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 47754b02562540c846ca33800922991a405379c4..08f3f9d1ade2ce0dacdee253c06c503e25f5e0e6 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 5410db7b45544550826038e07917f357af0b8568..1fa1e56cf8c1ea8828ed4f58df496d9fbcba2b8d 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 ef61b103ed8ab9a8b12b39eac394f4b932b14d2b..edf446b1ba101e86df5f28a4a77223fa84df6ef4 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 953793348f427f22aa40895f4d9a86face5ce04d..c66c5b9ae4077d500d724c87197a2c87b23fcc22 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 2baf39122803899b3ef85c2f8d568ee5ad1b1f92..86fbe261f0012183634ef6ca0a66522fc9f8d43f 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 82982f7b05c3bee0bee2254188be9a9666f955cd..8a0bc11737d0941c0e953ecdde04ff5b2e68e99d 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 f4d2e553205d670c14c29e6eddbb2935e2043b6d..d8af56c685b38d0ea0044a247b78a2efb5893fe2 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 81b822e5de6f21fba1872b4a12a71392714104d1..7d1ebb4b6735358cedf03c26a8eecc27dae17956 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 0000000000000000000000000000000000000000..278aa00a1ccd6d564ed952088ff80104e4427577 --- /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); + } +}