From 00290755429de1524a1bbe11b7267a411c67bf55 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 10 Oct 2024 16:50:11 +0800 Subject: [PATCH 001/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Sentinel=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 识别到Sentinel请求时,调用Sentinel登录接口获取Token并写入到Cookie中,用于Sentinel后续接口的鉴权操作 Signed-off-by: OTTO <731554297@qq.com> --- .../system/api/RemoteGatewayService.java | 23 ++++++++++ .../system/api/RemoteZoneService.java | 4 +- .../factory/RemoteGatewayFallbackFactory.java | 29 ++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../core/constant/ServiceNameConstants.java | 4 ++ .../common/core/constant/TokenConstants.java | 4 ++ .../common/core/utils/CookieUtil.java | 40 +++++++++++++++++ .../gateway/filter/AuthFilter.java | 44 ++++++++++++++++++- 8 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java create mode 100644 microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java create mode 100644 microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/CookieUtil.java diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java new file mode 100644 index 000000000..661f3ebc9 --- /dev/null +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java @@ -0,0 +1,23 @@ +package com.microservices.system.api; + +import com.microservices.common.core.constant.ServiceNameConstants; +import com.microservices.system.api.factory.RemoteGatewayFallbackFactory; +import feign.Response; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * 网关 + * + * @author microservices + */ +@FeignClient(contextId = "remoteGatewayService", value = ServiceNameConstants.GATEWAY_SERVICE, fallbackFactory = RemoteGatewayFallbackFactory.class) +public interface RemoteGatewayService { + /** + * 登录Sentinel + * + * @return 响应 + */ + @PostMapping("/sentinel/auth/login?password=sentinel&username=sentinel") + public Response loginSentinel(); +} diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteZoneService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteZoneService.java index 9663b6317..257f50f09 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteZoneService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteZoneService.java @@ -4,7 +4,7 @@ import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.constant.ServiceNameConstants; import com.microservices.common.core.domain.R; import com.microservices.system.api.domain.SysDept; -import com.microservices.system.api.factory.RemoteCmsFallbackFactory; +import com.microservices.system.api.factory.RemoteZoneFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -15,7 +15,7 @@ import java.util.List; * * @author microservices */ -@FeignClient(contextId = "remoteZoneService", value = ServiceNameConstants.ZONE_SERVICE, fallbackFactory = RemoteCmsFallbackFactory.class) +@FeignClient(contextId = "remoteZoneService", value = ServiceNameConstants.ZONE_SERVICE, fallbackFactory = RemoteZoneFallbackFactory.class) public interface RemoteZoneService { /** * 新增组织时自动创建特色专区 diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java new file mode 100644 index 000000000..85d534e6a --- /dev/null +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java @@ -0,0 +1,29 @@ +package com.microservices.system.api.factory; + +import com.microservices.system.api.RemoteGatewayService; +import feign.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * 用户服务降级处理 + * + * @author microservices + */ +@Component +public class RemoteGatewayFallbackFactory implements FallbackFactory { + private static final Logger log = LoggerFactory.getLogger(RemoteGatewayFallbackFactory.class); + + @Override + public RemoteGatewayService create(Throwable throwable) { + log.error("网关服务调用失败:{}", throwable.getMessage()); + return new RemoteGatewayService() { + @Override + public Response loginSentinel() { + return null; + } + }; + } +} diff --git a/microservices-api/microservices-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/microservices-api/microservices-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 4610a12d4..707296a15 100644 --- a/microservices-api/microservices-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/microservices-api/microservices-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -5,3 +5,4 @@ com.microservices.system.api.factory.RemoteFileFallbackFactory com.microservices.system.api.factory.RemoteCmsFallbackFactory com.microservices.system.api.factory.RemoteZoneFallbackFactory com.microservices.system.api.factory.RemotePmsFallbackFactory +com.microservices.system.api.factory.RemoteGatewayFallbackFactory diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ServiceNameConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ServiceNameConstants.java index 6b7f22b25..b212bedec 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ServiceNameConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ServiceNameConstants.java @@ -32,4 +32,8 @@ public class ServiceNameConstants { * 项目管理模块的serviceid */ public static final String PMS_SERVICE = "microservices-pms"; + /** + * 网关模块的serviceid + */ + public static final String GATEWAY_SERVICE = "microservices-gateway"; } diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java index a56358dc4..a74ad6b35 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java @@ -18,6 +18,10 @@ public class TokenConstants { * GitLink令牌标识 */ public static final String GitLink_Token_Key = "autologin_trustie="; + /** + * Sentinel令牌标识 + */ + public static final String Sentinel_Token_Key = "sentinel_dashboard_cookie"; /** * Cookie中令牌标识 */ diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/CookieUtil.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/CookieUtil.java new file mode 100644 index 000000000..d43cddcf0 --- /dev/null +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/CookieUtil.java @@ -0,0 +1,40 @@ +package com.microservices.common.core.utils; + +import java.util.HashMap; + +public class CookieUtil { + + + public static HashMap getCookieMap(String cookie) { + HashMap map = new HashMap<>(); + if (cookie != null) { + String[] cookies = cookie.split(";"); + for (String cookieStr : cookies) { + String[] cookieArr = cookieStr.split("="); + String key = cookieArr[0].trim(); + String value = cookieArr[0].trim(); + map.put(key, value); + } + } + return map; + } + + public static String getCookieValue(String cookie, String key) { + HashMap map = getCookieMap(cookie); + return map.get(key); + } + + public static String removeCookieKey(String cookie, String key) { + HashMap map = getCookieMap(cookie); + map.remove(key); + return genCookieStr(map); + } + + private static String genCookieStr(HashMap cookieMap) { + StringBuilder stringBuilder = new StringBuilder(); + for (String key : cookieMap.keySet()) { + stringBuilder.append(key).append("=").append(cookieMap.get(key)).append(";"); + } + return stringBuilder.toString(); + } +} diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index 939ba5d3b..a0b8cdc88 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -6,14 +6,17 @@ import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.constant.TokenConstants; import com.microservices.common.core.domain.R; import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.CookieUtil; import com.microservices.common.core.utils.JwtUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; import com.microservices.gateway.config.properties.IgnoreWhiteProperties; +import com.microservices.system.api.RemoteGatewayService; import com.microservices.system.api.RemoteUserService; import com.microservices.system.api.domain.SysUserDeptRole; import com.microservices.system.api.utils.FeignUtils; +import feign.Response; import io.jsonwebtoken.Claims; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,10 +30,13 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; /** * 网关鉴权 @@ -50,9 +56,43 @@ public class AuthFilter implements GlobalFilter, Ordered { @Lazy @Autowired private RemoteUserService remoteUserService; + @Lazy + @Autowired + private RemoteGatewayService remoteGatewayService; ExecutorService executorService = Executors.newFixedThreadPool(1); + /** + * 处理第三方工具请求 + */ + private void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { + String url = request.getURI().getPath(); + if (StringUtils.isEmpty(url)) { + return; + } + + if (url.toLowerCase().startsWith("/sentinel")) { + // 检查Cookie中是否携带sentinel cookie + String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); + if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Sentinel_Token_Key))) { + cookie = CookieUtil.removeCookieKey(cookie, TokenConstants.Sentinel_Token_Key); + } + // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token + Future future = executorService.submit(() -> remoteGatewayService.loginSentinel()); + try { + Response response = future.get(1, TimeUnit.SECONDS); + Map> header = response.headers(); + if (header != null && header.containsKey("set-cookie")) { + String sentinelCookie = header.get("set-cookie").iterator().next(); + ServletUtils.removeHeader(mutate, TokenConstants.Cookie); + mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, sentinelCookie)); + } + } catch (Exception e) { + log.error("获取Sentinel Token失败:{0}", e); + } + } + } + @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); @@ -105,6 +145,8 @@ public class AuthFilter implements GlobalFilter, Ordered { ServletUtils.addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); // 内部请求来源参数清除 ServletUtils.removeHeader(mutate, SecurityConstants.FROM_SOURCE); + + handleRequestForThirdPartyTools(request, mutate); return chain.filter(exchange.mutate().request(mutate.build()).build()); } @@ -130,7 +172,7 @@ public class AuthFilter implements GlobalFilter, Ordered { } private String genCookieByToken(String token) { - return String.format("%s%s;",TokenConstants.GitLink_Token_Key, token); + return String.format("%s%s;", TokenConstants.GitLink_Token_Key, token); } private String getGitLinkRequestCookie(ServerHttpRequest request) { From de9f31a1033c15ffdee5dfe2c1cc8625e42d89d0 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 11 Oct 2024 08:40:04 +0800 Subject: [PATCH 002/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Nacos=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 识别到Nacos请求时,调用Nacos登录接口获取Token并写入到请求头中,用于Nacos后续接口的鉴权操作 Signed-off-by: OTTO <731554297@qq.com> --- .../system/api/RemoteGatewayService.java | 18 ++++++++++++-- .../factory/RemoteGatewayFallbackFactory.java | 8 ++++++- .../common/core/utils/CookieUtil.java | 2 +- .../gateway/filter/AuthFilter.java | 24 ++++++++++++++++--- 4 files changed, 45 insertions(+), 7 deletions(-) diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java index 661f3ebc9..b3088158f 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java @@ -2,15 +2,20 @@ package com.microservices.system.api; import com.microservices.common.core.constant.ServiceNameConstants; import com.microservices.system.api.factory.RemoteGatewayFallbackFactory; +import feign.Headers; import feign.Response; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; /** * 网关 * * @author microservices */ +@Component @FeignClient(contextId = "remoteGatewayService", value = ServiceNameConstants.GATEWAY_SERVICE, fallbackFactory = RemoteGatewayFallbackFactory.class) public interface RemoteGatewayService { /** @@ -18,6 +23,15 @@ public interface RemoteGatewayService { * * @return 响应 */ - @PostMapping("/sentinel/auth/login?password=sentinel&username=sentinel") - public Response loginSentinel(); + @PostMapping("/sentinel/auth/login") + Response loginSentinel(@RequestParam("username") String username, @RequestParam("password") String password); + + /** + * 登录Nacos + * + * @return 响应 + */ + @PostMapping("/nacos/v1/auth/users/login") + @Headers("Content-Type: application/x-www-form-urlencoded") + Response loginNacos(@RequestPart("username") String username, @RequestPart("password") String password); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java index 85d534e6a..a09370d31 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java @@ -20,8 +20,14 @@ public class RemoteGatewayFallbackFactory implements FallbackFactory future = executorService.submit(() -> remoteGatewayService.loginSentinel()); + // 网关采用异步架构,所以此处需要通过异步请求获取Sentinel Token + Future future = executorService.submit(() -> remoteGatewayService.loginSentinel("sentinel", "sentinel")); try { Response response = future.get(1, TimeUnit.SECONDS); Map> header = response.headers(); @@ -91,6 +94,21 @@ public class AuthFilter implements GlobalFilter, Ordered { log.error("获取Sentinel Token失败:{0}", e); } } + // 处理Nacos请求 + if (url.toLowerCase().startsWith("/nacos")) { + // 网关采用异步架构,所以此处需要通过异步请求获取Nacos Token + Future future = executorService.submit(() -> remoteGatewayService.loginNacos("nacos", "nacos")); + try { + Response res = future.get(1, TimeUnit.SECONDS); + StringWriter writer = new StringWriter(); + IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); + String str = writer.toString(); + System.out.println(str); + } catch (Exception e) { + log.error("获取Nacos Token失败:{0}", e); + } + } + } @Override From 57a10a1a983bbbc6b68489af3a11dc195944c26a Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 18 Oct 2024 09:40:20 +0800 Subject: [PATCH 003/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Nacos=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Feign支持Form表单提交 Signed-off-by: OTTO <731554297@qq.com> --- .../security/feign/FeignAutoConfiguration.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/microservices-common/microservices-common-security/src/main/java/com/microservices/common/security/feign/FeignAutoConfiguration.java b/microservices-common/microservices-common-security/src/main/java/com/microservices/common/security/feign/FeignAutoConfiguration.java index bb17e5244..ba6f95f20 100644 --- a/microservices-common/microservices-common-security/src/main/java/com/microservices/common/security/feign/FeignAutoConfiguration.java +++ b/microservices-common/microservices-common-security/src/main/java/com/microservices/common/security/feign/FeignAutoConfiguration.java @@ -1,9 +1,16 @@ package com.microservices.common.security.feign; import feign.RequestInterceptor; +import feign.codec.Encoder; +import feign.form.FormEncoder; +import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.http.HttpMessageConverters; +import org.springframework.cloud.openfeign.support.SpringEncoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; + /** * Feign 配置注册 * @@ -12,9 +19,20 @@ import org.springframework.context.annotation.Configuration; @Configuration public class FeignAutoConfiguration { + // 这里会由容器自动注入HttpMessageConverters的对象工厂 + @Autowired + private ObjectFactory messageConverters; @Bean public RequestInterceptor requestInterceptor() { return new FeignRequestInterceptor(); } + + // new一个form编码器,实现支持form表单提交 + // 注意这里方法名称,也就是bean的名称是什么不重要, + // 重要的是返回类型要是 Encoder 并且实现类必须是 FormEncoder 或者其子类 + @Bean + public Encoder feignFormEncoder() { + return new FormEncoder(new SpringEncoder(messageConverters)); + } } From 62495f0f33988d6e524a5cb368dd8d373edf1727 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 18 Oct 2024 09:41:05 +0800 Subject: [PATCH 004/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Nacos=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nacos登录接口:用户名/密码调整为表单提交 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/system/api/RemoteGatewayService.java | 9 ++++----- .../system/api/factory/RemoteGatewayFallbackFactory.java | 4 +++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java index b3088158f..e6103bbff 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java @@ -2,13 +2,13 @@ package com.microservices.system.api; import com.microservices.common.core.constant.ServiceNameConstants; import com.microservices.system.api.factory.RemoteGatewayFallbackFactory; -import feign.Headers; import feign.Response; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestPart; + +import java.util.Map; /** * 网关 @@ -31,7 +31,6 @@ public interface RemoteGatewayService { * * @return 响应 */ - @PostMapping("/nacos/v1/auth/users/login") - @Headers("Content-Type: application/x-www-form-urlencoded") - Response loginNacos(@RequestPart("username") String username, @RequestPart("password") String password); + @PostMapping(value = "/nacos/v1/auth/users/login", consumes = {"application/x-www-form-urlencoded"}) + Response loginNacos(Map formParams); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java index a09370d31..2a8391a8f 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java @@ -7,6 +7,8 @@ import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import java.util.Map; + /** * 用户服务降级处理 * @@ -27,7 +29,7 @@ public class RemoteGatewayFallbackFactory implements FallbackFactory formParams) { return null; } }; From e2138020be6d7fa3b357a8bb35db1fb07a5aa803 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 18 Oct 2024 09:43:46 +0800 Subject: [PATCH 005/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Nacos=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 调用Nacos登录接口后将响应结果中的accessToken添加到请求头中 2. 增加Redis对Sentinel和Nacos的Token进行缓存,减少登录接口重复调用次数,加快第三方开源软件调用的响应速度 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/constant/CacheConstants.java | 11 +++ .../common/core/constant/TokenConstants.java | 4 + .../gateway/CustomExecutorFactory.java | 35 ++++++++ .../gateway/filter/AuthFilter.java | 90 ++++++++++++------- 4 files changed, 110 insertions(+), 30 deletions(-) create mode 100644 microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java index 60c443219..22ed5c915 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java @@ -208,4 +208,15 @@ public class CacheConstants public static String getGitlinkOrgIdOpenEnterpriseKey(Long gitlinkOrgId) { return GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY + gitlinkOrgId; } + + /** + * Sentinel Token缓存Key + */ + public final static String SENTINEL_TOKEN = "sentinel_token"; + + + /** + * Nacos Token缓存Key + */ + public static final String NACOS_TOKEN = "nacos_token"; } diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java index a74ad6b35..e9349b3aa 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java @@ -22,6 +22,10 @@ public class TokenConstants { * Sentinel令牌标识 */ public static final String Sentinel_Token_Key = "sentinel_dashboard_cookie"; + /** + * Sentinel令牌标识 + */ + public static final String Nacos_Token_Key = "Accesstoken"; /** * Cookie中令牌标识 */ diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java b/microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java new file mode 100644 index 000000000..c18c39865 --- /dev/null +++ b/microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java @@ -0,0 +1,35 @@ +package com.microservices.gateway; + +import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.threadPool.ThreadPoolExecutorWrap; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author OTTO + */ +public class CustomExecutorFactory { + /** + * 创建线程池 + * 存在并发处理的情况,设置核心线程为2,设置有界队列长度为100,最大线程数为10 + * 当超出队列已满且达到最大线程数时抛出异常 + * Ncpu=CPU数量 + * Ucpu=目标CPU的使用率,0<=Ucpu<=1 + * W/C=任务等待时间与任务计算时间的比率 + * Nthreads =Ncpu*Ucpu*(1+W/C) + */ + public static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutorWrap( + 4 + , 10 + , 10 + , TimeUnit.SECONDS + , new ArrayBlockingQueue<>(100) + , Executors.defaultThreadFactory() + , (r, executor) -> { + throw new ServiceException("目前处理的人太多了,请稍后再试"); + } + ); +} diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index 7b1483a24..ab176a9ca 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -1,5 +1,6 @@ package com.microservices.gateway.filter; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.HttpStatus; import com.microservices.common.core.constant.SecurityConstants; @@ -11,6 +12,7 @@ import com.microservices.common.core.utils.JwtUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; +import com.microservices.gateway.CustomExecutorFactory; import com.microservices.gateway.config.properties.IgnoreWhiteProperties; import com.microservices.system.api.RemoteGatewayService; import com.microservices.system.api.RemoteUserService; @@ -31,15 +33,14 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import java.io.IOException; import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; /** * 网关鉴权 @@ -63,7 +64,7 @@ public class AuthFilter implements GlobalFilter, Ordered { @Autowired private RemoteGatewayService remoteGatewayService; - ExecutorService executorService = Executors.newFixedThreadPool(1); + ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; /** * 处理第三方工具请求 @@ -80,35 +81,64 @@ public class AuthFilter implements GlobalFilter, Ordered { if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Sentinel_Token_Key))) { cookie = CookieUtil.removeCookieKey(cookie, TokenConstants.Sentinel_Token_Key); } - // 网关采用异步架构,所以此处需要通过异步请求获取Sentinel Token - Future future = executorService.submit(() -> remoteGatewayService.loginSentinel("sentinel", "sentinel")); - try { - Response response = future.get(1, TimeUnit.SECONDS); - Map> header = response.headers(); - if (header != null && header.containsKey("set-cookie")) { - String sentinelCookie = header.get("set-cookie").iterator().next(); - ServletUtils.removeHeader(mutate, TokenConstants.Cookie); - mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, sentinelCookie)); + String sentinelCookie = null; + if (redisService.hasKey(CacheConstants.SENTINEL_TOKEN)) { + sentinelCookie = redisService.getCacheObject(CacheConstants.SENTINEL_TOKEN); + } else { + // 网关采用异步架构,所以此处需要通过异步请求获取Sentinel Token + Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginSentinel("sentinel", "sentinel")); + try { + Response response = future.get(1, TimeUnit.SECONDS); + Map> header = response.headers(); + if (header != null && header.containsKey("set-cookie")) { + sentinelCookie = header.get("set-cookie").iterator().next(); + redisService.setCacheObject(CacheConstants.SENTINEL_TOKEN, sentinelCookie, 12L, TimeUnit.HOURS); + } + } catch (TimeoutException e) { + log.error("获取Sentinel Token超时"); + } catch (InterruptedException | ExecutionException e) { + log.error("获取Sentinel Token失败:{}", e.getMessage()); } - } catch (Exception e) { - log.error("获取Sentinel Token失败:{0}", e); + } + if (StringUtils.isNotEmpty(sentinelCookie)) { + ServletUtils.removeHeader(mutate, TokenConstants.Cookie); + mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, sentinelCookie)); } } // 处理Nacos请求 if (url.toLowerCase().startsWith("/nacos")) { - // 网关采用异步架构,所以此处需要通过异步请求获取Nacos Token - Future future = executorService.submit(() -> remoteGatewayService.loginNacos("nacos", "nacos")); - try { - Response res = future.get(1, TimeUnit.SECONDS); - StringWriter writer = new StringWriter(); - IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); - String str = writer.toString(); - System.out.println(str); - } catch (Exception e) { - log.error("获取Nacos Token失败:{0}", e); + String nacosToken = null; + if (redisService.hasKey(CacheConstants.NACOS_TOKEN)) { + nacosToken = redisService.getCacheObject(CacheConstants.NACOS_TOKEN); + } else { + Map nacosMap = new HashMap<>(); + nacosMap.put("username", "nacos"); + nacosMap.put("password", "nacos"); + // 网关采用异步架构,所以此处需要通过异步请求获取Nacos Token + Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginNacos(nacosMap)); + try { + Response res = future.get(1, TimeUnit.SECONDS); + StringWriter writer = new StringWriter(); + IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); + String str = writer.toString(); + JSONObject resJsonObject = JSONObject.parseObject(str); + nacosToken = resJsonObject.getString("accessToken"); + Long tokenTtl = resJsonObject.getLong("tokenTtl"); + if (nacosToken != null && tokenTtl != null) { + redisService.setCacheObject(CacheConstants.NACOS_TOKEN, nacosToken, tokenTtl - 10, TimeUnit.SECONDS); + } else { + throw new ServiceException("Nacos服务获取Token失败"); + } + } catch (TimeoutException e) { + log.error("获取Nacos Token超时"); + } catch (InterruptedException | ExecutionException | IOException | NullPointerException e) { + log.error("获取Nacos Token失败:{}", e.getMessage()); + } + } + if (StringUtils.isNotEmpty(nacosToken)) { + mutate.header(TokenConstants.Nacos_Token_Key, nacosToken); } } - } @Override @@ -176,7 +206,7 @@ public class AuthFilter implements GlobalFilter, Ordered { boolean hasUserIdentifyList = redisService.hasKey(redisKey); if (!hasUserIdentifyList) { // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token - Future>> future = executorService.submit( + Future>> future = threadPoolExecutor.submit( () -> remoteUserService.getSysUserDeptRoleListByUserName(username, SecurityConstants.INNER)); try { List feignResult = FeignUtils.getReturnData( @@ -201,7 +231,7 @@ public class AuthFilter implements GlobalFilter, Ordered { String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); if (token != null) { // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token - Future> future = executorService.submit( + Future> future = threadPoolExecutor.submit( () -> remoteUserService.checkGitLinkUserLogin(token, SecurityConstants.INNER)); try { Boolean feignResult = FeignUtils.getReturnData( @@ -254,7 +284,7 @@ public class AuthFilter implements GlobalFilter, Ordered { private String getGitLinkToken(String cookie) { if (StringUtils.isNotEmpty(cookie)) { // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token - Future> future = executorService.submit(() -> remoteUserService + Future> future = threadPoolExecutor.submit(() -> remoteUserService .getSysUserTokenByGitLinkCookie(cookie, SecurityConstants.INNER)); R feignResult; try { From a44127858e0137ce6d2ab78119d6a378279cd103 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 19 Oct 2024 14:04:04 +0800 Subject: [PATCH 006/270] =?UTF-8?q?feat(=E8=B0=83=E7=94=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=BE=AE=E6=9C=8D=E5=8A=A1):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86Portainer=E8=AF=B7=E6=B1=82=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 识别到Portainer请求时,调用Portainer登录接口获取Token并写入到请求头中,解析Token的过期时间,将Token存储到Redis中,以便后续Portainer接口鉴权使用 Signed-off-by: OTTO <731554297@qq.com> --- .../system/api/RemoteGatewayService.java | 10 + .../factory/RemoteGatewayFallbackFactory.java | 7 + .../common/core/constant/CacheConstants.java | 5 + .../gateway/config/FeignConfig.java | 11 ++ .../gateway/filter/AuthFilter.java | 94 +--------- .../service/ThirdPartyToolService.java | 19 ++ .../impl/ThirdPartyToolServiceImpl.java | 173 ++++++++++++++++++ 7 files changed, 231 insertions(+), 88 deletions(-) create mode 100644 microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java create mode 100644 microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java index e6103bbff..341ce2cfd 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteGatewayService.java @@ -1,11 +1,13 @@ package com.microservices.system.api; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.ServiceNameConstants; import com.microservices.system.api.factory.RemoteGatewayFallbackFactory; import feign.Response; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.Map; @@ -33,4 +35,12 @@ public interface RemoteGatewayService { */ @PostMapping(value = "/nacos/v1/auth/users/login", consumes = {"application/x-www-form-urlencoded"}) Response loginNacos(Map formParams); + + /** + * 登录Portainer + * + * @return 响应 + */ + @PostMapping("/portainer/api/auth") + Response loginPortainer(@RequestBody JSONObject loginBody); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java index 2a8391a8f..044d8e211 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteGatewayFallbackFactory.java @@ -1,5 +1,6 @@ package com.microservices.system.api.factory; +import com.alibaba.fastjson2.JSONObject; import com.microservices.system.api.RemoteGatewayService; import feign.Response; import org.slf4j.Logger; @@ -32,6 +33,12 @@ public class RemoteGatewayFallbackFactory implements FallbackFactory formParams) { return null; } + + @Override + public Response loginPortainer(JSONObject loginBody) { + System.out.println(throwable.getMessage()); + return null; + } }; } } diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java index 22ed5c915..bd45f6119 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java @@ -219,4 +219,9 @@ public class CacheConstants * Nacos Token缓存Key */ public static final String NACOS_TOKEN = "nacos_token"; + + /** + * Portainer Token缓存Key + */ + public static final String PORTAINER_TOKEN = "portainer_token"; } diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/config/FeignConfig.java b/microservices-gateway/src/main/java/com/microservices/gateway/config/FeignConfig.java index df8de2118..f5d452a25 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/config/FeignConfig.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/config/FeignConfig.java @@ -2,13 +2,18 @@ package com.microservices.gateway.config; import feign.codec.Decoder; import org.springframework.beans.factory.ObjectFactory; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.cloud.openfeign.support.ResponseEntityDecoder; import org.springframework.cloud.openfeign.support.SpringDecoder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import java.util.stream.Collectors; + /** * @author otto */ @@ -25,4 +30,10 @@ public class FeignConfig { (new MappingJackson2HttpMessageConverter()); return () -> httpMessageConverters; } + + @Bean + @ConditionalOnMissingBean + public HttpMessageConverters messageConverters(ObjectProvider> converters) { + return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList())); + } } \ No newline at end of file diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index ab176a9ca..69ce7a78e 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -1,26 +1,22 @@ package com.microservices.gateway.filter; -import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.HttpStatus; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.constant.TokenConstants; import com.microservices.common.core.domain.R; import com.microservices.common.core.exception.ServiceException; -import com.microservices.common.core.utils.CookieUtil; import com.microservices.common.core.utils.JwtUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; import com.microservices.gateway.CustomExecutorFactory; import com.microservices.gateway.config.properties.IgnoreWhiteProperties; -import com.microservices.system.api.RemoteGatewayService; +import com.microservices.gateway.service.ThirdPartyToolService; import com.microservices.system.api.RemoteUserService; import com.microservices.system.api.domain.SysUserDeptRole; import com.microservices.system.api.utils.FeignUtils; -import feign.Response; import io.jsonwebtoken.Claims; -import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -33,14 +29,9 @@ import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; -import java.io.IOException; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; -import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.concurrent.*; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadPoolExecutor; /** * 网关鉴权 @@ -60,86 +51,13 @@ public class AuthFilter implements GlobalFilter, Ordered { @Lazy @Autowired private RemoteUserService remoteUserService; + @Lazy @Autowired - private RemoteGatewayService remoteGatewayService; + private ThirdPartyToolService thirdPartyToolService; ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; - /** - * 处理第三方工具请求 - */ - private void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { - String url = request.getURI().getPath(); - if (StringUtils.isEmpty(url)) { - return; - } - // 处理Sentinel请求 - if (url.toLowerCase().startsWith("/sentinel")) { - // 检查Cookie中是否携带sentinel cookie - String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); - if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Sentinel_Token_Key))) { - cookie = CookieUtil.removeCookieKey(cookie, TokenConstants.Sentinel_Token_Key); - } - String sentinelCookie = null; - if (redisService.hasKey(CacheConstants.SENTINEL_TOKEN)) { - sentinelCookie = redisService.getCacheObject(CacheConstants.SENTINEL_TOKEN); - } else { - // 网关采用异步架构,所以此处需要通过异步请求获取Sentinel Token - Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginSentinel("sentinel", "sentinel")); - try { - Response response = future.get(1, TimeUnit.SECONDS); - Map> header = response.headers(); - if (header != null && header.containsKey("set-cookie")) { - sentinelCookie = header.get("set-cookie").iterator().next(); - redisService.setCacheObject(CacheConstants.SENTINEL_TOKEN, sentinelCookie, 12L, TimeUnit.HOURS); - } - } catch (TimeoutException e) { - log.error("获取Sentinel Token超时"); - } catch (InterruptedException | ExecutionException e) { - log.error("获取Sentinel Token失败:{}", e.getMessage()); - } - } - if (StringUtils.isNotEmpty(sentinelCookie)) { - ServletUtils.removeHeader(mutate, TokenConstants.Cookie); - mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, sentinelCookie)); - } - } - // 处理Nacos请求 - if (url.toLowerCase().startsWith("/nacos")) { - String nacosToken = null; - if (redisService.hasKey(CacheConstants.NACOS_TOKEN)) { - nacosToken = redisService.getCacheObject(CacheConstants.NACOS_TOKEN); - } else { - Map nacosMap = new HashMap<>(); - nacosMap.put("username", "nacos"); - nacosMap.put("password", "nacos"); - // 网关采用异步架构,所以此处需要通过异步请求获取Nacos Token - Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginNacos(nacosMap)); - try { - Response res = future.get(1, TimeUnit.SECONDS); - StringWriter writer = new StringWriter(); - IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); - String str = writer.toString(); - JSONObject resJsonObject = JSONObject.parseObject(str); - nacosToken = resJsonObject.getString("accessToken"); - Long tokenTtl = resJsonObject.getLong("tokenTtl"); - if (nacosToken != null && tokenTtl != null) { - redisService.setCacheObject(CacheConstants.NACOS_TOKEN, nacosToken, tokenTtl - 10, TimeUnit.SECONDS); - } else { - throw new ServiceException("Nacos服务获取Token失败"); - } - } catch (TimeoutException e) { - log.error("获取Nacos Token超时"); - } catch (InterruptedException | ExecutionException | IOException | NullPointerException e) { - log.error("获取Nacos Token失败:{}", e.getMessage()); - } - } - if (StringUtils.isNotEmpty(nacosToken)) { - mutate.header(TokenConstants.Nacos_Token_Key, nacosToken); - } - } - } @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { @@ -194,7 +112,7 @@ public class AuthFilter implements GlobalFilter, Ordered { // 内部请求来源参数清除 ServletUtils.removeHeader(mutate, SecurityConstants.FROM_SOURCE); - handleRequestForThirdPartyTools(request, mutate); + thirdPartyToolService.handleRequestForThirdPartyTools(request, mutate); return chain.filter(exchange.mutate().request(mutate.build()).build()); } diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java new file mode 100644 index 000000000..efc7d4b58 --- /dev/null +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java @@ -0,0 +1,19 @@ +package com.microservices.gateway.service; + +import org.springframework.http.server.reactive.ServerHttpRequest; + +/** + * 第三方工具服务类 + * + * @author OTTO + */ +public interface ThirdPartyToolService { + + /** + * 处理第三方工具请求 + * + * @param request 请求 + * @param mutate 请求头获取器 + */ + void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate); +} diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java new file mode 100644 index 000000000..f6b2bca05 --- /dev/null +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -0,0 +1,173 @@ +package com.microservices.gateway.service.impl; + +import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.constant.CacheConstants; +import com.microservices.common.core.constant.TokenConstants; +import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.CookieUtil; +import com.microservices.common.core.utils.ServletUtils; +import com.microservices.common.core.utils.StringUtils; +import com.microservices.common.redis.service.RedisService; +import com.microservices.gateway.CustomExecutorFactory; +import com.microservices.gateway.service.ThirdPartyToolService; +import com.microservices.system.api.RemoteGatewayService; +import feign.Response; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.*; + +/** + * @author OTTO + */ +@Service +public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { + private static final Logger log = LoggerFactory.getLogger(ThirdPartyToolServiceImpl.class); + @Value("${thirdPartyTools.nacos.auth.username:}") + public String nacosUsername; + @Value("${thirdPartyTools.nacos.auth.password:}") + public String nacosPassword; + @Value("${thirdPartyTools.sentinel.auth.username:}") + public String sentinelUsername; + @Value("${thirdPartyTools.sentinel.auth.password:}") + public String sentinelPassword; + @Value("${thirdPartyTools.portainer.auth.username:}") + public String portainerUsername; + @Value("${thirdPartyTools.portainer.auth.password:}") + public String portainerPassword; + ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; + @Lazy + @Autowired + private RemoteGatewayService remoteGatewayService; + @Autowired + private RedisService redisService; + + /** + * 处理第三方工具请求 + */ + @Override + public void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { + String url = request.getURI().getPath(); + if (StringUtils.isEmpty(url)) { + return; + } + // 处理Sentinel请求 + if (url.toLowerCase().startsWith("/sentinel")) { + // 检查Cookie中是否携带sentinel cookie + String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); + if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Sentinel_Token_Key))) { + cookie = CookieUtil.removeCookieKey(cookie, TokenConstants.Sentinel_Token_Key); + } + String sentinelCookie = null; + if (redisService.hasKey(CacheConstants.SENTINEL_TOKEN)) { + sentinelCookie = redisService.getCacheObject(CacheConstants.SENTINEL_TOKEN); + } else { + // 网关采用异步架构,所以此处需要通过异步请求获取Sentinel Token + Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginSentinel(sentinelUsername, sentinelPassword)); + try { + Response response = future.get(1, TimeUnit.SECONDS); + Map> header = response.headers(); + if (header != null && header.containsKey("set-cookie")) { + sentinelCookie = header.get("set-cookie").iterator().next(); + redisService.setCacheObject(CacheConstants.SENTINEL_TOKEN, sentinelCookie, 12L, TimeUnit.HOURS); + } + } catch (TimeoutException e) { + log.error("获取Sentinel Token超时"); + } catch (InterruptedException | ExecutionException e) { + log.error("获取Sentinel Token失败:{}", e.getMessage()); + } + } + if (StringUtils.isNotEmpty(sentinelCookie)) { + ServletUtils.removeHeader(mutate, TokenConstants.Cookie); + mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, sentinelCookie)); + } else { + throw new ServiceException("Sentinel服务获取Token失败"); + } + } + // 处理Nacos请求 + if (url.toLowerCase().startsWith("/nacos")) { + String nacosToken = null; + if (redisService.hasKey(CacheConstants.NACOS_TOKEN)) { + nacosToken = redisService.getCacheObject(CacheConstants.NACOS_TOKEN); + } else { + Map nacosMap = new HashMap<>(); + nacosMap.put("username", nacosUsername); + nacosMap.put("password", nacosPassword); + // 网关采用异步架构,所以此处需要通过异步请求获取Nacos Token + Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginNacos(nacosMap)); + try { + Response res = future.get(1, TimeUnit.SECONDS); + StringWriter writer = new StringWriter(); + IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); + String str = writer.toString(); + JSONObject resJsonObject = JSONObject.parseObject(str); + nacosToken = resJsonObject.getString("accessToken"); + Long tokenTtl = resJsonObject.getLong("tokenTtl"); + if (nacosToken != null && tokenTtl != null) { + redisService.setCacheObject(CacheConstants.NACOS_TOKEN, nacosToken, tokenTtl - 10, TimeUnit.SECONDS); + } + } catch (TimeoutException e) { + log.error("获取Nacos Token超时"); + } catch (InterruptedException | ExecutionException | IOException | NullPointerException e) { + log.error("获取Nacos Token失败:{}", e.getMessage()); + } + } + if (StringUtils.isNotEmpty(nacosToken)) { + mutate.header(TokenConstants.Nacos_Token_Key, nacosToken); + } else { + throw new ServiceException("Nacos服务获取Token失败"); + } + } + + // 处理Nacos请求 + if (url.toLowerCase().startsWith("/portainer")) { + String portainerToken = null; + if (redisService.hasKey(CacheConstants.PORTAINER_TOKEN)) { + portainerToken = redisService.getCacheObject(CacheConstants.PORTAINER_TOKEN); + } else { + // 网关采用异步架构,所以此处需要通过异步请求获取Portainer Token + JSONObject loginPortainerBody = new JSONObject(); + loginPortainerBody.put("username", portainerUsername); + loginPortainerBody.put("password", portainerPassword); + Future future = threadPoolExecutor.submit(() -> remoteGatewayService.loginPortainer(loginPortainerBody)); + try { + Response res = future.get(1, TimeUnit.SECONDS); + StringWriter writer = new StringWriter(); + IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); + String str = writer.toString(); + JSONObject resJsonObject = JSONObject.parseObject(str); + portainerToken = resJsonObject.getString("jwt"); + String[] tokenSplit = portainerToken.split("\\."); + String tokenBodyStr = new String(Base64.getDecoder().decode(tokenSplit[1]), StandardCharsets.UTF_8); + JSONObject tokenBody = JSONObject.parseObject(tokenBodyStr); + Long expiration = tokenBody.getLong("exp"); + Long now = new Date().getTime() / 1000; + + long portainerTokenTtl = expiration - now; + if (portainerTokenTtl > 20) { + redisService.setCacheObject(CacheConstants.PORTAINER_TOKEN, portainerToken, portainerTokenTtl - 10, TimeUnit.SECONDS); + } + } catch (TimeoutException e) { + log.error("获取Portainer Token超时"); + } catch (InterruptedException | ExecutionException | IOException | NullPointerException e) { + log.error("获取Portainer Token失败:{}", e.getMessage()); + } + } + if (StringUtils.isNotEmpty(portainerToken)) { + mutate.header(TokenConstants.AUTHENTICATION, TokenConstants.PREFIX + portainerToken); + } else { + throw new ServiceException("Portainer服务获取Token失败"); + } + } + } +} From c900fed456651d7716a6dc3c303ef050f24900ee Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 19 Oct 2024 14:44:02 +0800 Subject: [PATCH 007/270] =?UTF-8?q?perf(=E7=BD=91=E5=85=B3=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1):=20=E4=BC=98=E5=8C=96=E7=BD=91=E5=85=B3=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8B=A6=E6=88=AA=E5=BC=82=E5=B8=B8=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../main/java/com/microservices/gateway/filter/AuthFilter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index 69ce7a78e..b1502a6a1 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -81,6 +81,9 @@ public class AuthFilter implements GlobalFilter, Ordered { } if (StringUtils.isEmpty(token)) { + if (StringUtils.isNotEmpty(gitLinkCookie)) { + return unauthorizedResponse(exchange, "令牌已过期或验证不正确!"); + } return unauthorizedResponse(exchange, "令牌不能为空"); } Claims claims; From 60cf5b9cbadc3b2422f9ad1d723a9bb99aaf240c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 28 Nov 2024 09:35:31 +0800 Subject: [PATCH 008/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E8=B0=83=E6=95=B4=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/PmsProductRequirement.java | 22 ++++++++++-- .../pms/product/domain/ProductReqStatus.java | 36 +++++++++++++++++++ .../domain/vo/PmsProductPlanSearchVo.java | 5 ++- .../PmsProductRequirementBatchUpdateVo.java | 6 ---- .../vo/PmsProductRequirementDataVo.java | 3 +- .../vo/PmsProductRequirementSearchVo.java | 5 ++- .../vo/PmsProductRequirementUpdateVo.java | 4 --- .../PmsProductRequirementServiceImpl.java | 33 ++++++----------- .../pms/PmsProductRequirementMapper.xml | 34 +++++++++++++----- 9 files changed, 98 insertions(+), 50 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index fc49f7a20..8dcfcf043 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -35,9 +35,8 @@ public class PmsProductRequirement extends BaseEntity @ApiModelProperty(value = "标题") private String title; - /** 关联状态ID */ - @ApiModelProperty(value = "关联状态ID") - private Long statusId; + @ApiModelProperty(value = "产品需求状态") + private String status; /** 关联优先级ID */ @ApiModelProperty(value = "关联优先级ID") @@ -124,6 +123,23 @@ public class PmsProductRequirement extends BaseEntity @JsonInclude(JsonInclude.Include.NON_EMPTY) private List productIdentifierList; + /** + * 原需求id + */ + @ApiModelProperty(value = "原需求id") + private Long fromId; + /** + * 原需求id + */ + @ApiModelProperty(value = "关联项目需求id") + private Long projectReqId; + + @ApiModelProperty(value = "产品需求类型") + private String type; + + @ApiModelProperty(value = "需求标识") + private String identifier; + public PmsProductRequirementDataVo toPmsProductRequirementDataVo(){ PmsProductRequirementDataVo target = new PmsProductRequirementDataVo(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java new file mode 100644 index 000000000..6be9fd8ff --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java @@ -0,0 +1,36 @@ +package com.microservices.pms.product.domain; + +import lombok.Getter; + +/** + * 产品需求状态 + */ +@Getter +public enum ProductReqStatus { + USER_REQ("userReq", "待评审", "待评审的用户需求"), + REJECTED_USER_REQ("rejectedUserReq", "评审失败", "已拒绝的用户需求"), + PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), + REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审", "已评审的需求规格(变更中)"), + PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), + PENDING_MODIFIED_REQ_SPECS("pendingModifiedReqSpecs", "待修正", "待修正的需求规格"), + REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"), + REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"); + private final String key; + private final String name; + private final String remark; + + ProductReqStatus(String key, String name, String remark) { + this.key = key; + this.name = name; + this.remark = remark; + } + + public static ProductReqStatus getByKey(String key) { + for (ProductReqStatus status : ProductReqStatus.values()) { + if (status.getKey().equals(key)) { + return status; + } + } + return null; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java index b680e6940..4f6bf8b7e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java @@ -28,9 +28,8 @@ public class PmsProductPlanSearchVo @NotBlank(message = "产品标识不能为空") private String pmsProductIdentifier; - /** 关联状态ID */ - @ApiModelProperty(value = "关联状态ID") - private Long statusId; + @ApiModelProperty(value = "产品需求状态") + private String status; /** 关联优先级ID */ @ApiModelProperty(value = "关联优先级ID") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java index b284dbedc..c3e35cde8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java @@ -29,11 +29,6 @@ public class PmsProductRequirementBatchUpdateVo private Long priorityId; private Boolean priorityIdIsChange = false; - /** 关联状态ID */ - @ApiModelProperty(value = "关联状态ID") - private Long statusId; - private Boolean statusIdIsChange = false; - /** 关联产品模块ID */ @ApiModelProperty(value = "关联产品模块ID") private Long pmsProductModuleId; @@ -76,7 +71,6 @@ public class PmsProductRequirementBatchUpdateVo public Boolean thisIsChange() { return priorityIdIsChange - || statusIdIsChange || pmsProductModuleIdIsChange || pmsProductPlanIdIsChange || tagIdsIsChange diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java index c7a4100a6..435fedbda 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java @@ -5,6 +5,7 @@ import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.domain.PmsProductModule; import com.microservices.pms.product.domain.PmsProductPlan; +import com.microservices.pms.product.domain.ProductReqStatus; import com.microservices.pms.project.domain.vo.BaseEntityVo; import com.microservices.system.api.domain.SimpleSysUser; import io.swagger.annotations.ApiModel; @@ -42,7 +43,7 @@ public class PmsProductRequirementDataVo extends BaseEntityVo /** 关联状态 */ @ApiModelProperty(value = "关联状态") - private PmsTypeDataVo status; + private ProductReqStatus status; /** 关联产品模块 */ @ApiModelProperty(value = "关联产品模块") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java index 127f6aa0b..42e73a604 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java @@ -39,9 +39,8 @@ public class PmsProductRequirementSearchVo @ApiModelProperty(value = "需求负责人Gitlink ID") private String requirementAssigneeGitlinkId; - /** 关联状态ID */ - @ApiModelProperty(value = "关联状态ID") - private Long statusId; + @ApiModelProperty(value = "产品需求状态") + private String status; /** 创建者 */ @ApiModelProperty(value = "发布者用户名") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java index 2c3a83fcb..af64ff0e8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java @@ -34,10 +34,6 @@ public class PmsProductRequirementUpdateVo @ApiModelProperty(value = "关联优先级ID") private Long priorityId; - /** 关联状态ID */ - @ApiModelProperty(value = "关联状态ID") - private Long statusId; - /** 关联产品模块ID */ @ApiModelProperty(value = "关联产品模块ID") private Long pmsProductModuleId; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 30d1e3c92..ee428ab13 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -13,10 +13,7 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.journals.service.IPmsJournalsService; -import com.microservices.pms.product.domain.PmsProduct; -import com.microservices.pms.product.domain.PmsProductModule; -import com.microservices.pms.product.domain.PmsProductPlan; -import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.*; import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo; @@ -123,8 +120,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductRequirementDataVo.setStatus( PmsUtils.getSelectObjectInCache( hashMap - , pmsProductStatusService::selectPmsProductStatusById - , pmsProductRequirement.getStatusId())); + , ProductReqStatus::getByKey + , pmsProductRequirement.getStatus())); // 设置产品模块 if (pmsProductRequirement.getPmsProductModuleId() != null) { pmsProductRequirementDataVo.setPmsProductModule( @@ -213,9 +210,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); pmsProductRequirement.setPriorityId(priorityId); // 设置默认需求状态 - Long statusId= - pmsProductStatusService.selectPmsProductDefaultStatusId(PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); - pmsProductRequirement.setStatusId(statusId); + // TODO:需要根据用户需求、需求规格来判断需求状态 + // pmsProductRequirement.setStatusId(statusId); checkPmsProductRequirement(pmsProductRequirement, pmsProduct, null); Date now=DateUtils.getNowDate(); @@ -305,12 +301,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductRequirement.setPriorityId(priorityId); } - if(pmsProductRequirement.getStatusId()!=null){ - // 设置需求状态 - Long statusId= - pmsProductStatusService.selectPmsProductStatusIdByInputId(pmsProductRequirement.getStatusId(),PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); - pmsProductRequirement.setStatusId(statusId); - } + // 设置需求状态 + // TODO:需要根据用户需求、需求规格来判断需求状态 + // pmsProductRequirement.setStatusId(statusId); PmsProduct pmsProduct=pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); checkPmsProductRequirement(pmsProductRequirement, pmsProduct, oldPmsProductRequirement); if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() == null) { @@ -457,10 +450,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductRequirementBatchUpdateVo.setPriorityId(jsonObject.getLong("priorityId")); pmsProductRequirementBatchUpdateVo.setPriorityIdIsChange(true); } - if(jsonObject.containsKey("statusId")){ - pmsProductRequirementBatchUpdateVo.setStatusId(jsonObject.getLong("statusId")); - pmsProductRequirementBatchUpdateVo.setStatusIdIsChange(true); - } + // TODO:需考虑是否涉及状态的变更 if(jsonObject.containsKey("pmsProductModuleId")){ pmsProductRequirementBatchUpdateVo.setPmsProductModuleId(jsonObject.getLong("pmsProductModuleId")); pmsProductRequirementBatchUpdateVo.setPmsProductModuleIdIsChange(true); @@ -532,9 +522,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (pmsProductRequirementBatchUpdateVo.getPriorityIdIsChange()) { pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirementBatchUpdateVo.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); } - if (pmsProductRequirementBatchUpdateVo.getStatusIdIsChange()) { - pmsProductStatusService.selectPmsProductStatusIdByInputId(pmsProductRequirementBatchUpdateVo.getStatusId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); - } + + // TODO:需考虑是否涉及状态的变更 } private void checkProjectId(Long projectId, PmsProduct pmsProduct) { diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index f77415100..85d9f60e5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -8,7 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -26,13 +26,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + select id, title, `index`, - status_id, + status, priority_id, pms_product_module_id, pms_product_plan_id, @@ -49,7 +53,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, del_flag, requirement_assignee_gitlink_ids, - pms_project_id + pms_project_id, + from_id, + project_req_id, + type, + identifier from pms_product_requirement @@ -67,7 +75,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and title like concat('%', #{title}, '%') - and status_id = #{statusId} and priority_id = #{priorityId} and pms_product_plan_id = #{pmsProductPlanId} and pms_product_identifier = #{pmsProductIdentifier} @@ -132,7 +139,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" `index`, title, - status_id, + `status`, priority_id, pms_product_module_id, pms_product_plan_id, @@ -150,11 +157,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" del_flag, requirement_assignee_gitlink_ids, pms_project_id, + from_id, + project_req_id, + type, + identifier, #{index}, #{title}, - #{statusId}, + #{status}, #{priorityId}, #{pmsProductModuleId}, #{pmsProductPlanId}, @@ -172,6 +183,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{delFlag}, #{requirementAssigneeGitlinkIds}, #{pmsProjectId}, + #{fromId}, + #{projectReqId}, + #{type}, + #{identifier}, @@ -180,7 +195,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" `index` = #{index}, title = #{title}, - status_id = #{statusId}, + `status` = #{status}, priority_id = #{priorityId}, pms_product_module_id = #{pmsProductModuleId}, pms_product_plan_id = #{pmsProductPlanId}, @@ -198,13 +213,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" del_flag = #{delFlag}, requirement_assignee_gitlink_ids = #{requirementAssigneeGitlinkIds}, pms_project_id = #{pmsProjectId}, + from_id = #{fromId}, + project_req_id = #{project_req_id}, + type = #{type}, + identifier = #{identifier}, where id = #{id} update pms_product_requirement - status_id = #{statusId}, priority_id = #{priorityId}, pms_product_module_id = #{pmsProductModuleId}, pms_product_plan_id = #{pmsProductPlanId}, From c0b4ddb86e371cde009fb1d7164a1f0bff61ac02 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Thu, 28 Nov 2024 14:48:42 +0800 Subject: [PATCH 009/270] =?UTF-8?q?=E5=B0=86=E6=B5=81=E6=B0=B4=E7=BA=BFjso?= =?UTF-8?q?n=E6=96=87=E6=9C=AC=E8=A7=A3=E6=9E=90=E6=88=90yaml=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsCiPipelinesController.java | 8 + .../pms/pipeline/domain/vo/NodeActionVo.java | 120 ++++++++ .../pms/pipeline/domain/vo/PipelineVo.java | 284 ++++++++++++++++++ .../service/IPmsCiPipelinesService.java | 2 + .../impl/PmsCiPipelinesServiceImpl.java | 42 +++ .../com/microservices/pms/utils/YamlUtil.java | 58 ++++ 6 files changed, 514 insertions(+) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PipelineVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/YamlUtil.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java index 3aff4746a..284b8c247 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java @@ -204,6 +204,14 @@ public class PmsCiPipelinesController extends BaseController return success(pmsCiPipelinesService.savePipelineYamlByGraphicJson(id, pmsCiPipelineBuildInputVo)); } + @PostMapping(value = "/{id}/savePipelineYamlNew") + @ApiOperation("流水线图形构建声明式yaml并保存") + public AjaxResult savePipelineYamlNew(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, + @RequestBody @Validated PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) + { + return success(pmsCiPipelinesService.savePipelineYamlByGraphicJsonNew(id, pmsCiPipelineBuildInputVo)); + } + /** * 启动流水线执行记录任务 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java new file mode 100644 index 000000000..41cc9c0ad --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java @@ -0,0 +1,120 @@ +package com.microservices.pms.pipeline.domain.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +@Getter +@Setter +@NoArgsConstructor +public class NodeActionVo { + + private String name; + private final Map on = new LinkedHashMap<>(); + private final Map jobs = new LinkedHashMap<>(); + @JsonIgnore + private Map params = new LinkedHashMap<>(); + + public void buildName(String name) { + this.name = name; + } + + public void buildOn(PipelineVo.PipelineJson.Nodes node) { +// this.on.put("push", Collections.singletonMap("branches", Collections.singletonList(branchName))); + String fullName = node.getFull_name(); + Map step = new LinkedHashMap<>(); + + if (Objects.equals(fullName, "on-schedule")) { + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()); + inputs.forEach(e -> { + step.put(e.getName(), e.getValue()); + }); + this.on.put(fullName.split("-")[1], step); + return; + } + + if (fullName.startsWith("on-")) { + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); + inputs.forEach(e -> { + step.put(e.getName(), e.getValue().replace("\'","").split(",")); + }); + + this.on.put(fullName.split("-")[1], step); + } + } + + public void buildJobs(String jobKey, String jobName, List> steps) { + if (steps.isEmpty()) return; + Map job = new LinkedHashMap<>(); + job.put("runs-on", "ubuntu-latest"); + job.put("name", jobName); + job.put("steps", steps); + this.jobs.put(jobKey, job); + } + + public void buildSetupStep(List> steps, PipelineVo.PipelineJson.Nodes node) { + String name = node.getName(); + Map step = new LinkedHashMap<>(); + if (name.startsWith("setup-java")) { + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); + + + Map name2Value = inputs.stream().collect(Collectors.toMap(e -> e.getName(), e -> e.getValue(), (o, n) -> n)); + + Map with = new LinkedHashMap<>(); + if (name2Value.containsKey("download_url") && StringUtils.isNotBlank(name2Value.get("download_url"))) { + steps.add(Collections.singletonMap("run", "download_url=" + name2Value.get("download_url") + " && " + "wget -O $RUNNER_TEMP/java_package.tar.gz $download_url")); + with.put("distribution", "jdkfile"); + with.put("jdkFile", "${{ runner.temp }}/java_package.tar.gz"); + } + step.put("name", node.getLabel()); + step.put("uses", node.getFull_name()); + if (!inputs.isEmpty()) { + + inputs.forEach(i -> { + with.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + }); + + step.put("with", with); + } + steps.add(step); + return; + } + + if (name.startsWith("setup-")) { + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); + + step.put("name", node.getLabel()); + step.put("uses", node.getFull_name()); + if (!inputs.isEmpty()) { + Map with = new LinkedHashMap<>(); + inputs.forEach(i -> { + with.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + }); + + step.put("with", with); + } + steps.add(step); + } + } + + public void buildShellStep(List> steps, PipelineVo.PipelineJson.Nodes node) { + String fullName = node.getFull_name(); + if (Objects.equals(fullName, "shell")) { + Map step = new LinkedHashMap<>(); + step.put("name", node.getLabel()); +// step.put("run",""); + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()); + inputs.forEach(i -> { + step.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + }); + + steps.add(step); + } + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PipelineVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PipelineVo.java new file mode 100644 index 000000000..c7781aba5 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PipelineVo.java @@ -0,0 +1,284 @@ +package com.microservices.pms.pipeline.domain.vo; + +import java.io.Serializable; +import java.util.List; + +public class PipelineVo implements Serializable { + private String pipelineName; + + private PipelineJson pipelineJson; + + public String getPipelineName() { + return this.pipelineName; + } + + public void setPipelineName(String pipelineName) { + this.pipelineName = pipelineName; + } + + public PipelineJson getPipelineJson() { + return this.pipelineJson; + } + + public void setPipelineJson(PipelineJson pipelineJson) { + this.pipelineJson = pipelineJson; + } + + public static class PipelineJson implements Serializable { + private List nodes; + + private List edges; + + public List getNodes() { + return this.nodes; + } + + public void setNodes(List nodes) { + this.nodes = nodes; + } + + public List getEdges() { + return this.edges; + } + + public void setEdges(List edges) { + this.edges = edges; + } + + public static class Nodes implements Serializable { + private Integer action_node_types_id; + + private String img; + + private List inputs; + + private String icon; + + private String description; + + private String label; + + private String type; + + private Integer sort_no; + + private Integer use_count; + + private String full_name; + + private String name; + + private Integer x; + + private Double y; + + private String id; + + private Boolean isCluster; + + private String yaml; + + public Integer getAction_node_types_id() { + return this.action_node_types_id; + } + + public void setAction_node_types_id(Integer action_node_types_id) { + this.action_node_types_id = action_node_types_id; + } + + public String getImg() { + return this.img; + } + + public void setImg(String img) { + this.img = img; + } + + public List getInputs() { + return this.inputs; + } + + public void setInputs(List inputs) { + this.inputs = inputs; + } + + public String getIcon() { + return this.icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getDescription() { + return this.description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getLabel() { + return this.label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getType() { + return this.type; + } + + public void setType(String type) { + this.type = type; + } + + public Integer getSort_no() { + return this.sort_no; + } + + public void setSort_no(Integer sort_no) { + this.sort_no = sort_no; + } + + public Integer getUse_count() { + return this.use_count; + } + + public void setUse_count(Integer use_count) { + this.use_count = use_count; + } + + public String getFull_name() { + return this.full_name; + } + + public void setFull_name(String full_name) { + this.full_name = full_name; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getX() { + return this.x; + } + + public void setX(Integer x) { + this.x = x; + } + + public Double getY() { + return this.y; + } + + public void setY(Double y) { + this.y = y; + } + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + + public Boolean getIsCluster() { + return this.isCluster; + } + + public void setIsCluster(Boolean isCluster) { + this.isCluster = isCluster; + } + + public String getYaml() { + return this.yaml; + } + + public void setYaml(String yaml) { + this.yaml = yaml; + } + + public static class Inputs implements Serializable { + private Boolean is_required; + + private String name; + + private String value; + + private String input_type; + + private Integer id; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public Boolean getIs_required() { + return this.is_required; + } + + public void setIs_required(Boolean is_required) { + this.is_required = is_required; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getInput_type() { + return this.input_type; + } + + public void setInput_type(String input_type) { + this.input_type = input_type; + } + + public Integer getId() { + return this.id; + } + + public void setId(Integer id) { + this.id = id; + } + } + } + + public static class Edges implements Serializable { + private String source; + + private String target; + + public String getSource() { + return this.source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getTarget() { + return this.target; + } + + public void setTarget(String target) { + this.target = target; + } + } + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java index ce3e38f87..210ca4f0e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java @@ -91,6 +91,8 @@ public interface IPmsCiPipelinesService JSONObject savePipelineYamlByGraphicJson(Long id, PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo); + JSONObject savePipelineYamlByGraphicJsonNew(Long id, PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo); + JSONObject reRunPipelineRunsJob(Long id, String run, String job); JSONObject reRunAllJobsInPipelineRun(Long id, String run); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java index e7a758018..4f7ada59b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java @@ -1,11 +1,16 @@ package com.microservices.pms.pipeline.service.impl; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; @@ -23,6 +28,7 @@ import com.microservices.pms.pipeline.domain.vo.*; import com.microservices.pms.pipeline.service.IPmsCiPipelineGraphicsService; import com.microservices.pms.utils.PmsConstants; import com.microservices.pms.utils.PmsGitLinkRequestUrl; +import com.microservices.pms.utils.YamlUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -363,6 +369,42 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { return result; } + @Override + public JSONObject savePipelineYamlByGraphicJsonNew(Long id, PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) { + PmsCiPipelines pmsCiPipelines = pmsCiPipelinesMapper.selectPmsCiPipelinesById(id); + if (pmsCiPipelines == null) { + throw new ServiceException("该项目流水线不存在(流水线ID[%s])", id); + } + + try { + PipelineVo vo = JSON.parseObject(JSON.toJSONString(pmsCiPipelineBuildInputVo), PipelineVo.class); + NodeActionVo actionVo = getNodeActionVo(vo); + String yaml = YamlUtil.toYaml(actionVo); + JSONObject result = new JSONObject(); + result.put("pipeline_yaml", yaml); + return result; + } catch (Exception e) { + logger.error("流水线图形Json解析失败)", e); + return null; + } + } + + private NodeActionVo getNodeActionVo(PipelineVo vo) { + List nodes = vo.getPipelineJson().getNodes(); + String pipelineName = vo.getPipelineName(); + NodeActionVo actionVo = new NodeActionVo(); + actionVo.buildName(pipelineName); + AtomicInteger i = new AtomicInteger(); + nodes.forEach(s -> { + List> steps = new ArrayList<>(); + actionVo.buildOn(s); + actionVo.buildSetupStep(steps, s); + actionVo.buildShellStep(steps, s); + actionVo.buildJobs("job" + (i.getAndIncrement()), s.getLabel(), steps); + }); + return actionVo; + } + @Override public JSONObject reRunPipelineRunsJob(Long id, String run, String job) { PmsCiPipelines pmsCiPipelines = pmsCiPipelinesMapper.selectPmsCiPipelinesById(id); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/YamlUtil.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/YamlUtil.java new file mode 100644 index 000000000..04e9deb67 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/YamlUtil.java @@ -0,0 +1,58 @@ +package com.microservices.pms.utils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; +import com.microservices.common.core.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.io.StringWriter; + +@Slf4j +public class YamlUtil { + /** + * 将yaml字符串转成类对象 + * + * @param yamlStr 字符串 + * @param clazz 目标类 + * @param 泛型 + * @return 目标类 + */ + public static T toObject(String yamlStr, Class clazz) { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + try { + return mapper.readValue(yamlStr, clazz); + } catch (JsonProcessingException e) { + log.error("yaml文本解析成java对象错误:", e); + throw new ServiceException("yaml文本解析成java对象错误!"); + } + } + + /** + * 将类对象转yaml字符串 + * + * @param object 对象 + * @return yaml字符串 + */ + public static String toYaml(Object object) { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper = new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)); + StringWriter stringWriter = new StringWriter(); + try { + mapper.writeValue(stringWriter, object); + return stringWriter.toString(); + } catch (IOException e) { + log.error("Java对象解析成Yaml文本错误", e); + } + return null; + } +} + + From b987518adda8dcc4125a2943caf3785cc754f287 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 09:59:34 +0800 Subject: [PATCH 010/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增接口:查询用户需求列表 2. 新增产品需求状态枚举类(支持用户需求和需求规格) 3. 产品需求新增字段:需求来源用户、需求来源单位 Signed-off-by: OTTO <731554297@qq.com> --- .../PmsProductUserRequirementController.java | 49 ++++++++ .../product/domain/PmsProductRequirement.java | 13 +++ .../pms/product/domain/ProductReqStatus.java | 17 ++- .../domain/vo/ProductReqUserDetailVo.java | 30 +++++ .../domain/vo/ProductUserReqDataVo.java | 60 ++++++++++ .../domain/vo/ProductUserReqSearchVo.java | 38 ++++++ .../mapper/PmsProductRequirementMapper.java | 3 + .../IPmsProductRequirementService.java | 11 ++ .../PmsProductRequirementServiceImpl.java | 109 ++++++++++-------- .../pms/PmsProductRequirementMapper.xml | 26 +++++ 10 files changed, 303 insertions(+), 53 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java new file mode 100644 index 000000000..40990addd --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java @@ -0,0 +1,49 @@ +package com.microservices.pms.product.controller; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.security.annotation.RequiresPermissions; +import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; +import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; +import com.microservices.pms.product.service.IPmsProductModuleService; +import com.microservices.pms.product.service.IPmsProductRequirementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 产品用户需求相关接口 + * + * @author otto + * @date 2023-10-10 + */ +@RestController +@Api(tags = "项目管理-用户需求相关接口") +@RequestMapping("/{enterpriseIdentifier}/pmsProductUserRequirement") +@ApiImplicitParams({ + @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") +}) +public class PmsProductUserRequirementController extends BaseController { + @Autowired + private IPmsProductRequirementService pmsProductRequirementService; + @Autowired + private IPmsProductModuleService pmsProductModuleService; + + /** + * 查询产品用户需求列表 + */ + @ApiOperation(value = "查询用户需求列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/list") + public GenericsTableDataInfo list(@PathVariable String enterpriseIdentifier, @Validated ProductUserReqSearchVo productUserReqSearchVo) { + startPage(); + return pmsProductRequirementService.selectUserReqList(enterpriseIdentifier, productUserReqSearchVo); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index 8dcfcf043..a996859e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.domain.BaseEntity; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; +import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -137,6 +138,12 @@ public class PmsProductRequirement extends BaseEntity @ApiModelProperty(value = "产品需求类型") private String type; + @ApiModelProperty(value = "需求来源用户") + private String sourceUser; + + @ApiModelProperty(value = "需求来源单位") + private String sourceCompany; + @ApiModelProperty(value = "需求标识") private String identifier; @@ -145,4 +152,10 @@ public class PmsProductRequirement extends BaseEntity BeanUtils.copyProperties(this, target); return target; } + + public ProductUserReqDataVo toProductUserReqDataVo() { + ProductUserReqDataVo target = new ProductUserReqDataVo(); + BeanUtils.copyProperties(this, target); + return target; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java index 6be9fd8ff..f55816f5d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java @@ -4,17 +4,19 @@ import lombok.Getter; /** * 产品需求状态 + * @author OTTO */ @Getter public enum ProductReqStatus { USER_REQ("userReq", "待评审", "待评审的用户需求"), - REJECTED_USER_REQ("rejectedUserReq", "评审失败", "已拒绝的用户需求"), + REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"), + REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审", "已评审的需求规格(变更中)"), PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), - PENDING_MODIFIED_REQ_SPECS("pendingModifiedReqSpecs", "待修正", "待修正的需求规格"), REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"), - REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"); + REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"), + COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求规格"); private final String key; private final String name; private final String remark; @@ -33,4 +35,13 @@ public enum ProductReqStatus { } return null; } + + public static String getNameByKey(String status) { + for (ProductReqStatus productReqStatus : ProductReqStatus.values()) { + if (productReqStatus.getKey().equals(status)) { + return productReqStatus.getName(); + } + } + return null; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java new file mode 100644 index 000000000..a6cfeaf35 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java @@ -0,0 +1,30 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.system.api.domain.SysFileInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求详细数据对象") +public class ProductReqUserDetailVo extends ProductUserReqDataVo { + /** + * 正文 + */ + @ApiModelProperty(value = "正文") + private String content; + + /** + * 附件列表 + */ + @ApiModelProperty(value = "附件列表") + private List fileList; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java new file mode 100644 index 000000000..ae5b5868b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -0,0 +1,60 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductModule; +import com.microservices.pms.project.domain.vo.BaseEntityVo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求数据对象") +public class ProductUserReqDataVo extends BaseEntityVo { + /** + * 需求标识 + */ + @ApiModelProperty(value = "需求标识") + private Long id; + + /** + * 索引 + */ + @ApiModelProperty(value = "索引") + private Long index; + + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + private String title; + + /** + * 关联状态 + */ + @ApiModelProperty(value = "需求状态") + private String status; + + /** + * 关联产品模块 + */ + @ApiModelProperty(value = "从属产品模块") + private PmsProductModule pmsProductModule; + + @ApiModelProperty(value = "需求来源用户") + private String sourceUser; + + @ApiModelProperty(value = "需求来源单位") + private String sourceCompany; + + public PmsProductRequirementDetailVo toPmsProductRequirementDetailVo() { + PmsProductRequirementDetailVo target = new PmsProductRequirementDetailVo(); + BeanUtils.copyProperties(this, target); + return target; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java new file mode 100644 index 000000000..6dcbcc668 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java @@ -0,0 +1,38 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductRequirement; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求搜索对象") +public class ProductUserReqSearchVo { + /** + * 标题 + */ + @ApiModelProperty(value = "模糊搜索标题、提出人或需求来源") + private String search; + + /** + * 关联产品模块标识 + */ + @ApiModelProperty(value = "关联产品标识", required = true) + @NotNull + private String pmsProductIdentifier; + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index 11b3332b0..06922bc46 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -2,6 +2,7 @@ package com.microservices.pms.product.mapper; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo; +import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -102,4 +103,6 @@ public interface PmsProductRequirementMapper * @return 产品标识列表 */ List selectProductIdentifierListInRequirementIdList(@Param("idList") List idList); + + List selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index ae756e8ca..5af4b9dea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -5,6 +5,8 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo; +import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; +import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import java.util.List; @@ -131,4 +133,13 @@ public interface IPmsProductRequirementService * @return 产品需求列表 */ List selectPmsProductRequirementList(PmsProductRequirement pmsProductRequirementSearch); + + /** + * 查询用户需求列表 + * + * @param enterpriseIdentifier 企业标识 + * @param productUserReqSearchVo 查询条件 + * @return 用户需求列表 + */ + GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index ee428ab13..4ec57a2f4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -14,9 +14,7 @@ import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.journals.service.IPmsJournalsService; import com.microservices.pms.product.domain.*; -import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo; -import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; -import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo; +import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.mapper.PmsProductRequirementMapper; import com.microservices.pms.product.service.*; import com.microservices.pms.project.domain.PmsProject; @@ -37,13 +35,12 @@ import static com.microservices.common.core.utils.PageUtils.startPage; /** * 产品需求Service业务层处理 - * + * * @author otto * @date 2023-10-10 */ @Service -public class PmsProductRequirementServiceImpl implements IPmsProductRequirementService -{ +public class PmsProductRequirementServiceImpl implements IPmsProductRequirementService { @Autowired private PmsProductRequirementMapper pmsProductRequirementMapper; @Autowired @@ -70,20 +67,19 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS /** * 查询产品需求 - * + * * @param id 产品需求主键 * @return 产品需求 */ @Override - public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id) - { + public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id) { PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); return toPmsProductRequirementDetailVo(pmsProductRequirement); } - private PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(PmsProductRequirement pmsProductRequirement){ + private PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(PmsProductRequirement pmsProductRequirement) { PmsProductRequirementDataVo pmsProductRequirementDataVo = toPmsProductRequirementDataVo(pmsProductRequirement, null); - PmsProductRequirementDetailVo pmsProductRequirementDetailVo=pmsProductRequirementDataVo.toPmsProductRequirementDetailVo(); + PmsProductRequirementDetailVo pmsProductRequirementDetailVo = pmsProductRequirementDataVo.toPmsProductRequirementDetailVo(); pmsProductRequirementDetailVo.setContent(pmsProductRequirement.getContent()); // 设置文件列表 pmsProductRequirementDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) @@ -97,8 +93,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole) { - PmsProductRequirement pmsProductRequirement=pmsProductRequirementMapper.selectPmsProductRequirementById(id); - if(pmsProductRequirement==null){ + PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectPmsProductRequirementById(id); + if (pmsProductRequirement == null) { throw new NotFoundException("该产品需求不存在(产品需求Id[%d])", id); } PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductRequirement.getPmsProductIdentifier()); @@ -109,7 +105,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } private PmsProductRequirementDataVo toPmsProductRequirementDataVo(PmsProductRequirement pmsProductRequirement, HashMap hashMap) { - PmsProductRequirementDataVo pmsProductRequirementDataVo=pmsProductRequirement.toPmsProductRequirementDataVo(); + PmsProductRequirementDataVo pmsProductRequirementDataVo = pmsProductRequirement.toPmsProductRequirementDataVo(); // 设置优先级 pmsProductRequirementDataVo.setPriority( PmsUtils.getSelectObjectInCache( @@ -177,36 +173,52 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return pmsProductRequirementDataVo; } + + @Override + public GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo) { + pmsProductService.selectPmsProductByIdentifier(productUserReqSearchVo.getPmsProductIdentifier()); + startPage(); + List userReqList = pmsProductRequirementMapper.selectUserReqList(productUserReqSearchVo); + HashMap selectCache = new HashMap<>(); + return PageUtils.toPage(userReqList, x -> toProductUserReqDataVo(x, selectCache)); + } + + private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement, HashMap hashMap) { + ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo(); + // 设置状态 + productUserReqDataVo.setStatus(ProductReqStatus.getNameByKey(pmsProductRequirement.getStatus())); + + return productUserReqDataVo; + } + /** * 查询产品需求列表 - * + * * @param pmsProductRequirementSearch 产品需求 * @return 产品需求 */ @Override - public GenericsTableDataInfo selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirementSearch) - { + public GenericsTableDataInfo selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirementSearch) { pmsProductService.selectPmsProductByIdentifier(pmsProductRequirementSearch.getPmsProductIdentifier()); startPage(); - List pmsProductRequirementList=pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch); + List pmsProductRequirementList = pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch); HashMap selectCache = new HashMap<>(); return PageUtils.toPage(pmsProductRequirementList, x -> toPmsProductRequirementDataVo(x, selectCache)); } /** * 新增产品需求 - * + * * @param pmsProductRequirement 产品需求 * @return 结果 */ @Override - public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement) - { + public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement) { // 校验产品是否存在 PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductRequirement.getPmsProductIdentifier()); pmsProductService.checkManageRole(pmsProduct); // 设置需求优先级,若未传入则设置为默认优先级 - Long priorityId= + Long priorityId = pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); pmsProductRequirement.setPriorityId(priorityId); // 设置默认需求状态 @@ -214,14 +226,14 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // pmsProductRequirement.setStatusId(statusId); checkPmsProductRequirement(pmsProductRequirement, pmsProduct, null); - Date now=DateUtils.getNowDate(); - String username=SecurityUtils.getUsername(); + Date now = DateUtils.getNowDate(); + String username = SecurityUtils.getUsername(); pmsProductRequirement.setCreateBy(username); pmsProductRequirement.setCreateTime(now); pmsProductRequirement.setUpdateBy(username); pmsProductRequirement.setUpdateTime(now); // 获取当前产品下需求的最大索引值 - Long maxIndex=pmsProductRequirementMapper.selectPmsProductRequirementMaxIndexByProductIdentifier(pmsProductRequirement.getPmsProductIdentifier()); + Long maxIndex = pmsProductRequirementMapper.selectPmsProductRequirementMaxIndexByProductIdentifier(pmsProductRequirement.getPmsProductIdentifier()); if (maxIndex == null) { maxIndex = 1L; } @@ -238,10 +250,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } // 校验产品计划是否存在 - if(pmsProductRequirement.getPmsProductPlanId()!=null){ + if (pmsProductRequirement.getPmsProductPlanId() != null) { PmsProductPlan pmsProductPlan = pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false); - if(!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())){ - throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])",pmsProductPlan.getPlanTitle(),pmsProduct.getProductName()); + if (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) { + throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); } if (oldPmsProductRequirement == null || oldPmsProductRequirement.getPmsProductPlanId() == null) { @@ -263,7 +275,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 校验模块是否存在 - if(pmsProductRequirement.getPmsProductModuleId()!=null){ + if (pmsProductRequirement.getPmsProductModuleId() != null) { checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct); } @@ -272,8 +284,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductRequirement.setTagIds(pmsProductRequirement.getTags()); //校验结束时间需大于开始时间 - if(pmsProductRequirement.getStartTime()!=null&&pmsProductRequirement.getEndTime()!=null){ - if(pmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())){ + if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() != null) { + if (pmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())) { throw new ServiceException("结束时间不能早于开始时间"); } } @@ -284,19 +296,18 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS /** * 修改产品需求 - * + * * @param pmsProductRequirement 产品需求 * @return 结果 */ @Override - public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement) - { + public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement) { // 通过id检查需修改的产品需求是否存在 PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(pmsProductRequirement.getId(), true); pmsProductRequirement.setPmsProductIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); - if(pmsProductRequirement.getPriorityId()!=null){ + if (pmsProductRequirement.getPriorityId() != null) { // 设置需求优先级 - Long priorityId= + Long priorityId = pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); pmsProductRequirement.setPriorityId(priorityId); } @@ -304,7 +315,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 设置需求状态 // TODO:需要根据用户需求、需求规格来判断需求状态 // pmsProductRequirement.setStatusId(statusId); - PmsProduct pmsProduct=pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); checkPmsProductRequirement(pmsProductRequirement, pmsProduct, oldPmsProductRequirement); if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() == null) { if (oldPmsProductRequirement.getEndTime() != null && pmsProductRequirement.getStartTime().after(oldPmsProductRequirement.getEndTime())) { @@ -333,14 +344,13 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS /** * 批量删除产品需求 - * + * * @param ids 需要删除的产品需求主键 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) - public int deletePmsProductRequirementByIds(Long[] ids) - { + public int deletePmsProductRequirementByIds(Long[] ids) { int success = 0; for (Long id : ids) { success += deletePmsProductRequirementById(id); @@ -350,14 +360,13 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS /** * 删除产品需求信息 - * + * * @param id 产品需求主键 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) - public int deletePmsProductRequirementById(Long id) - { + public int deletePmsProductRequirementById(Long id) { PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); if (oldPmsProductRequirement.getPmsProductPlanId() != null) { pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId()); @@ -374,9 +383,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override public PmsProductRequirementDetailVo selectPmsProductRequirementDetailByProductIdentifierAndIndex(String productIdentifier, Long index) { - PmsProductRequirement pmsProductRequirement=pmsProductRequirementMapper.selectPmsProductRequirementByProductIdentifierAndIndex(productIdentifier,index); - if(pmsProductRequirement==null){ - throw new ServiceException("该产品需求不存在(产品标识[%s],产品需求索引[%d])",productIdentifier,index); + PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectPmsProductRequirementByProductIdentifierAndIndex(productIdentifier, index); + if (pmsProductRequirement == null) { + throw new ServiceException("该产品需求不存在(产品标识[%s],产品需求索引[%d])", productIdentifier, index); } return toPmsProductRequirementDetailVo(pmsProductRequirement); } @@ -446,16 +455,16 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private int batchUpdatePmsProductRequirementByJsonObject(List idList, JSONObject jsonObject) { PmsProductRequirementBatchUpdateVo pmsProductRequirementBatchUpdateVo = new PmsProductRequirementBatchUpdateVo(); pmsProductRequirementBatchUpdateVo.setIdList(idList); - if(jsonObject.containsKey("priorityId")){ + if (jsonObject.containsKey("priorityId")) { pmsProductRequirementBatchUpdateVo.setPriorityId(jsonObject.getLong("priorityId")); pmsProductRequirementBatchUpdateVo.setPriorityIdIsChange(true); } // TODO:需考虑是否涉及状态的变更 - if(jsonObject.containsKey("pmsProductModuleId")){ + if (jsonObject.containsKey("pmsProductModuleId")) { pmsProductRequirementBatchUpdateVo.setPmsProductModuleId(jsonObject.getLong("pmsProductModuleId")); pmsProductRequirementBatchUpdateVo.setPmsProductModuleIdIsChange(true); } - if(jsonObject.containsKey("tags")){ + if (jsonObject.containsKey("tags")) { pmsProductRequirementBatchUpdateVo.setTagIds(jsonObject.getString("tags")); pmsProductRequirementBatchUpdateVo.setTagIdsIsChange(true); } @@ -463,7 +472,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductRequirementBatchUpdateVo.setRequirementAssigneeGitlinkIds(jsonObject.getString("requirementAssigneeGitlinkIds")); pmsProductRequirementBatchUpdateVo.setRequirementAssigneeGitlinkIdsIsChange(true); } - if(jsonObject.containsKey("pmsProjectId")){ + if (jsonObject.containsKey("pmsProjectId")) { pmsProductRequirementBatchUpdateVo.setPmsProjectId(jsonObject.getLong("pmsProjectId")); pmsProductRequirementBatchUpdateVo.setPmsProjectIdIsChange(true); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 85d9f60e5..3e1636d4a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -30,6 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -57,6 +59,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from_id, project_req_id, type, + source_user, + source_company, identifier from pms_product_requirement @@ -133,6 +137,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + insert into pms_product_requirement @@ -161,6 +181,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" project_req_id, type, identifier, + source_user, + source_company, #{index}, @@ -187,6 +209,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{projectReqId}, #{type}, #{identifier}, + #{sourceUser}, + #{sourceCompany}, @@ -217,6 +241,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" project_req_id = #{project_req_id}, type = #{type}, identifier = #{identifier}, + source_user = #{sourceUser}, + source_company = #{sourceCompany}, where id = #{id} From 6347cb16805f7a14b7a441118280a7a1c0c0a5fe Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 10:17:15 +0800 Subject: [PATCH 011/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:获取用户需求详细信息 Signed-off-by: OTTO <731554297@qq.com> --- ...ler.java => ProductUserReqController.java} | 14 +++++++++- .../domain/vo/ProductUserReqDataVo.java | 4 +-- .../IPmsProductRequirementService.java | 7 +++-- .../PmsProductRequirementServiceImpl.java | 26 ++++++++++++++++--- 4 files changed, 41 insertions(+), 10 deletions(-) rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/{PmsProductUserRequirementController.java => ProductUserReqController.java} (78%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java similarity index 78% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 40990addd..1bb6bdfa1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductUserRequirementController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -1,8 +1,10 @@ package com.microservices.pms.product.controller; import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.annotation.RequiresPermissions; +import com.microservices.pms.product.domain.vo.ProductReqUserDetailVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import com.microservices.pms.product.service.IPmsProductModuleService; @@ -30,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController; @ApiImplicitParams({ @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") }) -public class PmsProductUserRequirementController extends BaseController { +public class ProductUserReqController extends BaseController { @Autowired private IPmsProductRequirementService pmsProductRequirementService; @Autowired @@ -46,4 +48,14 @@ public class PmsProductUserRequirementController extends BaseController { startPage(); return pmsProductRequirementService.selectUserReqList(enterpriseIdentifier, productUserReqSearchVo); } + + /** + * 获取用户需求详细信息 + */ + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping(value = "/{id}") + @ApiOperation(value = "获取用户需求详细信息") + public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { + return genericsSuccess(pmsProductRequirementService.selectUserReqDetailById(id)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index ae5b5868b..a27d8233d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -52,8 +52,8 @@ public class ProductUserReqDataVo extends BaseEntityVo { @ApiModelProperty(value = "需求来源单位") private String sourceCompany; - public PmsProductRequirementDetailVo toPmsProductRequirementDetailVo() { - PmsProductRequirementDetailVo target = new PmsProductRequirementDetailVo(); + public ProductReqUserDetailVo toProductReqUserDetailVo() { + ProductReqUserDetailVo target = new ProductReqUserDetailVo(); BeanUtils.copyProperties(this, target); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 5af4b9dea..0bd8c4285 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -3,10 +3,7 @@ package com.microservices.pms.product.service; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; -import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; -import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo; -import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; -import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; +import com.microservices.pms.product.domain.vo.*; import java.util.List; @@ -142,4 +139,6 @@ public interface IPmsProductRequirementService * @return 用户需求列表 */ GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo); + + ProductReqUserDetailVo selectUserReqDetailById(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 4ec57a2f4..23a162b12 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -179,11 +179,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductService.selectPmsProductByIdentifier(productUserReqSearchVo.getPmsProductIdentifier()); startPage(); List userReqList = pmsProductRequirementMapper.selectUserReqList(productUserReqSearchVo); - HashMap selectCache = new HashMap<>(); - return PageUtils.toPage(userReqList, x -> toProductUserReqDataVo(x, selectCache)); + return PageUtils.toPage(userReqList, this::toProductUserReqDataVo); } - private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement, HashMap hashMap) { + private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo(); // 设置状态 productUserReqDataVo.setStatus(ProductReqStatus.getNameByKey(pmsProductRequirement.getStatus())); @@ -191,6 +190,27 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return productUserReqDataVo; } + @Override + public ProductReqUserDetailVo selectUserReqDetailById(Long id) { + PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); + return toProductUserReqDetailVo(pmsProductRequirement)); + } + + private ProductUserReqDataVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { + ProductUserReqDataVo productUserReqDataVo = toProductUserReqDataVo(pmsProductRequirement); + ProductReqUserDetailVo productReqUserDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); + productReqUserDetailVo.setContent(pmsProductRequirement.getContent()); + // 设置文件列表 + productReqUserDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) + ); + // 设置产品模块 + if (pmsProductRequirement.getPmsProductModuleId() != null) { + productReqUserDetailVo.setPmsProductModule( + pmsProductModuleService.selectPmsProductModuleById(pmsProductRequirement.getPmsProductModuleId(), false)); + } + return productUserReqDataVo; + } + /** * 查询产品需求列表 * From da27fed59d48c084cb978333b1a4086797185a20 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 10:20:00 +0800 Subject: [PATCH 012/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:获取用户需求详细信息 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductUserReqController.java | 4 ++-- .../product/domain/vo/ProductUserReqDataVo.java | 4 ++-- ...DetailVo.java => ProductUserReqDetailVo.java} | 2 +- .../service/IPmsProductRequirementService.java | 2 +- .../impl/PmsProductRequirementServiceImpl.java | 16 ++++++++-------- 5 files changed, 14 insertions(+), 14 deletions(-) rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/{ProductReqUserDetailVo.java => ProductUserReqDetailVo.java} (90%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 1bb6bdfa1..7cf044d32 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -4,8 +4,8 @@ import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.annotation.RequiresPermissions; -import com.microservices.pms.product.domain.vo.ProductReqUserDetailVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; +import com.microservices.pms.product.domain.vo.ProductUserReqDetailVo; import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.product.service.IPmsProductRequirementService; @@ -55,7 +55,7 @@ public class ProductUserReqController extends BaseController { @RequiresPermissions("pms:pmsProduct:show") @GetMapping(value = "/{id}") @ApiOperation(value = "获取用户需求详细信息") - public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { + public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { return genericsSuccess(pmsProductRequirementService.selectUserReqDetailById(id)); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index a27d8233d..9b34527e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -52,8 +52,8 @@ public class ProductUserReqDataVo extends BaseEntityVo { @ApiModelProperty(value = "需求来源单位") private String sourceCompany; - public ProductReqUserDetailVo toProductReqUserDetailVo() { - ProductReqUserDetailVo target = new ProductReqUserDetailVo(); + public ProductUserReqDetailVo toProductReqUserDetailVo() { + ProductUserReqDetailVo target = new ProductUserReqDetailVo(); BeanUtils.copyProperties(this, target); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java similarity index 90% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java index a6cfeaf35..f1969d0fc 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqUserDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java @@ -15,7 +15,7 @@ import java.util.List; */ @Data @ApiModel("用户需求详细数据对象") -public class ProductReqUserDetailVo extends ProductUserReqDataVo { +public class ProductUserReqDetailVo extends ProductUserReqDataVo { /** * 正文 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 0bd8c4285..675fb38d9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -140,5 +140,5 @@ public interface IPmsProductRequirementService */ GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo); - ProductReqUserDetailVo selectUserReqDetailById(Long id); + ProductUserReqDetailVo selectUserReqDetailById(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 23a162b12..d5407f230 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -191,24 +191,24 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } @Override - public ProductReqUserDetailVo selectUserReqDetailById(Long id) { + public ProductUserReqDetailVo selectUserReqDetailById(Long id) { PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); - return toProductUserReqDetailVo(pmsProductRequirement)); + return toProductUserReqDetailVo(pmsProductRequirement); } - private ProductUserReqDataVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { + private ProductUserReqDetailVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = toProductUserReqDataVo(pmsProductRequirement); - ProductReqUserDetailVo productReqUserDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); - productReqUserDetailVo.setContent(pmsProductRequirement.getContent()); + ProductUserReqDetailVo productUserReqDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); + productUserReqDetailVo.setContent(pmsProductRequirement.getContent()); // 设置文件列表 - productReqUserDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) + productUserReqDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) ); // 设置产品模块 if (pmsProductRequirement.getPmsProductModuleId() != null) { - productReqUserDetailVo.setPmsProductModule( + productUserReqDetailVo.setPmsProductModule( pmsProductModuleService.selectPmsProductModuleById(pmsProductRequirement.getPmsProductModuleId(), false)); } - return productUserReqDataVo; + return productUserReqDetailVo; } /** From b764f24b8e4aade88fac433787a4f8e8f7a4935a Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 11:19:42 +0800 Subject: [PATCH 013/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:新增用户需求 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/web/domain/BaseEntity.java | 9 +++ .../controller/ProductUserReqController.java | 22 ++++-- .../pms/product/domain/ProductReqStatus.java | 2 +- .../domain/vo/ProductUserReqDataVo.java | 20 +----- .../domain/vo/ProductUserReqInputVo.java | 72 +++++++++++++++++++ .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 26 +++++++ .../pms/PmsProductRequirementMapper.xml | 2 +- 8 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/web/domain/BaseEntity.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/web/domain/BaseEntity.java index dceaf25c7..830be4d3d 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/web/domain/BaseEntity.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/web/domain/BaseEntity.java @@ -3,6 +3,7 @@ package com.microservices.common.core.web.domain; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; +import com.microservices.common.core.utils.DateUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -63,4 +64,12 @@ public class BaseEntity implements Serializable } return params; } + + public void setCreateAndUpdate(String username) { + Date nowDate = DateUtils.getNowDate(); + this.createBy = username; + this.updateBy = username; + this.createTime = nowDate; + this.updateTime = nowDate; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 7cf044d32..2456425d8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -1,11 +1,15 @@ package com.microservices.pms.product.controller; import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import com.microservices.pms.product.domain.vo.ProductUserReqDetailVo; +import com.microservices.pms.product.domain.vo.ProductUserReqInputVo; import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.product.service.IPmsProductRequirementService; @@ -15,10 +19,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 产品用户需求相关接口 @@ -58,4 +59,17 @@ public class ProductUserReqController extends BaseController { public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { return genericsSuccess(pmsProductRequirementService.selectUserReqDetailById(id)); } + + /** + * 新增用户需求 + */ + @RequiresPermissions("pms:pmsProductRequirement:add") + @Log(title = "用户需求", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation(value = "新增用户需求") + public AjaxResult add(@PathVariable String enterpriseIdentifier, + @RequestBody @Validated ProductUserReqInputVo productUserReqInputVo) { + productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier); + return success(pmsProductRequirementService.insertUserReq(productUserReqInputVo)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java index f55816f5d..436a8c37b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter public enum ProductReqStatus { - USER_REQ("userReq", "待评审", "待评审的用户需求"), + PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的用户需求"), REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"), REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index 9b34527e7..8a39e60a0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -16,33 +16,15 @@ import lombok.Data; @Data @ApiModel("用户需求数据对象") public class ProductUserReqDataVo extends BaseEntityVo { - /** - * 需求标识 - */ - @ApiModelProperty(value = "需求标识") private Long id; - /** - * 索引 - */ - @ApiModelProperty(value = "索引") - private Long index; - - /** - * 标题 - */ @ApiModelProperty(value = "标题") private String title; - /** - * 关联状态 - */ + @ApiModelProperty(value = "需求状态") private String status; - /** - * 关联产品模块 - */ @ApiModelProperty(value = "从属产品模块") private PmsProductModule pmsProductModule; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java new file mode 100644 index 000000000..81e4ab00b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java @@ -0,0 +1,72 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductRequirement; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 用户需求输入对象 + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求输入对象") +public class ProductUserReqInputVo { + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + @NotBlank + @Size(max = 200, message = "长度需要小于200") + private String title; + + /** + * 关联产品模块ID + */ + @ApiModelProperty(value = "关联产品模块ID") + private Long pmsProductModuleId; + + /** + * 关联产品模块标识 + */ + @ApiModelProperty(value = "关联产品标识") + @NotNull + private String pmsProductIdentifier; + + /** + * 正文 + */ + @ApiModelProperty(value = "正文") + @NotBlank + private String content; + + /** + * 附件标识列表 + */ + @ApiModelProperty(value = "附件标识列表") + private String fileIdentifiers; + + @ApiModelProperty(value = "需求来源用户", required = true) + @NotBlank + private String sourceUser; + + @ApiModelProperty(value = "需求来源单位") + private String sourceCompany; + + @ApiModelProperty(value = "企业表示", hidden = true) + private String enterpriseIdentifier; + + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 675fb38d9..1f3c8de99 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -141,4 +141,6 @@ public interface IPmsProductRequirementService GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo); ProductUserReqDetailVo selectUserReqDetailById(Long id); + + Long insertUserReq(ProductUserReqInputVo productUserReqInputVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index d5407f230..1bb82d8d1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -196,6 +196,32 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return toProductUserReqDetailVo(pmsProductRequirement); } + @Override + public Long insertUserReq(ProductUserReqInputVo productUserReqInputVo) { + // 校验产品是否存在 + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productUserReqInputVo.getPmsProductIdentifier()); + pmsProductService.checkManageRole(pmsProduct); + PmsProductRequirement pmsProductRequirement = productUserReqInputVo.toPmsProductRequirement(); + if (StringUtils.isEmpty(productUserReqInputVo.getSourceCompany())) { + PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productUserReqInputVo.getEnterpriseIdentifier()); + pmsProductRequirement.setSourceCompany(pmsEnterprise.getEnterpriseName()); + } + // 设置默认需求状态 + pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey()); + // 校验模块是否存在 + if (pmsProductRequirement.getPmsProductModuleId() != null) { + checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct); + } + // 检查附件列表是否有异常数据 + pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()); + + pmsProductRequirement.setCreateAndUpdate(SecurityUtils.getUsername()); + + pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); + pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); + return pmsProductRequirement.getId(); + } + private ProductUserReqDetailVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = toProductUserReqDataVo(pmsProductRequirement); ProductUserReqDetailVo productUserReqDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 3e1636d4a..fa1d87ed4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -149,7 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) and pms_product_identifier = #{pmsProductIdentifier} - and (`status`= 'userReq' or `status`= 'rejectedUserReq' or `status` = 'reviewedUserReq') + and (`status`= 'pendingReviewUserReq' or `status`= 'rejectedUserReq' or `status` = 'reviewedUserReq') order by update_time desc From 804309d5d7ae6614930bda2f8cfccecbab01dadb Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 11:47:25 +0800 Subject: [PATCH 014/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:修改用户需求 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductUserReqController.java | 16 +++-- .../domain/vo/ProductUserReqInputVo.java | 7 ++- .../domain/vo/ProductUserReqUpdateVo.java | 60 +++++++++++++++++++ .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 27 +++++++-- 5 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 2456425d8..5278bdfce 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -7,10 +7,7 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.log.annotation.Log; import com.microservices.common.log.enums.BusinessType; import com.microservices.common.security.annotation.RequiresPermissions; -import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; -import com.microservices.pms.product.domain.vo.ProductUserReqDetailVo; -import com.microservices.pms.product.domain.vo.ProductUserReqInputVo; -import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; +import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.product.service.IPmsProductRequirementService; import io.swagger.annotations.Api; @@ -72,4 +69,15 @@ public class ProductUserReqController extends BaseController { productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier); return success(pmsProductRequirementService.insertUserReq(productUserReqInputVo)); } + + /** + * 修改用户需求 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "用户需求", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation(value = "修改用户需求") + public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) { + return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java index 81e4ab00b..279649e73 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java @@ -53,14 +53,15 @@ public class ProductUserReqInputVo { @ApiModelProperty(value = "附件标识列表") private String fileIdentifiers; - @ApiModelProperty(value = "需求来源用户", required = true) + @ApiModelProperty(value = "需求来源用户(需前端默认填充当前用户昵称)", required = true) @NotBlank private String sourceUser; - @ApiModelProperty(value = "需求来源单位") + @ApiModelProperty(value = "需求来源单位(需前端默认填充当前企业名称)", required = true) + @NotBlank private String sourceCompany; - @ApiModelProperty(value = "企业表示", hidden = true) + @ApiModelProperty(value = "企业标识", hidden = true) private String enterpriseIdentifier; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java new file mode 100644 index 000000000..7616680a9 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java @@ -0,0 +1,60 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductRequirement; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求更新对象") +public class ProductUserReqUpdateVo { + /** + * 需求Id + */ + @ApiModelProperty(value = "需求Id") + @NotNull + private Long id; + /** + * 标题 + */ + @ApiModelProperty(value = "标题") + @Size(max = 50, message = "长度需要小于50") + private String title; + + /** + * 关联产品模块ID + */ + @ApiModelProperty(value = "关联产品模块ID") + private Long pmsProductModuleId; + + /** + * 正文 + */ + @ApiModelProperty(value = "正文") + private String content; + + @ApiModelProperty(value = "附件标识列表") + private String fileIdentifiers; + + @ApiModelProperty(value = "需求来源用户") + private String sourceUser; + + @ApiModelProperty(value = "需求来源单位") + private String sourceCompany; + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 1f3c8de99..aa6990066 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -143,4 +143,6 @@ public interface IPmsProductRequirementService ProductUserReqDetailVo selectUserReqDetailById(Long id); Long insertUserReq(ProductUserReqInputVo productUserReqInputVo); + + int updateUserReq(ProductUserReqUpdateVo productUserReqUpdateVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 1bb82d8d1..5fd3e2d7b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -208,6 +208,24 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } // 设置默认需求状态 pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey()); + + pmsProductRequirement.setCreateAndUpdate(SecurityUtils.getUsername()); + + pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); + pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); + return pmsProductRequirement.getId(); + } + + @Override + public int updateUserReq(ProductUserReqUpdateVo productUserReqUpdateVo) { + // 通过id检查需修改的产品需求是否存在 + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productUserReqUpdateVo.getId(), true); + PmsProductRequirement pmsProductRequirement = productUserReqUpdateVo.toPmsProductRequirement(); + if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("只有待审核状态的用户需求才能修改"); + } + + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); // 校验模块是否存在 if (pmsProductRequirement.getPmsProductModuleId() != null) { checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct); @@ -215,11 +233,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 检查附件列表是否有异常数据 pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()); - pmsProductRequirement.setCreateAndUpdate(SecurityUtils.getUsername()); - - pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); - pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); - return pmsProductRequirement.getId(); + pmsProductRequirement.setUpdateBy(SecurityUtils.getUsername()); + pmsProductRequirement.setUpdateTime(DateUtils.getNowDate()); + pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); + return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement); } private ProductUserReqDetailVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { From 52e4c771faa6299b9ae381673f96369fa495e058 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 13:38:06 +0800 Subject: [PATCH 015/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:删除用户需求 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductUserReqController.java | 11 ++++++++ .../IPmsProductRequirementService.java | 2 ++ .../PmsProductRequirementServiceImpl.java | 27 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 5278bdfce..6ab13a979 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -80,4 +80,15 @@ public class ProductUserReqController extends BaseController { public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) { return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo)); } + + /** + * 删除用户需求 + */ + @RequiresPermissions("pms:pmsProductRequirement:remove") + @Log(title = "用户需求", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation(value = "删除用户需求") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index aa6990066..bd53955b9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -145,4 +145,6 @@ public interface IPmsProductRequirementService Long insertUserReq(ProductUserReqInputVo productUserReqInputVo); int updateUserReq(ProductUserReqUpdateVo productUserReqUpdateVo); + + int deleteUserReqByIds(Long[] ids); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 5fd3e2d7b..6dcfa3b69 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -239,6 +239,33 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement); } + @Override + public int deleteUserReqByIds(Long[] ids) { + int success = 0; + for (Long id : ids) { + success += deleteUserReqById(id); + } + return success; + } + + + /** + * 删除产品需求信息 + * + * @param id 产品需求主键 + * @return 结果 + */ + @Transactional(rollbackFor = Exception.class) + public int deleteUserReqById(Long id) { + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); + if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("只有待审核状态的用户需求才能被删除"); + } + pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); + pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); + return pmsProductRequirementMapper.deletePmsProductRequirementById(id); + } + private ProductUserReqDetailVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = toProductUserReqDataVo(pmsProductRequirement); ProductUserReqDetailVo productUserReqDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); From 99cd28b6b692390dce8a7df3b53a2b00930667a2 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 14:40:04 +0800 Subject: [PATCH 016/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增产品需求操作记录对象相关代码 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/PmsProductReqOperationRecord.java | 208 ++++++++++++++++++ .../PmsProductReqOperationRecordMapper.java | 62 ++++++ .../IPmsProductReqOperationRecordService.java | 61 +++++ ...sProductReqOperationRecordServiceImpl.java | 90 ++++++++ .../PmsProductReqOperationRecordMapper.xml | 142 ++++++++++++ 5 files changed, 563 insertions(+) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java new file mode 100644 index 000000000..129a04cdd --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java @@ -0,0 +1,208 @@ +package com.microservices.pms.product.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.microservices.common.core.annotation.Excel; +import com.microservices.common.core.web.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 项目管理-产品需求操作记录对象 pms_product_req_operation_record + * + * @author otto + * @date 2024-11-29 + */ +public class PmsProductReqOperationRecord extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 操作记录ID + */ + private Long id; + + /** + * 操作人用户名 + */ + @Excel(name = "操作人用户名") + private String operator; + + /** + * 类型 + */ + @Excel(name = "类型") + private String type; + + /** + * 操作 + */ + @Excel(name = "操作") + private String operation; + + /** + * 操作时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date operatingTime; + + /** + * 关联需求ID + */ + @Excel(name = "关联需求ID") + private Long productRequirementId; + + /** + * 操作内容 + */ + @Excel(name = "操作内容") + private String content; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 预留字段1 + */ + @Excel(name = "预留字段1") + private String reservedField1; + + /** + * 预留字段2 + */ + @Excel(name = "预留字段2") + private String reservedField2; + + /** + * 预留字段3 + */ + @Excel(name = "预留字段3") + private String reservedField3; + + /** + * 预留字段4 + */ + @Excel(name = "预留字段4") + private String reservedField4; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation; + } + + public Date getOperatingTime() { + return operatingTime; + } + + public void setOperatingTime(Date operatingTime) { + this.operatingTime = operatingTime; + } + + public Long getProductRequirementId() { + return productRequirementId; + } + + public void setProductRequirementId(Long productRequirementId) { + this.productRequirementId = productRequirementId; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getReservedField1() { + return reservedField1; + } + + public void setReservedField1(String reservedField1) { + this.reservedField1 = reservedField1; + } + + public String getReservedField2() { + return reservedField2; + } + + public void setReservedField2(String reservedField2) { + this.reservedField2 = reservedField2; + } + + public String getReservedField3() { + return reservedField3; + } + + public void setReservedField3(String reservedField3) { + this.reservedField3 = reservedField3; + } + + public String getReservedField4() { + return reservedField4; + } + + public void setReservedField4(String reservedField4) { + this.reservedField4 = reservedField4; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("operator", getOperator()) + .append("type", getType()) + .append("operation", getOperation()) + .append("operatingTime", getOperatingTime()) + .append("productRequirementId", getProductRequirementId()) + .append("content", getContent()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("delFlag", getDelFlag()) + .append("reservedField1", getReservedField1()) + .append("reservedField2", getReservedField2()) + .append("reservedField3", getReservedField3()) + .append("reservedField4", getReservedField4()) + .toString(); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java new file mode 100644 index 000000000..7bb808c7a --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java @@ -0,0 +1,62 @@ +package com.microservices.pms.product.mapper; + +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; + +import java.util.List; + +/** + * 项目管理-产品需求操作记录Mapper接口 + * + * @author otto + * @date 2024-11-29 + */ +@Mapper +public interface PmsProductReqOperationRecordMapper { + /** + * 查询项目管理-产品需求操作记录 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 项目管理-产品需求操作记录 + */ + public PmsProductReqOperationRecord selectPmsProductReqOperationRecordById(Long id); + + /** + * 查询项目管理-产品需求操作记录列表 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 项目管理-产品需求操作记录集合 + */ + public List selectPmsProductReqOperationRecordList(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 新增项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + public int insertPmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 修改项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + public int updatePmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 删除项目管理-产品需求操作记录 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 结果 + */ + public int deletePmsProductReqOperationRecordById(Long id); + + /** + * 批量删除项目管理-产品需求操作记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deletePmsProductReqOperationRecordByIds(Long[] ids); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java new file mode 100644 index 000000000..67f1a39e0 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java @@ -0,0 +1,61 @@ +package com.microservices.pms.product.service; + +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; + +import java.util.List; + +/** + * 项目管理-产品需求操作记录Service接口 + * + * @author otto + * @date 2024-11-29 + */ +public interface IPmsProductReqOperationRecordService { + /** + * 查询项目管理-产品需求操作记录 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 项目管理-产品需求操作记录 + */ + public PmsProductReqOperationRecord selectPmsProductReqOperationRecordById(Long id); + + /** + * 查询项目管理-产品需求操作记录列表 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 项目管理-产品需求操作记录集合 + */ + public List selectPmsProductReqOperationRecordList(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 新增项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + public int insertPmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 修改项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + public int updatePmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord); + + /** + * 批量删除项目管理-产品需求操作记录 + * + * @param ids 需要删除的项目管理-产品需求操作记录主键集合 + * @return 结果 + */ + public int deletePmsProductReqOperationRecordByIds(Long[] ids); + + /** + * 删除项目管理-产品需求操作记录信息 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 结果 + */ + public int deletePmsProductReqOperationRecordById(Long id); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java new file mode 100644 index 000000000..031bc07af --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -0,0 +1,90 @@ +package com.microservices.pms.product.service.impl; + +import com.microservices.common.core.utils.DateUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.mapper.PmsProductReqOperationRecordMapper; +import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 项目管理-产品需求操作记录Service业务层处理 + * + * @author otto + * @date 2024-11-29 + */ +@Service +public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOperationRecordService { + @Autowired + private PmsProductReqOperationRecordMapper pmsProductReqOperationRecordMapper; + + /** + * 查询项目管理-产品需求操作记录 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 项目管理-产品需求操作记录 + */ + @Override + public PmsProductReqOperationRecord selectPmsProductReqOperationRecordById(Long id) { + return pmsProductReqOperationRecordMapper.selectPmsProductReqOperationRecordById(id); + } + + /** + * 查询项目管理-产品需求操作记录列表 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 项目管理-产品需求操作记录 + */ + @Override + public List selectPmsProductReqOperationRecordList(PmsProductReqOperationRecord pmsProductReqOperationRecord) { + return pmsProductReqOperationRecordMapper.selectPmsProductReqOperationRecordList(pmsProductReqOperationRecord); + } + + /** + * 新增项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + @Override + public int insertPmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord) { + pmsProductReqOperationRecord.setCreateTime(DateUtils.getNowDate()); + return pmsProductReqOperationRecordMapper.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + } + + /** + * 修改项目管理-产品需求操作记录 + * + * @param pmsProductReqOperationRecord 项目管理-产品需求操作记录 + * @return 结果 + */ + @Override + public int updatePmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord) { + pmsProductReqOperationRecord.setUpdateTime(DateUtils.getNowDate()); + return pmsProductReqOperationRecordMapper.updatePmsProductReqOperationRecord(pmsProductReqOperationRecord); + } + + /** + * 批量删除项目管理-产品需求操作记录 + * + * @param ids 需要删除的项目管理-产品需求操作记录主键 + * @return 结果 + */ + @Override + public int deletePmsProductReqOperationRecordByIds(Long[] ids) { + return pmsProductReqOperationRecordMapper.deletePmsProductReqOperationRecordByIds(ids); + } + + /** + * 删除项目管理-产品需求操作记录信息 + * + * @param id 项目管理-产品需求操作记录主键 + * @return 结果 + */ + @Override + public int deletePmsProductReqOperationRecordById(Long id) { + return pmsProductReqOperationRecordMapper.deletePmsProductReqOperationRecordById(id); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml new file mode 100644 index 000000000..ede862f46 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select id, + operator, + type, + operation, + operating_time, + product_requirement_id, + content, + update_time, + update_by, + create_time, + create_by, + del_flag, + reserved_field_1, + reserved_field_2, + reserved_field_3, + reserved_field_4 + from pms_product_req_operation_record + + + + + + + + insert into pms_product_req_operation_record + + operator, + type, + operation, + operating_time, + product_requirement_id, + content, + update_time, + update_by, + create_time, + create_by, + del_flag, + reserved_field_1, + reserved_field_2, + reserved_field_3, + reserved_field_4, + + + #{operator}, + #{type}, + #{operation}, + #{operatingTime}, + #{productRequirementId}, + #{content}, + #{updateTime}, + #{updateBy}, + #{createTime}, + #{createBy}, + #{delFlag}, + #{reservedField1}, + #{reservedField2}, + #{reservedField3}, + #{reservedField4}, + + + + + update pms_product_req_operation_record + + operator = #{operator}, + type = #{type}, + operation = #{operation}, + operating_time = #{operatingTime}, + product_requirement_id = #{productRequirementId}, + content = #{content}, + update_time = #{updateTime}, + update_by = #{updateBy}, + create_time = #{createTime}, + create_by = #{createBy}, + del_flag = #{delFlag}, + reserved_field_1 = #{reservedField1}, + reserved_field_2 = #{reservedField2}, + reserved_field_3 = #{reservedField3}, + reserved_field_4 = #{reservedField4}, + + where id = #{id} + + + + delete + from pms_product_req_operation_record + where id = #{id} + + + + delete from pms_product_req_operation_record where id in + + #{id} + + + \ No newline at end of file From 56a4621aff7cb0aaae2441939785fecfd2074283 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 14:40:21 +0800 Subject: [PATCH 017/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增产品需求操作记录对象相关代码 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/mapper/PmsProductReqOperationRecordMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java index 7bb808c7a..eb6344a3a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.mapper; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import org.apache.ibatis.annotations.Mapper; import java.util.List; From 85388b896e56edfebcf9c8c92d82795f4d5f4c9c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 16:11:24 +0800 Subject: [PATCH 018/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:评审用户需求 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductUserReqController.java | 11 ++ .../domain/PmsProductReqOperationRecord.java | 157 ++---------------- .../domain/enums/ProductReqOperationType.java | 22 +++ .../domain/enums/ProductReqReviewStatus.java | 21 +++ .../domain/{ => enums}/ProductReqStatus.java | 2 +- .../vo/PmsProductRequirementDataVo.java | 2 +- .../domain/vo/ProductUserReqReviewVo.java | 48 ++++++ .../domain/vo/ProductUserReqUpdateVo.java | 2 +- .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 40 ++++- 10 files changed, 157 insertions(+), 150 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/{ => enums}/ProductReqStatus.java (97%) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 6ab13a979..0e32b5af6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -91,4 +91,15 @@ public class ProductUserReqController extends BaseController { public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids)); } + + /** + * 评审用户需求 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "用户需求", businessType = BusinessType.UPDATE) + @PutMapping("/review") + @ApiOperation(value = "评审用户需求") + public AjaxResult review(@RequestBody @Validated ProductUserReqReviewVo productUserReqReviewVo) { + return toAjax(pmsProductRequirementService.reviewUserReq(productUserReqReviewVo)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java index 129a04cdd..7a7a95879 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductReqOperationRecord.java @@ -1,10 +1,10 @@ package com.microservices.pms.product.domain; import com.fasterxml.jackson.annotation.JsonFormat; -import com.microservices.common.core.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.web.domain.BaseEntity; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import java.util.Date; @@ -14,6 +14,7 @@ import java.util.Date; * @author otto * @date 2024-11-29 */ +@Data public class PmsProductReqOperationRecord extends BaseEntity { private static final long serialVersionUID = 1L; @@ -25,38 +26,38 @@ public class PmsProductReqOperationRecord extends BaseEntity { /** * 操作人用户名 */ - @Excel(name = "操作人用户名") + @ApiModelProperty(value = "操作人用户名") private String operator; /** * 类型 */ - @Excel(name = "类型") + @ApiModelProperty(value = "类型") private String type; /** * 操作 */ - @Excel(name = "操作") + @ApiModelProperty(value = "操作") private String operation; /** * 操作时间 */ @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd") + @ApiModelProperty(value = "操作时间") private Date operatingTime; /** * 关联需求ID */ - @Excel(name = "关联需求ID") + @ApiModelProperty(value = "关联需求ID") private Long productRequirementId; /** * 操作内容 */ - @Excel(name = "操作内容") + @ApiModelProperty(value = "操作内容") private String content; /** @@ -64,145 +65,15 @@ public class PmsProductReqOperationRecord extends BaseEntity { */ private String delFlag; - /** - * 预留字段1 - */ - @Excel(name = "预留字段1") + @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField1; - /** - * 预留字段2 - */ - @Excel(name = "预留字段2") + @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField2; - /** - * 预留字段3 - */ - @Excel(name = "预留字段3") + @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField3; - /** - * 预留字段4 - */ - @Excel(name = "预留字段4") + @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField4; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getOperator() { - return operator; - } - - public void setOperator(String operator) { - this.operator = operator; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getOperation() { - return operation; - } - - public void setOperation(String operation) { - this.operation = operation; - } - - public Date getOperatingTime() { - return operatingTime; - } - - public void setOperatingTime(Date operatingTime) { - this.operatingTime = operatingTime; - } - - public Long getProductRequirementId() { - return productRequirementId; - } - - public void setProductRequirementId(Long productRequirementId) { - this.productRequirementId = productRequirementId; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public String getDelFlag() { - return delFlag; - } - - public void setDelFlag(String delFlag) { - this.delFlag = delFlag; - } - - public String getReservedField1() { - return reservedField1; - } - - public void setReservedField1(String reservedField1) { - this.reservedField1 = reservedField1; - } - - public String getReservedField2() { - return reservedField2; - } - - public void setReservedField2(String reservedField2) { - this.reservedField2 = reservedField2; - } - - public String getReservedField3() { - return reservedField3; - } - - public void setReservedField3(String reservedField3) { - this.reservedField3 = reservedField3; - } - - public String getReservedField4() { - return reservedField4; - } - - public void setReservedField4(String reservedField4) { - this.reservedField4 = reservedField4; - } - - @Override - public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("operator", getOperator()) - .append("type", getType()) - .append("operation", getOperation()) - .append("operatingTime", getOperatingTime()) - .append("productRequirementId", getProductRequirementId()) - .append("content", getContent()) - .append("updateTime", getUpdateTime()) - .append("updateBy", getUpdateBy()) - .append("createTime", getCreateTime()) - .append("createBy", getCreateBy()) - .append("delFlag", getDelFlag()) - .append("reservedField1", getReservedField1()) - .append("reservedField2", getReservedField2()) - .append("reservedField3", getReservedField3()) - .append("reservedField4", getReservedField4()) - .toString(); - } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java new file mode 100644 index 000000000..f01a6f446 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -0,0 +1,22 @@ +package com.microservices.pms.product.domain.enums; + +import lombok.Getter; + +/** + * 产品需求状态 + * + * @author OTTO + */ +@Getter +public enum ProductReqOperationType { + CONTENT_MODIFY("contentModify", "内容修改"), + REVIEW_USER_REQ("reviewUserReq", "用户需求评审"), + REVIEW_REQ_SPECS("reviewUserReq", "需求规格评审"); + private final String key; + private final String name; + + ProductReqOperationType(String key, String name) { + this.key = key; + this.name = name; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java new file mode 100644 index 000000000..906d700d8 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java @@ -0,0 +1,21 @@ +package com.microservices.pms.product.domain.enums; + +import lombok.Getter; + +/** + * 产品需求状态 + * + * @author OTTO + */ +@Getter +public enum ProductReqReviewStatus { + PASS("pass", "已通过"), + REJECTED("rejected", "已拒绝"); + private final String key; + private final String name; + + ProductReqReviewStatus(String key, String name) { + this.key = key; + this.name = name; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java similarity index 97% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 436a8c37b..b947b51a7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -1,4 +1,4 @@ -package com.microservices.pms.product.domain; +package com.microservices.pms.product.domain.enums; import lombok.Getter; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java index 435fedbda..1fc4b0d17 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java @@ -5,7 +5,7 @@ import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.domain.PmsProductModule; import com.microservices.pms.product.domain.PmsProductPlan; -import com.microservices.pms.product.domain.ProductReqStatus; +import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.project.domain.vo.BaseEntityVo; import com.microservices.system.api.domain.SimpleSysUser; import io.swagger.annotations.ApiModel; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java new file mode 100644 index 000000000..657cb3081 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java @@ -0,0 +1,48 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求评审对象") +public class ProductUserReqReviewVo { + + @ApiModelProperty(value = "需求Id", required = true) + @NotNull + private Long id; + + @ApiModelProperty(value = "评审意见", required = true) + @NotNull + private String reviewStatus; + + @ApiModelProperty(value = "评审时间(前端默认取当前时间)", required = true) + @NotNull + private Date reviewTime; + + @ApiModelProperty(value = "评审结论", required = true) + @NotNull + private String reviewContent; + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(String operator) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(id); + record.setType(ProductReqOperationType.REVIEW_USER_REQ.getKey()); + record.setOperation(reviewStatus); + record.setOperator(operator); + record.setOperatingTime(reviewTime); + record.setContent(reviewContent); + return record; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java index 7616680a9..de16b85d4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java @@ -21,7 +21,7 @@ public class ProductUserReqUpdateVo { /** * 需求Id */ - @ApiModelProperty(value = "需求Id") + @ApiModelProperty(value = "需求Id", required = true) @NotNull private Long id; /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index bd53955b9..5fd4f5b71 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -147,4 +147,6 @@ public interface IPmsProductRequirementService int updateUserReq(ProductUserReqUpdateVo productUserReqUpdateVo); int deleteUserReqByIds(Long[] ids); + + int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 6dcfa3b69..62e0f5df5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -13,7 +13,12 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.journals.service.IPmsJournalsService; -import com.microservices.pms.product.domain.*; +import com.microservices.pms.product.domain.PmsProduct; +import com.microservices.pms.product.domain.PmsProductModule; +import com.microservices.pms.product.domain.PmsProductPlan; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductReqReviewStatus; +import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.mapper.PmsProductRequirementMapper; import com.microservices.pms.product.service.*; @@ -56,7 +61,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Autowired private IPmsProductPriorityService pmsProductPriorityService; @Autowired - private IPmsProductStatusService pmsProductStatusService; + private IPmsProductReqOperationRecordService pmsProductReqOperationRecordService; @Autowired private IPmsCommonService pmsCommonService; @Autowired @@ -233,13 +238,18 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 检查附件列表是否有异常数据 pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()); + return updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + } + + private int updateRequirement(PmsProductRequirement pmsProductRequirement, String productIdentifier) { pmsProductRequirement.setUpdateBy(SecurityUtils.getUsername()); pmsProductRequirement.setUpdateTime(DateUtils.getNowDate()); - pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); + pmsProductService.updatePmsProductChange(productIdentifier); return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement); } @Override + @Transactional(rollbackFor = Exception.class) public int deleteUserReqByIds(Long[] ids) { int success = 0; for (Long id : ids) { @@ -248,6 +258,28 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return success; } + @Override + @Transactional(rollbackFor = ServiceException.class) + public int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo) { + // 通过id检查需修改的产品需求是否存在 + PmsProductRequirement userReq = selectPmsProductRequirementById(productUserReqReviewVo.getId(), true); + if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) { + throw new ServiceException("只有待审核状态的用户需求才能进行审核"); + } + if (ProductReqReviewStatus.PASS.getKey().equals(productUserReqReviewVo.getReviewStatus())) { + userReq.setStatus(ProductReqStatus.REVIEWED_USER_REQ.getKey()); + //TODO:已通过的用户需求需创建一条对应的需求规格 + } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productUserReqReviewVo.getReviewStatus())) { + userReq.setStatus(ProductReqStatus.REJECTED_USER_REQ.getKey()); + } else { + throw new ServiceException("请选择正确的审核意见"); + } + // 记录评审意见 + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productUserReqReviewVo.toPmsProductReqOperationRecord(SecurityUtils.getUsername())); + return updateRequirement(userReq, userReq.getPmsProductIdentifier()); + } + /** * 删除产品需求信息 @@ -259,7 +291,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS public int deleteUserReqById(Long id) { PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核状态的用户需求才能被删除"); + throw new ServiceException("只有待审核状态的用户需求可以被删除"); } pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); From 8f69ef0d2003deccbd46c61b8087799dc2a75517 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 29 Nov 2024 16:30:39 +0800 Subject: [PATCH 019/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对用户需求的创建和编辑操作进行记录 Signed-off-by: OTTO <731554297@qq.com> --- .../enums/ProductContentModifyOperation.java | 21 +++++++++++++++++++ .../domain/vo/ProductUserReqInputVo.java | 13 ++++++++++++ .../domain/vo/ProductUserReqUpdateVo.java | 13 ++++++++++++ ...sProductReqOperationRecordServiceImpl.java | 3 +++ .../PmsProductRequirementServiceImpl.java | 8 +++++-- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java new file mode 100644 index 000000000..a8eb787eb --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java @@ -0,0 +1,21 @@ +package com.microservices.pms.product.domain.enums; + +import lombok.Getter; + +/** + * 产品需求状态 + * + * @author OTTO + */ +@Getter +public enum ProductContentModifyOperation { + CREATE("create", "创建"), + EDIT("edit", "编辑"); + private final String key; + private final String name; + + ProductContentModifyOperation(String key, String name) { + this.key = key; + this.name = name; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java index 279649e73..199874638 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java @@ -1,7 +1,10 @@ package com.microservices.pms.product.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -70,4 +73,14 @@ public class ProductUserReqInputVo { BeanUtils.copyProperties(this, target); return target; } + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(pmsProductRequirement.getId()); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.CREATE.getKey()); + record.setOperator(pmsProductRequirement.getCreateBy()); + record.setOperatingTime(pmsProductRequirement.getCreateTime()); + return record; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java index de16b85d4..a4bb4dce0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java @@ -1,7 +1,10 @@ package com.microservices.pms.product.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -57,4 +60,14 @@ public class ProductUserReqUpdateVo { BeanUtils.copyProperties(this, target); return target; } + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(pmsProductRequirement.getId()); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.EDIT.getKey()); + record.setOperator(pmsProductRequirement.getUpdateBy()); + record.setOperatingTime(pmsProductRequirement.getUpdateTime()); + return record; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 031bc07af..e2f5fbe58 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.service.impl; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.mapper.PmsProductReqOperationRecordMapper; import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; @@ -50,6 +51,7 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp */ @Override public int insertPmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord) { + pmsProductReqOperationRecord.setCreateBy(SecurityUtils.getUsername()); pmsProductReqOperationRecord.setCreateTime(DateUtils.getNowDate()); return pmsProductReqOperationRecordMapper.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); } @@ -62,6 +64,7 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp */ @Override public int updatePmsProductReqOperationRecord(PmsProductReqOperationRecord pmsProductReqOperationRecord) { + pmsProductReqOperationRecord.setUpdateBy(SecurityUtils.getUsername()); pmsProductReqOperationRecord.setUpdateTime(DateUtils.getNowDate()); return pmsProductReqOperationRecordMapper.updatePmsProductReqOperationRecord(pmsProductReqOperationRecord); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 62e0f5df5..48c999a6b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -218,6 +218,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productUserReqInputVo.toPmsProductReqOperationRecord(pmsProductRequirement)); return pmsProductRequirement.getId(); } @@ -237,8 +239,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } // 检查附件列表是否有异常数据 pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()); - - return updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + int success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productUserReqUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement)); + return success; } private int updateRequirement(PmsProductRequirement pmsProductRequirement, String productIdentifier) { From da1ec52f91e4c531962aadd397ad2ec2de27b612 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 29 Nov 2024 16:42:09 +0800 Subject: [PATCH 020/270] =?UTF-8?q?feat(=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E8=A7=A3=E6=9E=90):=20=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=E8=8A=82=E7=82=B9=E7=9A=84=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/pipeline/domain/vo/NodeActionVo.java | 110 +++++++++++------- .../impl/PmsCiPipelinesServiceImpl.java | 26 ++--- 2 files changed, 78 insertions(+), 58 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java index 41cc9c0ad..62f1a26e0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/NodeActionVo.java @@ -24,28 +24,37 @@ public class NodeActionVo { this.name = name; } - public void buildOn(PipelineVo.PipelineJson.Nodes node) { -// this.on.put("push", Collections.singletonMap("branches", Collections.singletonList(branchName))); - String fullName = node.getFull_name(); - Map step = new LinkedHashMap<>(); + public void parse(List> steps, PipelineVo.PipelineJson.Nodes node){ + String nodeName = Optional.ofNullable(node.getName()).orElse(""); + if (nodeName.startsWith("on-")) { + buildOn(node); + }else if (nodeName.startsWith("setup-")) { + buildSetupStep(steps, node); + }else if (Objects.equals(nodeName,"shell")) { + buildShellStep(steps, node); + }else if (StringUtils.isNotEmpty(nodeName)) { + buildOtherStep(steps, node); + } + } - if (Objects.equals(fullName, "on-schedule")) { - List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()); + public void buildOn(PipelineVo.PipelineJson.Nodes node) { + String nodeName = node.getName(); + Map step = new LinkedHashMap<>(); + List inputs = getInputs(node); + + if (Objects.equals(nodeName, "on-schedule")) { inputs.forEach(e -> { step.put(e.getName(), e.getValue()); }); - this.on.put(fullName.split("-")[1], step); + this.on.put(nodeName.split("-")[1], step); return; } - if (fullName.startsWith("on-")) { - List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); - inputs.forEach(e -> { - step.put(e.getName(), e.getValue().replace("\'","").split(",")); - }); + inputs.forEach(e -> { + step.put(e.getName(), e.getValue().replace("\'","").split(",")); + }); - this.on.put(fullName.split("-")[1], step); - } + this.on.put(nodeName.split("-")[1], step); } public void buildJobs(String jobKey, String jobName, List> steps) { @@ -54,17 +63,19 @@ public class NodeActionVo { job.put("runs-on", "ubuntu-latest"); job.put("name", jobName); job.put("steps", steps); - this.jobs.put(jobKey, job); + this.jobs.put(jobKey+(this.jobs.size()), job); } public void buildSetupStep(List> steps, PipelineVo.PipelineJson.Nodes node) { - String name = node.getName(); + String nodeName = node.getName(); Map step = new LinkedHashMap<>(); - if (name.startsWith("setup-java")) { - List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); + List inputs = getInputs(node); - Map name2Value = inputs.stream().collect(Collectors.toMap(e -> e.getName(), e -> e.getValue(), (o, n) -> n)); + if (nodeName.startsWith("setup-java")) { + + Map name2Value = inputs.stream() + .collect(Collectors.toMap(e -> e.getName(), e -> e.getValue(), (o, n) -> n)); Map with = new LinkedHashMap<>(); if (name2Value.containsKey("download_url") && StringUtils.isNotBlank(name2Value.get("download_url"))) { @@ -73,7 +84,7 @@ public class NodeActionVo { with.put("jdkFile", "${{ runner.temp }}/java_package.tar.gz"); } step.put("name", node.getLabel()); - step.put("uses", node.getFull_name()); + step.put("uses", node.getFull_name().trim()); if (!inputs.isEmpty()) { inputs.forEach(i -> { @@ -86,35 +97,52 @@ public class NodeActionVo { return; } - if (name.startsWith("setup-")) { - List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()).stream().filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); + step.put("name", node.getLabel()); + step.put("uses", node.getFull_name().trim()); + if (!inputs.isEmpty()) { + Map with = new LinkedHashMap<>(); + inputs.forEach(i -> { + with.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + }); - step.put("name", node.getLabel()); - step.put("uses", node.getFull_name()); - if (!inputs.isEmpty()) { - Map with = new LinkedHashMap<>(); - inputs.forEach(i -> { - with.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); - }); - - step.put("with", with); - } - steps.add(step); + step.put("with", with); } + steps.add(step); + } public void buildShellStep(List> steps, PipelineVo.PipelineJson.Nodes node) { - String fullName = node.getFull_name(); - if (Objects.equals(fullName, "shell")) { - Map step = new LinkedHashMap<>(); - step.put("name", node.getLabel()); -// step.put("run",""); - List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()); + Map step = new LinkedHashMap<>(); + step.put("name", node.getLabel()); + List inputs = Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()); + inputs.forEach(i -> { + step.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + }); + + steps.add(step); + } + + public void buildOtherStep(List> steps, PipelineVo.PipelineJson.Nodes node) { + Map step = new LinkedHashMap<>(); + + List inputs = getInputs(node); + + step.put("name", node.getLabel()); + step.put("uses", node.getFull_name().trim()); + if (!inputs.isEmpty()) { + Map with = new LinkedHashMap<>(); inputs.forEach(i -> { - step.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); + with.put(i.getName(), Optional.ofNullable(i.getValue()).orElse("")); }); - steps.add(step); + step.put("with", with); } + steps.add(step); + } + + private List getInputs(PipelineVo.PipelineJson.Nodes node) { + return Optional.ofNullable(node.getInputs()).orElse(new ArrayList<>()) + .stream() + .filter(e -> StringUtils.isNotBlank(e.getValue())).collect(Collectors.toList()); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java index 4f7ada59b..d48bfbf49 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java @@ -378,7 +378,15 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { try { PipelineVo vo = JSON.parseObject(JSON.toJSONString(pmsCiPipelineBuildInputVo), PipelineVo.class); - NodeActionVo actionVo = getNodeActionVo(vo); + List nodes = vo.getPipelineJson().getNodes(); + String pipelineName = vo.getPipelineName(); + NodeActionVo actionVo = new NodeActionVo(); + actionVo.buildName(pipelineName); + nodes.forEach(s -> { + List> steps = new ArrayList<>(); + actionVo.parse(steps, s); + actionVo.buildJobs("job", s.getLabel()+String.format("[%s]",s.getId().trim()), steps); + }); String yaml = YamlUtil.toYaml(actionVo); JSONObject result = new JSONObject(); result.put("pipeline_yaml", yaml); @@ -389,22 +397,6 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { } } - private NodeActionVo getNodeActionVo(PipelineVo vo) { - List nodes = vo.getPipelineJson().getNodes(); - String pipelineName = vo.getPipelineName(); - NodeActionVo actionVo = new NodeActionVo(); - actionVo.buildName(pipelineName); - AtomicInteger i = new AtomicInteger(); - nodes.forEach(s -> { - List> steps = new ArrayList<>(); - actionVo.buildOn(s); - actionVo.buildSetupStep(steps, s); - actionVo.buildShellStep(steps, s); - actionVo.buildJobs("job" + (i.getAndIncrement()), s.getLabel(), steps); - }); - return actionVo; - } - @Override public JSONObject reRunPipelineRunsJob(Long id, String run, String job) { PmsCiPipelines pmsCiPipelines = pmsCiPipelinesMapper.selectPmsCiPipelinesById(id); From be54bc56d8c8af9f45f0d92aa8e0b658b4f35819 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 09:19:40 +0800 Subject: [PATCH 021/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增接口:查询需求规格列表 2. 新增接口:获取需求规格详细信息 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 101 ++++++++++++++++ .../controller/ProductUserReqController.java | 10 +- .../product/domain/PmsProductRequirement.java | 9 +- .../product/domain/enums/CommonEnumType.java | 20 ++++ .../domain/enums/ProductReqStatus.java | 7 +- .../domain/vo/ProductReqSpecsDataVo.java | 51 ++++++++ .../domain/vo/ProductReqSpecsDetailVo.java | 32 +++++ .../domain/vo/ProductReqSpecsSearchVo.java | 48 ++++++++ .../domain/vo/ProductUserReqDataVo.java | 14 ++- .../domain/vo/ProductUserReqSearchVo.java | 9 +- .../mapper/PmsProductRequirementMapper.java | 3 + .../IPmsProductRequirementService.java | 6 +- .../PmsProductRequirementServiceImpl.java | 61 +++++++++- .../pms/PmsProductRequirementMapper.xml | 111 ++++++++++++------ 14 files changed, 419 insertions(+), 63 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java new file mode 100644 index 000000000..a9b682f60 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -0,0 +1,101 @@ +package com.microservices.pms.product.controller; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.core.web.domain.GenericsAjaxResult; +import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; +import com.microservices.common.security.annotation.RequiresPermissions; +import com.microservices.pms.product.domain.vo.*; +import com.microservices.pms.product.service.IPmsProductRequirementService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 产品需求规格相关接口 + * + * @author otto + * @date 2023-10-10 + */ +@RestController +@Api(tags = "项目管理-需求规格相关接口") +@RequestMapping("/{enterpriseIdentifier}/productRequirementSpecs") +@ApiImplicitParams({ + @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") +}) +public class ProductReqSpecsController extends BaseController { + @Autowired + private IPmsProductRequirementService pmsProductRequirementService; + + /** + * 查询产品需求规格列表 + */ + @ApiOperation(value = "查询需求规格列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/list") + public GenericsTableDataInfo list(@PathVariable String enterpriseIdentifier, @Validated ProductReqSpecsSearchVo productReqSpecsSearchVo) { + return pmsProductRequirementService.selectReqSpecsList(productReqSpecsSearchVo); + } + + /** + * 获取需求规格详细信息 + */ + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping(value = "/{id}") + @ApiOperation(value = "获取需求规格详细信息") + public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { + return genericsSuccess(pmsProductRequirementService.selectReqSpecsDetailById(id)); + } + + /** + * 新增需求规格 + */ + @RequiresPermissions("pms:pmsProductRequirement:add") + @Log(title = "需求规格", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation(value = "新增需求规格") + public AjaxResult add(@PathVariable String enterpriseIdentifier, + @RequestBody @Validated ProductUserReqInputVo productUserReqInputVo) { + productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier); + return success(pmsProductRequirementService.insertUserReq(productUserReqInputVo)); + } + + /** + * 修改需求规格 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation(value = "修改需求规格") + public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) { + return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo)); + } + + /** + * 删除需求规格 + */ + @RequiresPermissions("pms:pmsProductRequirement:remove") + @Log(title = "需求规格", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation(value = "删除需求规格") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids)); + } + + /** + * 评审需求规格 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @PutMapping("/review") + @ApiOperation(value = "评审需求规格") + public AjaxResult review(@RequestBody @Validated ProductUserReqReviewVo productUserReqReviewVo) { + return toAjax(pmsProductRequirementService.reviewUserReq(productUserReqReviewVo)); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 0e32b5af6..45af2d3ab 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -8,7 +8,6 @@ import com.microservices.common.log.annotation.Log; import com.microservices.common.log.enums.BusinessType; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.domain.vo.*; -import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.product.service.IPmsProductRequirementService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -26,15 +25,13 @@ import org.springframework.web.bind.annotation.*; */ @RestController @Api(tags = "项目管理-用户需求相关接口") -@RequestMapping("/{enterpriseIdentifier}/pmsProductUserRequirement") +@RequestMapping("/{enterpriseIdentifier}/productUserRequirement") @ApiImplicitParams({ @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") }) public class ProductUserReqController extends BaseController { @Autowired private IPmsProductRequirementService pmsProductRequirementService; - @Autowired - private IPmsProductModuleService pmsProductModuleService; /** * 查询产品用户需求列表 @@ -42,9 +39,8 @@ public class ProductUserReqController extends BaseController { @ApiOperation(value = "查询用户需求列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/list") - public GenericsTableDataInfo list(@PathVariable String enterpriseIdentifier, @Validated ProductUserReqSearchVo productUserReqSearchVo) { - startPage(); - return pmsProductRequirementService.selectUserReqList(enterpriseIdentifier, productUserReqSearchVo); + public GenericsTableDataInfo list(@Validated ProductUserReqSearchVo productUserReqSearchVo) { + return pmsProductRequirementService.selectUserReqList(productUserReqSearchVo); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index a996859e7..82c693c7f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.domain.BaseEntity; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsDataVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -115,7 +116,7 @@ public class PmsProductRequirement extends BaseEntity private Long pmsProjectId; /** 关联项目ID */ - @ApiModelProperty(value = "关联项目ID") + @ApiModelProperty(value = "关联模块ID") @JsonInclude(JsonInclude.Include.NON_EMPTY) private List childrenModuleIdList; @@ -158,4 +159,10 @@ public class PmsProductRequirement extends BaseEntity BeanUtils.copyProperties(this, target); return target; } + + public ProductReqSpecsDataVo toProductReqSpecsDataVo() { + ProductReqSpecsDataVo target = new ProductReqSpecsDataVo(); + BeanUtils.copyProperties(this, target); + return target; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java new file mode 100644 index 000000000..686687e13 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java @@ -0,0 +1,20 @@ +package com.microservices.pms.product.domain.enums; + +import lombok.Data; + +/** + * @author OTTO + */ +@Data +public class CommonEnumType { + private String key; + private String name; + + public CommonEnumType() { + } + + public CommonEnumType(String key, String name) { + this.key = key; + this.name = name; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index b947b51a7..de9053ace 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -4,6 +4,7 @@ import lombok.Getter; /** * 产品需求状态 + * * @author OTTO */ @Getter @@ -12,7 +13,7 @@ public enum ProductReqStatus { REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"), REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), - REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审", "已评审的需求规格(变更中)"), + REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)"), PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"), REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"), @@ -36,10 +37,10 @@ public enum ProductReqStatus { return null; } - public static String getNameByKey(String status) { + public static CommonEnumType getTypeByKey(String status) { for (ProductReqStatus productReqStatus : ProductReqStatus.values()) { if (productReqStatus.getKey().equals(status)) { - return productReqStatus.getName(); + return new CommonEnumType(productReqStatus.getKey(), productReqStatus.getName()); } } return null; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java new file mode 100644 index 000000000..214fab718 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java @@ -0,0 +1,51 @@ +package com.microservices.pms.product.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductModule; +import com.microservices.pms.product.domain.enums.CommonEnumType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格数据对象") +public class ProductReqSpecsDataVo { + private Long id; + + @ApiModelProperty(value = "需求标识") + private String identifier; + + @ApiModelProperty(value = "标题") + private String title; + + @ApiModelProperty(value = "需求状态") + private CommonEnumType status; + + @ApiModelProperty(value = "产品需求类型") + private String type; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + + /** + * 关联产品模块 + */ + @ApiModelProperty(value = "关联产品模块") + private PmsProductModule pmsProductModule; + + public ProductReqSpecsDetailVo toProductReqSpecsDetailVo() { + ProductReqSpecsDetailVo target = new ProductReqSpecsDetailVo(); + BeanUtils.copyProperties(this, target); + return target; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java new file mode 100644 index 000000000..1c6e62257 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java @@ -0,0 +1,32 @@ +package com.microservices.pms.product.domain.vo; + +import com.alibaba.fastjson2.JSONObject; +import com.microservices.pms.project.domain.PmsProject; +import com.microservices.system.api.domain.SysFileInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格详细数据对象") +public class ProductReqSpecsDetailVo extends ProductReqSpecsDataVo { + @ApiModelProperty(value = "正文") + private String content; + + @ApiModelProperty(value = "附件列表") + private List fileList; + + @ApiModelProperty(value = "关联计划(原项目需求)") + private JSONObject projectIssue; + + @ApiModelProperty(value = "关联项目") + private PmsProject project; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java new file mode 100644 index 000000000..9e94a5dbe --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java @@ -0,0 +1,48 @@ +package com.microservices.pms.product.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("用户需求搜索对象") +public class ProductReqSpecsSearchVo { + /** + * 标题 + */ + @ApiModelProperty(value = "模糊搜索标题") + private String title; + + /** + * 关联产品模块标识 + */ + @ApiModelProperty(value = "关联产品标识", required = true) + @NotNull + private String pmsProductIdentifier; + + /** + * 关联产品模块ID + */ + @ApiModelProperty(value = "关联产品模块ID(传0查询不属于任何模块的需求)") + private Long pmsProductModuleId; + + @ApiModelProperty(value = "产品需求状态(全部状态请传空)") + private String status; + + /** + * 关联项目ID + */ + @ApiModelProperty(value = "关联模块ID", hidden = true) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List childrenModuleIdList; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index 8a39e60a0..c18c73c26 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -1,12 +1,15 @@ package com.microservices.pms.product.domain.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProductModule; -import com.microservices.pms.project.domain.vo.BaseEntityVo; +import com.microservices.pms.product.domain.enums.CommonEnumType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * 产品需求对象 pms_product_requirement * @@ -15,15 +18,14 @@ import lombok.Data; */ @Data @ApiModel("用户需求数据对象") -public class ProductUserReqDataVo extends BaseEntityVo { +public class ProductUserReqDataVo { private Long id; @ApiModelProperty(value = "标题") private String title; - @ApiModelProperty(value = "需求状态") - private String status; + private CommonEnumType status; @ApiModelProperty(value = "从属产品模块") private PmsProductModule pmsProductModule; @@ -34,6 +36,10 @@ public class ProductUserReqDataVo extends BaseEntityVo { @ApiModelProperty(value = "需求来源单位") private String sourceCompany; + @ApiModelProperty(value = "需求提出时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + public ProductUserReqDetailVo toProductReqUserDetailVo() { ProductUserReqDetailVo target = new ProductUserReqDetailVo(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java index 6dcbcc668..58d3e2a47 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java @@ -1,7 +1,5 @@ package com.microservices.pms.product.domain.vo; -import com.microservices.common.core.utils.bean.BeanUtils; -import com.microservices.pms.product.domain.PmsProductRequirement; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -30,9 +28,6 @@ public class ProductUserReqSearchVo { @NotNull private String pmsProductIdentifier; - public PmsProductRequirement toPmsProductRequirement() { - PmsProductRequirement target = new PmsProductRequirement(); - BeanUtils.copyProperties(this, target); - return target; - } + @ApiModelProperty(value = "产品需求状态(全部状态请传空)") + private String status; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index 06922bc46..bd4a6cd50 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -2,6 +2,7 @@ package com.microservices.pms.product.mapper; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsSearchVo; import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -105,4 +106,6 @@ public interface PmsProductRequirementMapper List selectProductIdentifierListInRequirementIdList(@Param("idList") List idList); List selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo); + + List selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 5fd4f5b71..50fedf95b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -138,7 +138,7 @@ public interface IPmsProductRequirementService * @param productUserReqSearchVo 查询条件 * @return 用户需求列表 */ - GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo); + GenericsTableDataInfo selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo); ProductUserReqDetailVo selectUserReqDetailById(Long id); @@ -149,4 +149,8 @@ public interface IPmsProductRequirementService int deleteUserReqByIds(Long[] ids); int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo); + + GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); + + ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 48c999a6b..d664ba584 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -24,6 +24,7 @@ import com.microservices.pms.product.mapper.PmsProductRequirementMapper; import com.microservices.pms.product.service.*; import com.microservices.pms.project.domain.PmsProject; import com.microservices.pms.project.service.IPmsProjectService; +import com.microservices.pms.project.service.PmsProjectIssuesService; import com.microservices.pms.utils.PmsConstants; import com.microservices.pms.utils.PmsUtils; import com.microservices.system.api.domain.SysUser; @@ -67,6 +68,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Autowired private IPmsProjectService pmsProjectService; @Autowired + private PmsProjectIssuesService pmsProjectIssuesService; + @Autowired @Lazy private IPmsJournalsService pmsJournalsService; @@ -180,7 +183,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override - public GenericsTableDataInfo selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo) { + public GenericsTableDataInfo selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo) { pmsProductService.selectPmsProductByIdentifier(productUserReqSearchVo.getPmsProductIdentifier()); startPage(); List userReqList = pmsProductRequirementMapper.selectUserReqList(productUserReqSearchVo); @@ -190,7 +193,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo(); // 设置状态 - productUserReqDataVo.setStatus(ProductReqStatus.getNameByKey(pmsProductRequirement.getStatus())); + productUserReqDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus())); return productUserReqDataVo; } @@ -284,6 +287,60 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return updateRequirement(userReq, userReq.getPmsProductIdentifier()); } + @Override + public GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo) { + pmsProductService.selectPmsProductByIdentifier(productReqSpecsSearchVo.getPmsProductIdentifier()); + if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() != 0) { + List moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId()); + productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); + } + startPage(); + List userReqList = pmsProductRequirementMapper.selectReqSpecsList(productReqSpecsSearchVo); + HashMap hashMap = new HashMap<>(); + return PageUtils.toPage(userReqList, x -> toProductReqSpecsDataVo(x, hashMap)); + } + + + private ProductReqSpecsDataVo toProductReqSpecsDataVo(PmsProductRequirement pmsProductRequirement, HashMap hashMap) { + ProductReqSpecsDataVo productReqSpecsDataVo = pmsProductRequirement.toProductReqSpecsDataVo(); + // 设置状态 + productReqSpecsDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus())); + + // 设置产品模块 + if (pmsProductRequirement.getPmsProductModuleId() != null) { + productReqSpecsDataVo.setPmsProductModule( + PmsUtils.getSelectObjectInCache( + hashMap + , x -> pmsProductModuleService.selectPmsProductModuleById(x, false) + , pmsProductRequirement.getPmsProductModuleId()) + ); + } + return productReqSpecsDataVo; + } + + @Override + public ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id) { + PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); + return toProductReqSpecsDetailVo(pmsProductRequirement); + } + + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { + ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); + ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); + productReqSpecsDetailVo.setContent(pmsProductRequirement.getContent()); + // 设置文件列表 + productReqSpecsDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) + ); + if (pmsProductRequirement.getPmsProjectId() != null) { + productReqSpecsDetailVo.setProject(pmsProjectService.selectAndCheckPmsProjectById(pmsProductRequirement.getPmsProjectId())); + if (pmsProductRequirement.getProjectReqId() != null) { + productReqSpecsDetailVo.setProjectIssue( + pmsProjectIssuesService.selectPmsProjectIssueById(pmsProductRequirement.getProjectReqId(), pmsProductRequirement.getPmsProjectId())); + } + } + + return productReqSpecsDetailVo; + } /** * 删除产品需求信息 diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index fa1d87ed4..ba86713a2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -1,31 +1,31 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + @@ -65,7 +65,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from pms_product_requirement - /*keep orderby*/ @@ -78,21 +79,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - and title like concat('%', #{title}, '%') - and priority_id = #{priorityId} - and pms_product_plan_id = #{pmsProductPlanId} - and pms_product_identifier = #{pmsProductIdentifier} - and content = #{content} + and title like concat('%', #{title}, '%') + and priority_id = #{priorityId} + and pms_product_plan_id = #{pmsProductPlanId} + and pms_product_identifier = #{pmsProductIdentifier} + and content = #{content} and FIND_IN_SET(#{tagId},tag_ids) - and create_by = #{createBy} - and start_time = #{startTime} - and end_time = #{endTime} + and create_by = #{createBy} + and start_time = #{startTime} + and end_time = #{endTime} and file_identifiers = #{fileIdentifiers} - and sort = #{sort} + and sort = #{sort} and FIND_IN_SET(#{requirementAssigneeGitlinkId},requirement_assignee_gitlink_ids) - and pms_project_id = #{pmsProjectId} + and pms_project_id = #{pmsProjectId} and pms_product_identifier in @@ -118,13 +119,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + - + insert into pms_product_requirement `index`, @@ -183,7 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" identifier, source_user, source_company, - + #{index}, #{title}, @@ -211,7 +244,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{identifier}, #{sourceUser}, #{sourceCompany}, - + @@ -267,11 +300,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from pms_product_requirement where id = #{id} + delete + from pms_product_requirement + where id = #{id} - delete from pms_product_requirement where id in + delete from pms_product_requirement where id in #{id} From 895be1aefe1fabf04d89c57cc4b4983d4d90fa37 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 10:13:46 +0800 Subject: [PATCH 022/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增接口:新增需求规格 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 6 +- .../vo/PmsProductRequirementInputVo.java | 2 +- .../domain/vo/ProductReqSpecsDataVo.java | 3 - .../domain/vo/ProductReqSpecsDetailVo.java | 4 ++ .../domain/vo/ProductReqSpecsInputVo.java | 69 +++++++++++++++++++ .../domain/vo/ProductUserReqInputVo.java | 6 +- .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 66 ++++++++++++++++-- 8 files changed, 144 insertions(+), 14 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index a9b682f60..ca6a301ae 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -61,9 +61,9 @@ public class ProductReqSpecsController extends BaseController { @PostMapping @ApiOperation(value = "新增需求规格") public AjaxResult add(@PathVariable String enterpriseIdentifier, - @RequestBody @Validated ProductUserReqInputVo productUserReqInputVo) { - productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier); - return success(pmsProductRequirementService.insertUserReq(productUserReqInputVo)); + @RequestBody @Validated ProductReqSpecsInputVo productReqSpecsInputVo) { + productReqSpecsInputVo.setEnterpriseIdentifier(enterpriseIdentifier); + return success(pmsProductRequirementService.insertReqSpecs(productReqSpecsInputVo)); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java index 1c725eaa3..f21d336f7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java @@ -38,7 +38,7 @@ public class PmsProductRequirementInputVo private Long pmsProductModuleId; /** 关联产品模块标识 */ - @ApiModelProperty(value = "关联产品模块标识") + @ApiModelProperty(value = "关联产品标识") @NotNull private String pmsProductIdentifier; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java index 214fab718..b97e1e222 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java @@ -37,9 +37,6 @@ public class ProductReqSpecsDataVo { @ApiModelProperty(value = "更新时间") private Date updateTime; - /** - * 关联产品模块 - */ @ApiModelProperty(value = "关联产品模块") private PmsProductModule pmsProductModule; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java index 1c6e62257..feadfa130 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.domain.vo; import com.alibaba.fastjson2.JSONObject; +import com.microservices.pms.product.domain.PmsProductPlan; import com.microservices.pms.project.domain.PmsProject; import com.microservices.system.api.domain.SysFileInfo; import io.swagger.annotations.ApiModel; @@ -29,4 +30,7 @@ public class ProductReqSpecsDetailVo extends ProductReqSpecsDataVo { @ApiModelProperty(value = "关联项目") private PmsProject project; + + @ApiModelProperty(value = "关联产品计划") + private PmsProductPlan pmsProductPlan; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java new file mode 100644 index 000000000..9828a6004 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java @@ -0,0 +1,69 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 用户需求输入对象 + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格输入对象") +public class ProductReqSpecsInputVo { + @ApiModelProperty(value = "标题", required = true) + @NotBlank + @Size(max = 200, message = "长度需要小于200") + private String title; + + @ApiModelProperty(value = "关联产品模块ID") + private Long pmsProductModuleId; + + @ApiModelProperty(value = "关联产品标识", required = true) + @NotNull + private String pmsProductIdentifier; + + @ApiModelProperty(value = "正文", required = true) + @NotBlank + private String content; + + @ApiModelProperty(value = "附件标识列表") + private String fileIdentifiers; + + @ApiModelProperty(value = "企业标识", hidden = true) + private String enterpriseIdentifier; + + @ApiModelProperty(value = "产品需求类型") + private String type; + + @ApiModelProperty(value = "关联产品计划ID") + private Long pmsProductPlanId; + + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(pmsProductRequirement.getId()); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.CREATE.getKey()); + record.setOperator(pmsProductRequirement.getCreateBy()); + record.setOperatingTime(pmsProductRequirement.getCreateTime()); + return record; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java index 199874638..914d56e23 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java @@ -25,7 +25,7 @@ public class ProductUserReqInputVo { /** * 标题 */ - @ApiModelProperty(value = "标题") + @ApiModelProperty(value = "标题", required = true) @NotBlank @Size(max = 200, message = "长度需要小于200") private String title; @@ -39,14 +39,14 @@ public class ProductUserReqInputVo { /** * 关联产品模块标识 */ - @ApiModelProperty(value = "关联产品标识") + @ApiModelProperty(value = "关联产品标识", required = true) @NotNull private String pmsProductIdentifier; /** * 正文 */ - @ApiModelProperty(value = "正文") + @ApiModelProperty(value = "正文", required = true) @NotBlank private String content; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 50fedf95b..b11fe1fa5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -153,4 +153,6 @@ public interface IPmsProductRequirementService GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id); + + Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index d664ba584..6aac70e6c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -205,11 +205,14 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } @Override + @Transactional(rollbackFor = ServiceException.class) public Long insertUserReq(ProductUserReqInputVo productUserReqInputVo) { // 校验产品是否存在 PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productUserReqInputVo.getPmsProductIdentifier()); pmsProductService.checkManageRole(pmsProduct); PmsProductRequirement pmsProductRequirement = productUserReqInputVo.toPmsProductRequirement(); + // 校验参数 + checkUserReqParameter(pmsProductRequirement, pmsProduct); if (StringUtils.isEmpty(productUserReqInputVo.getSourceCompany())) { PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productUserReqInputVo.getEnterpriseIdentifier()); pmsProductRequirement.setSourceCompany(pmsEnterprise.getEnterpriseName()); @@ -236,16 +239,43 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); + checkUserReqParameter(pmsProductRequirement, pmsProduct); + int success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productUserReqUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement)); + return success; + } + + private void checkReqSpecsParameter(PmsProductRequirement pmsProductRequirement, PmsProduct pmsProduct, PmsProductRequirement oldPmsProductRequirement) { + // 校验产品计划是否存在 + if (pmsProductRequirement.getPmsProductPlanId() != null) { + PmsProductPlan pmsProductPlan = pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false); + if (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) { + throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); + } + + if (oldPmsProductRequirement == null || oldPmsProductRequirement.getPmsProductPlanId() == null) { + // 当原需求没有计划时,此操作相当于将该需求移入该计划,需要更新计划的更新时间 + pmsProductPlanService.updatePmsProductPlanChange(pmsProductRequirement.getPmsProductPlanId()); + } else if (!oldPmsProductRequirement.getPmsProductPlanId().equals(pmsProductRequirement.getPmsProductPlanId())) { + // 当原需求有计划且该计划id与原计划id不同时,此操作相当于从原计划移入新计划,需要更新原计划和新计划的更新时间 + pmsProductPlanService.updatePmsProductPlanChange(pmsProductRequirement.getPmsProductPlanId()); + pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId()); + } + } else if (oldPmsProductRequirement != null && oldPmsProductRequirement.getPmsProductPlanId() != null) { + // 当原需求有计划且当前设置计划为空时,此操作相当于将该需求从原计划中移除,需更新原计划的更新时间 + pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId()); + } + checkUserReqParameter(pmsProductRequirement, pmsProduct); + } + + private void checkUserReqParameter(PmsProductRequirement pmsProductRequirement, PmsProduct pmsProduct) { // 校验模块是否存在 if (pmsProductRequirement.getPmsProductModuleId() != null) { checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct); } // 检查附件列表是否有异常数据 pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()); - int success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); - pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( - productUserReqUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement)); - return success; } private int updateRequirement(PmsProductRequirement pmsProductRequirement, String productIdentifier) { @@ -324,6 +354,29 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return toProductReqSpecsDetailVo(pmsProductRequirement); } + @Override + @Transactional(rollbackFor = ServiceException.class) + public Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo) { + // 校验产品是否存在 + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productReqSpecsInputVo.getPmsProductIdentifier()); + pmsProductService.checkManageRole(pmsProduct); + PmsProductRequirement pmsProductRequirement = productReqSpecsInputVo.toPmsProductRequirement(); + + // 校验参数 + checkReqSpecsParameter(pmsProductRequirement, pmsProduct, null); + + // 设置默认需求状态 + pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey()); + + pmsProductRequirement.setCreateAndUpdate(SecurityUtils.getUsername()); + + pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); + pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productReqSpecsInputVo.toPmsProductReqOperationRecord(pmsProductRequirement)); + return pmsProductRequirement.getId(); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); @@ -338,6 +391,11 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProjectIssuesService.selectPmsProjectIssueById(pmsProductRequirement.getProjectReqId(), pmsProductRequirement.getPmsProjectId())); } } + // 设置产品计划 + if (pmsProductRequirement.getPmsProductPlanId() != null) { + productReqSpecsDetailVo.setPmsProductPlan( + pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false)); + } return productReqSpecsDetailVo; } From 882dd33346c402301248a57e9aec9e2e1cdbdafc Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 10:38:04 +0800 Subject: [PATCH 023/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格新增接口:校验需求规格类型是否输入正确 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/enums/ProductReqSpecsType.java | 29 +++++++++++++++++++ .../IPmsProductRequirementService.java | 1 - .../PmsProductRequirementServiceImpl.java | 4 +++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java new file mode 100644 index 000000000..60bff5755 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java @@ -0,0 +1,29 @@ +package com.microservices.pms.product.domain.enums; + +import com.microservices.common.core.exception.ServiceException; +import lombok.Getter; + +/** + * @author OTTO + */ +@Getter +public enum ProductReqSpecsType { + PERFORMANCE_REQ("performanceReq", "性能需求"), + FUNCTIONAL_REQ("functionalReq", "功能需求"); + private final String key; + private final String name; + + ProductReqSpecsType(String key, String name) { + this.key = key; + this.name = name; + } + + public static void checkKey(String key) { + for (ProductReqSpecsType type : ProductReqSpecsType.values()) { + if (type.getKey().equals(key)) { + return; + } + } + throw new ServiceException("错误的需求类型(需求类型[%s])", key); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index b11fe1fa5..d477347fb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -134,7 +134,6 @@ public interface IPmsProductRequirementService /** * 查询用户需求列表 * - * @param enterpriseIdentifier 企业标识 * @param productUserReqSearchVo 查询条件 * @return 用户需求列表 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 6aac70e6c..328edac8d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -18,6 +18,7 @@ import com.microservices.pms.product.domain.PmsProductModule; import com.microservices.pms.product.domain.PmsProductPlan; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.enums.ProductReqReviewStatus; +import com.microservices.pms.product.domain.enums.ProductReqSpecsType; import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.mapper.PmsProductRequirementMapper; @@ -266,6 +267,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 当原需求有计划且当前设置计划为空时,此操作相当于将该需求从原计划中移除,需更新原计划的更新时间 pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId()); } + if (StringUtils.isNotEmpty(pmsProductRequirement.getType())) { + ProductReqSpecsType.checkKey(pmsProductRequirement.getType()); + } checkUserReqParameter(pmsProductRequirement, pmsProduct); } From 4d0c043197f346ab48f3fc9c93d2aeabfa67e2aa Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 14:47:11 +0800 Subject: [PATCH 024/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格更新接口:修改需求规格 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 4 +- .../product/domain/PmsProductRequirement.java | 10 +++ .../enums/ProductContentModifyOperation.java | 1 + .../domain/enums/ProductReqStatus.java | 5 +- .../domain/vo/ProductReqSpecsUpdateVo.java | 62 +++++++++++++++++++ .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 58 ++++++++++++++--- .../pms/PmsProductRequirementMapper.xml | 2 +- 8 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index ca6a301ae..6b73dce9b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -73,8 +73,8 @@ public class ProductReqSpecsController extends BaseController { @Log(title = "需求规格", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation(value = "修改需求规格") - public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) { - return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo)); + public AjaxResult edit(@RequestBody @Validated ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { + return toAjax(pmsProductRequirementService.updateReqSpecs(productReqSpecsUpdateVo)); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index 82c693c7f..42678e6ea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.domain.BaseEntity; +import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; import com.microservices.pms.product.domain.vo.ProductReqSpecsDataVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; @@ -165,4 +166,13 @@ public class PmsProductRequirement extends BaseEntity BeanUtils.copyProperties(this, target); return target; } + + public PmsProductRequirement toChangeReqSpecs() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + target.setId(null); + target.setFromId(this.id); + target.setStatus(ProductReqStatus.CHANGING_REQ_SPECS.getKey()); + return target; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java index a8eb787eb..b207bcd61 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java @@ -9,6 +9,7 @@ import lombok.Getter; */ @Getter public enum ProductContentModifyOperation { + CHANGING_REQ("changingReq", "需求变更"), CREATE("create", "创建"), EDIT("edit", "编辑"); private final String key; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index de9053ace..944d858f2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -1,5 +1,6 @@ package com.microservices.pms.product.domain.enums; +import com.microservices.common.core.exception.ServiceException; import lombok.Getter; /** @@ -13,7 +14,9 @@ public enum ProductReqStatus { REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"), REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), + CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求规格"), REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)"), + PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求规格(变更中)"), PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"), REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"), @@ -34,7 +37,7 @@ public enum ProductReqStatus { return status; } } - return null; + throw new ServiceException("需求状态错误(需求状态[%s])", key); } public static CommonEnumType getTypeByKey(String status) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java new file mode 100644 index 000000000..8f4dda386 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java @@ -0,0 +1,62 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格更新对象") +public class ProductReqSpecsUpdateVo { + @ApiModelProperty(value = "需求Id", required = true) + @NotNull + private Long id; + + @ApiModelProperty(value = "标题") + @Size(max = 50, message = "长度需要小于50") + private String title; + + @ApiModelProperty(value = "关联产品模块ID") + private Long pmsProductModuleId; + + @ApiModelProperty(value = "正文") + private String content; + + @ApiModelProperty(value = "附件标识列表") + private String fileIdentifiers; + + @ApiModelProperty(value = "产品需求类型") + private String type; + + @ApiModelProperty(value = "关联产品计划ID") + private Long pmsProductPlanId; + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(pmsProductRequirement.getId()); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.EDIT.getKey()); + record.setOperator(pmsProductRequirement.getUpdateBy()); + record.setOperatingTime(pmsProductRequirement.getUpdateTime()); + return record; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index d477347fb..0fb6e4551 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -154,4 +154,6 @@ public interface IPmsProductRequirementService ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id); Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo); + + int updateReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 328edac8d..8399f6c53 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -13,10 +13,8 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.journals.service.IPmsJournalsService; -import com.microservices.pms.product.domain.PmsProduct; -import com.microservices.pms.product.domain.PmsProductModule; -import com.microservices.pms.product.domain.PmsProductPlan; -import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.*; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; import com.microservices.pms.product.domain.enums.ProductReqReviewStatus; import com.microservices.pms.product.domain.enums.ProductReqSpecsType; import com.microservices.pms.product.domain.enums.ProductReqStatus; @@ -121,12 +119,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS hashMap , pmsProductPriorityService::selectPmsProductPriorityById , pmsProductRequirement.getPriorityId())); - // 设置状态 - pmsProductRequirementDataVo.setStatus( - PmsUtils.getSelectObjectInCache( - hashMap - , ProductReqStatus::getByKey - , pmsProductRequirement.getStatus())); // 设置产品模块 if (pmsProductRequirement.getPmsProductModuleId() != null) { pmsProductRequirementDataVo.setPmsProductModule( @@ -381,6 +373,52 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return pmsProductRequirement.getId(); } + @Override + public int updateReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { + // 通过id检查需修改的产品需求是否存在 + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productReqSpecsUpdateVo.getId(), true); + PmsProductRequirement pmsProductRequirement = productReqSpecsUpdateVo.toPmsProductRequirement(); + int success = 0; + PmsProductReqOperationRecord pmsProductReqOperationRecord; + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); + checkUserReqParameter(pmsProductRequirement, pmsProduct); + switch (ProductReqStatus.getByKey(oldPmsProductRequirement.getStatus())) { + case PENDING_REVIEW_REQ_SPECS: { + // 待审核需求可随意更改 + success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + pmsProductReqOperationRecord = + productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement); + break; + } + case REVIEWED_REQ_SPECS: + case PLANNED_REQ_SPECS: { + // 已评审或已计划的需规需要进行变更(创建一条对应的需规) + if (ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + oldPmsProductRequirement.setStatus(ProductReqStatus.REVIEWED_REQ_SPECS_CHANGING.getKey()); + } else { + oldPmsProductRequirement.setStatus(ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey()); + } + + success = updateRequirement(oldPmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + pmsProductReqOperationRecord = + productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement); + pmsProductReqOperationRecord.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); + PmsProductRequirement changingReqSpecs = pmsProductRequirement.toChangeReqSpecs(); + changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); + changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); + pmsProductRequirementMapper.insertPmsProductRequirement(changingReqSpecs); + break; + } + + default: { + throw new ServiceException("当前状态下的需求规格不允许修改"); + } + } + + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + return success; + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index ba86713a2..749d270f4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -181,7 +181,7 @@ and (`status`= 'pendingReviewReqSpecs' or `status`= 'plannedReqSpecs' or `status` = 'rejectedReqSpecs' or - `status` = 'reviewedReqSpecs' or `status` = 'completedReqSpecs') + `status` = 'reviewedReqSpecs' or `status` = 'completedReqSpecs' or `status` = 'changingReqSpecs') order by update_time desc From e2e603267f001239917cc4d118a531699644092c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 15:28:38 +0800 Subject: [PATCH 025/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生成需求规格唯一标识 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/PinYinStringUtils.java | 8 ++++---- .../impl/PmsProductRequirementServiceImpl.java | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/PinYinStringUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/PinYinStringUtils.java index 55bdfebae..1e3b2a195 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/PinYinStringUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/PinYinStringUtils.java @@ -1,5 +1,6 @@ package com.microservices.common.core.utils; +import com.microservices.common.core.exception.ServiceException; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; @@ -29,7 +30,7 @@ public class PinYinStringUtils { try { pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0].charAt(0); } catch (BadHanyuPinyinOutputFormatCombination e) { - e.printStackTrace(); + throw new ServiceException("转换拼音失败"); } } else { pinyinStr += newChar[i]; @@ -55,7 +56,7 @@ public class PinYinStringUtils { try { pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { - e.printStackTrace(); + throw new ServiceException("转换拼音失败"); } } else { pinyinStr += newChar[i]; @@ -88,8 +89,7 @@ public class PinYinStringUtils { } return result.toString(); } catch (BadHanyuPinyinOutputFormatCombination e1) { - e1.printStackTrace(); + throw new ServiceException("转换拼音失败"); } - return result.toString(); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 8399f6c53..e1149d2b2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -3,10 +3,7 @@ package com.microservices.pms.product.service.impl; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.exception.NotFoundException; import com.microservices.common.core.exception.ServiceException; -import com.microservices.common.core.utils.DateUtils; -import com.microservices.common.core.utils.JSONUtils; -import com.microservices.common.core.utils.PageUtils; -import com.microservices.common.core.utils.StringUtils; +import com.microservices.common.core.utils.*; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; @@ -350,6 +347,11 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return toProductReqSpecsDetailVo(pmsProductRequirement); } + private String genReqSpecsIdentifier(String productIdentifier, String reqTitle) { + String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).replaceAll("[^a-z^A-Z]", "").toUpperCase(); + return productIdentifier + "-" + reqTitleIdentifier; + } + @Override @Transactional(rollbackFor = ServiceException.class) public Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo) { @@ -361,6 +363,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 校验参数 checkReqSpecsParameter(pmsProductRequirement, pmsProduct, null); + // 生成需求唯一标识 + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsInputVo.getTitle())); // 设置默认需求状态 pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey()); @@ -382,6 +386,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductReqOperationRecord pmsProductReqOperationRecord; PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); checkUserReqParameter(pmsProductRequirement, pmsProduct); + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { + // 更新需求唯一标识 + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle())); + } switch (ProductReqStatus.getByKey(oldPmsProductRequirement.getStatus())) { case PENDING_REVIEW_REQ_SPECS: { // 待审核需求可随意更改 From 3b9ba3e395525fac43e0db714a60e0701c534de6 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 15:30:16 +0800 Subject: [PATCH 026/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品标识调整为用户手动输入 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/PmsProductInputVo.java | 5 +++++ .../pms/product/service/impl/PmsProductServiceImpl.java | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java index 757fbe855..f91d9f955 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; /** @@ -41,6 +42,10 @@ public class PmsProductInputVo @ApiModelProperty(value = "关联企业标识", hidden = true) private String pmsEnterpriseIdentifier; + @ApiModelProperty(value = "产品标识", required = true) + @NotNull + private String productIdentifier; + public PmsProduct toPmsProduct(String pmsEnterpriseIdentifier) { PmsProduct target = new PmsProduct(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java index d081b2766..6d6313f96 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java @@ -118,7 +118,6 @@ public class PmsProductServiceImpl implements IPmsProductService { checkNameDuplicates(pmsProduct.getProductName(), pmsProduct.getPmsEnterpriseIdentifier()); PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProduct.getPmsEnterpriseIdentifier()); - pmsProduct.setProductIdentifier(genProductIdentifier()); pmsProduct.setPmsEnterpriseId(pmsEnterprise.getId()); String currentUsername=SecurityUtils.getUsername(); Date now=DateUtils.getNowDate(); From a2b1e49610668427b28766dda3509d0862772026 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 16:09:31 +0800 Subject: [PATCH 027/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格修改接口 Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/PmsProductRequirement.java | 22 ++++++++++++++++++- .../PmsProductRequirementServiceImpl.java | 21 +++++++++++------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index 42678e6ea..f41844dd6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -2,11 +2,13 @@ package com.microservices.pms.product.domain; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.domain.BaseEntity; import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; import com.microservices.pms.product.domain.vo.ProductReqSpecsDataVo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsUpdateVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -167,12 +169,30 @@ public class PmsProductRequirement extends BaseEntity return target; } - public PmsProductRequirement toChangeReqSpecs() { + public PmsProductRequirement toChangeReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { PmsProductRequirement target = new PmsProductRequirement(); BeanUtils.copyProperties(this, target); target.setId(null); target.setFromId(this.id); target.setStatus(ProductReqStatus.CHANGING_REQ_SPECS.getKey()); + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { + target.setTitle(productReqSpecsUpdateVo.getTitle()); + } + if (productReqSpecsUpdateVo.getPmsProductModuleId() != null) { + target.setPmsProductModuleId(productReqSpecsUpdateVo.getPmsProductModuleId()); + } + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getContent())) { + target.setContent(productReqSpecsUpdateVo.getContent()); + } + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getFileIdentifiers())) { + target.setFileIdentifiers(productReqSpecsUpdateVo.getFileIdentifiers()); + } + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getType())) { + target.setType(productReqSpecsUpdateVo.getType()); + } + if (productReqSpecsUpdateVo.getPmsProductPlanId() != null) { + target.setPmsProductPlanId(productReqSpecsUpdateVo.getPmsProductPlanId()); + } return target; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index e1149d2b2..b78a8d1af 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -353,7 +353,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } @Override - @Transactional(rollbackFor = ServiceException.class) + @Transactional(rollbackFor = Exception.class) public Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo) { // 校验产品是否存在 PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productReqSpecsInputVo.getPmsProductIdentifier()); @@ -378,6 +378,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } @Override + @Transactional(rollbackFor = Exception.class) public int updateReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { // 通过id检查需修改的产品需求是否存在 PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productReqSpecsUpdateVo.getId(), true); @@ -386,13 +387,16 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductReqOperationRecord pmsProductReqOperationRecord; PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); checkUserReqParameter(pmsProductRequirement, pmsProduct); + String reqIdentifier = oldPmsProductRequirement.getIdentifier(); if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { // 更新需求唯一标识 - pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle())); + reqIdentifier = genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle()); } switch (ProductReqStatus.getByKey(oldPmsProductRequirement.getStatus())) { - case PENDING_REVIEW_REQ_SPECS: { - // 待审核需求可随意更改 + case PENDING_REVIEW_REQ_SPECS: + case CHANGING_REQ_SPECS: { + // 待审核和变更中的需求可随意更改 + pmsProductRequirement.setIdentifier(reqIdentifier); success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); pmsProductReqOperationRecord = productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement); @@ -408,13 +412,14 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } success = updateRequirement(oldPmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); - pmsProductReqOperationRecord = - productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement); - pmsProductReqOperationRecord.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); - PmsProductRequirement changingReqSpecs = pmsProductRequirement.toChangeReqSpecs(); + PmsProductRequirement changingReqSpecs = oldPmsProductRequirement.toChangeReqSpecs(productReqSpecsUpdateVo); + changingReqSpecs.setIdentifier(reqIdentifier); changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); pmsProductRequirementMapper.insertPmsProductRequirement(changingReqSpecs); + pmsProductReqOperationRecord = + productReqSpecsUpdateVo.toPmsProductReqOperationRecord(changingReqSpecs); + pmsProductReqOperationRecord.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); break; } From 553d4a1887a2b0adb8e636867b0c7e834cfbb1e8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Sat, 30 Nov 2024 17:03:39 +0800 Subject: [PATCH 028/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善用户需求评审接口:用户需求评审通过时创建一条对应的需求规格 Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/PmsProductRequirement.java | 9 +++++++++ .../PmsProductRequirementServiceImpl.java | 20 ++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index f41844dd6..831f59b35 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -169,6 +169,15 @@ public class PmsProductRequirement extends BaseEntity return target; } + public PmsProductRequirement userReqToReqSpecs() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + target.setId(null); + target.setFromId(this.id); + target.setStatus(ProductReqStatus.REVIEWED_REQ_SPECS.getKey()); + return target; + } + public PmsProductRequirement toChangeReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { PmsProductRequirement target = new PmsProductRequirement(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index b78a8d1af..9822da7e2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -296,20 +296,34 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) { throw new ServiceException("只有待审核状态的用户需求才能进行审核"); } + PmsProductReqOperationRecord pmsProductReqOperationRecord + = productUserReqReviewVo.toPmsProductReqOperationRecord(SecurityUtils.getUsername()); if (ProductReqReviewStatus.PASS.getKey().equals(productUserReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REVIEWED_USER_REQ.getKey()); - //TODO:已通过的用户需求需创建一条对应的需求规格 + userReqToReqSpecs(userReq, pmsProductReqOperationRecord); } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productUserReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REJECTED_USER_REQ.getKey()); } else { throw new ServiceException("请选择正确的审核意见"); } // 记录评审意见 - pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( - productUserReqReviewVo.toPmsProductReqOperationRecord(SecurityUtils.getUsername())); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); return updateRequirement(userReq, userReq.getPmsProductIdentifier()); } + /** + * 用户需求转换为需求规格 + */ + private void userReqToReqSpecs(PmsProductRequirement userReq, PmsProductReqOperationRecord record) { + PmsProductRequirement reqSpecs = + userReq.userReqToReqSpecs(); + reqSpecs.setIdentifier(genReqSpecsIdentifier(userReq.getPmsProductIdentifier(), userReq.getTitle())); + reqSpecs.setCreateAndUpdate(SecurityUtils.getUsername()); + pmsProductRequirementMapper.insertPmsProductRequirement(reqSpecs); + record.setProductRequirementId(reqSpecs.getId()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(record); + } + @Override public GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo) { pmsProductService.selectPmsProductByIdentifier(productReqSpecsSearchVo.getPmsProductIdentifier()); From a4662b16f6d484c7a61e59e881814e7e97abd9b9 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 2 Dec 2024 09:46:06 +0800 Subject: [PATCH 029/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格修改接口:原需求评论需迁移至变更后的需求 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/journals/mapper/PmsJournalsMapper.java | 2 ++ .../pms/journals/service/IPmsJournalsService.java | 9 +++++++++ .../journals/service/impl/PmsJournalsServiceImpl.java | 5 +++++ .../service/impl/PmsProductRequirementServiceImpl.java | 3 +++ 4 files changed, 19 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/mapper/PmsJournalsMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/mapper/PmsJournalsMapper.java index 340262eed..c90b270eb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/mapper/PmsJournalsMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/mapper/PmsJournalsMapper.java @@ -79,4 +79,6 @@ public interface PmsJournalsMapper * @param journalId 评论对象Id */ void deletePmsJournalsByTypeAndJournalId(@Param("type") String type, @Param("journalId") Long journalId); + + void updateJournalsIdByTypeAndOldId(@Param("type") String type, @Param("oldJournalId") Long oldJournalId, @Param("journalId") Long journalId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/IPmsJournalsService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/IPmsJournalsService.java index 378a72198..d2fe2aeed 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/IPmsJournalsService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/IPmsJournalsService.java @@ -68,4 +68,13 @@ public interface IPmsJournalsService * @param journalId 评论对象Id */ void deletePmsJournalsByTypeAndJournalId(String type, Long journalId); + + /** + * 更新评论对象id + * + * @param type 类型 + * @param oldJournalId 原评论对象Id + * @param journalId 评论对象Id + */ + void updateJournalsIdByTypeAndOldId(String type, Long oldJournalId, Long journalId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/impl/PmsJournalsServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/impl/PmsJournalsServiceImpl.java index 0ba95e6d7..ded092e79 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/impl/PmsJournalsServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/journals/service/impl/PmsJournalsServiceImpl.java @@ -228,4 +228,9 @@ public class PmsJournalsServiceImpl implements IPmsJournalsService public void deletePmsJournalsByTypeAndJournalId(String type, Long journalId) { pmsJournalsMapper.deletePmsJournalsByTypeAndJournalId(type, journalId); } + + @Override + public void updateJournalsIdByTypeAndOldId(String type, Long oldJournalId, Long journalId) { + pmsJournalsMapper.updateJournalsIdByTypeAndOldId(type, oldJournalId, journalId); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 9822da7e2..acf8d8721 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -431,6 +431,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); pmsProductRequirementMapper.insertPmsProductRequirement(changingReqSpecs); + // 原需求评论需迁移至变更后的需求 + pmsJournalsService.updateJournalsIdByTypeAndOldId( + PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, oldPmsProductRequirement.getId(), changingReqSpecs.getId()); pmsProductReqOperationRecord = productReqSpecsUpdateVo.toPmsProductReqOperationRecord(changingReqSpecs); pmsProductReqOperationRecord.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); From ab971d7278bafa9d61ec9e8f28ade11f6121cb01 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 2 Dec 2024 09:52:22 +0800 Subject: [PATCH 030/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格删除接口: 1. 限制只有待审核和变更中状态的需求规格才能被删除 2. 变更中需求规格被删除时需将原需求还原状态 3. 需求评论对象还原为原需求id 4. 记录取消变更 5. 删除需求规格时,删除需求规格与需求评论的关联关系 6. 更新产品更新时间 7. 删除需求规格 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 2 +- .../enums/ProductContentModifyOperation.java | 1 + .../domain/enums/ProductReqStatus.java | 12 +++ .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 87 ++++++++++++++----- .../mapper/pms/PmsJournalsMapper.xml | 6 ++ 6 files changed, 88 insertions(+), 22 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 6b73dce9b..78524647a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -85,7 +85,7 @@ public class ProductReqSpecsController extends BaseController { @DeleteMapping("/{ids}") @ApiOperation(value = "删除需求规格") public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids)); + return toAjax(pmsProductRequirementService.deleteReqSpecsByIds(ids)); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java index b207bcd61..133a2eaf0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java @@ -10,6 +10,7 @@ import lombok.Getter; @Getter public enum ProductContentModifyOperation { CHANGING_REQ("changingReq", "需求变更"), + CANCEL_CHANGE_REQ("cancelChangeReq", "取消需求变更"), CREATE("create", "创建"), EDIT("edit", "编辑"); private final String key; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 944d858f2..5ac45fec8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -48,4 +48,16 @@ public enum ProductReqStatus { } return null; } + + // 获取来源状态 + public static ProductReqStatus getFromStatus(String status) { + ProductReqStatus productReqStatus = getByKey(status); + if (REVIEWED_REQ_SPECS_CHANGING == productReqStatus) { + return REVIEWED_REQ_SPECS; + } else if (PLANNED_REQ_SPECS_CHANGING == productReqStatus) { + return PLANNED_REQ_SPECS; + } else { + throw new ServiceException("获取需求规格的来源状态失败"); + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 0fb6e4551..18c0053e4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -156,4 +156,6 @@ public interface IPmsProductRequirementService Long insertReqSpecs(ProductReqSpecsInputVo productReqSpecsInputVo); int updateReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo); + + int deleteReqSpecsByIds(Long[] ids); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index acf8d8721..e4dc0b572 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -11,10 +11,7 @@ import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.journals.service.IPmsJournalsService; import com.microservices.pms.product.domain.*; -import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; -import com.microservices.pms.product.domain.enums.ProductReqReviewStatus; -import com.microservices.pms.product.domain.enums.ProductReqSpecsType; -import com.microservices.pms.product.domain.enums.ProductReqStatus; +import com.microservices.pms.product.domain.enums.*; import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.mapper.PmsProductRequirementMapper; import com.microservices.pms.product.service.*; @@ -288,6 +285,71 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return success; } + + /** + * 删除产品需求信息 + * + * @param id 产品需求主键 + * @return 结果 + */ + @Transactional(rollbackFor = Exception.class) + public int deleteUserReqById(Long id) { + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); + if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("只有待审核状态的用户需求才能被删除"); + } + pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); + pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); + return pmsProductRequirementMapper.deletePmsProductRequirementById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteReqSpecsByIds(Long[] ids) { + int success = 0; + for (Long id : ids) { + success += deleteReqSpecsById(id); + } + return success; + } + + + /** + * 删除产品需求信息 + * + * @param id 产品需求主键 + * @return 结果 + */ + @Transactional(rollbackFor = Exception.class) + public int deleteReqSpecsById(Long id) { + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); + + if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && + ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("只有待审核和变更中状态的需求规格才能被删除"); + } + if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + // 变更中需求规格被删除时需将原需求还原状态 + PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(oldPmsProductRequirement.getFromId(), true); + fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(oldPmsProductRequirement.getStatus()).getKey()); + updateRequirement(fromReqSpecs, oldPmsProductRequirement.getPmsProductIdentifier()); + // 需求评论对象还原为原需求id + pmsJournalsService.updateJournalsIdByTypeAndOldId( + PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, oldPmsProductRequirement.getId(), fromReqSpecs.getId()); + // 记录取消变更 + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(fromReqSpecs.getId()); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.CANCEL_CHANGE_REQ.getKey()); + record.setOperator(SecurityUtils.getUsername()); + record.setOperatingTime(DateUtils.getNowDate()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(record); + } + pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); + pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); + return pmsProductRequirementMapper.deletePmsProductRequirementById(id); + } + @Override @Transactional(rollbackFor = ServiceException.class) public int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo) { @@ -472,23 +534,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return productReqSpecsDetailVo; } - /** - * 删除产品需求信息 - * - * @param id 产品需求主键 - * @return 结果 - */ - @Transactional(rollbackFor = Exception.class) - public int deleteUserReqById(Long id) { - PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); - if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核状态的用户需求可以被删除"); - } - pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); - pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); - return pmsProductRequirementMapper.deletePmsProductRequirementById(id); - } - private ProductUserReqDetailVo toProductUserReqDetailVo(PmsProductRequirement pmsProductRequirement) { ProductUserReqDataVo productUserReqDataVo = toProductUserReqDataVo(pmsProductRequirement); ProductUserReqDetailVo productUserReqDetailVo = productUserReqDataVo.toProductReqUserDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsJournalsMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsJournalsMapper.xml index 5ff35f4d5..d921e3cd4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsJournalsMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsJournalsMapper.xml @@ -147,6 +147,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + update pms_journals + set journalized_id = #{journalId} + where journalized_type = #{type} + and journalized_id = #{oldJournalId} + delete from pms_journals where id = #{id} From 1e222677d25c0ce726d6c9f083dc57bed3881102 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 2 Dec 2024 14:00:24 +0800 Subject: [PATCH 031/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求规格评审接口: 1. 限制只有待审核和变更中状态的需求规格才能进行审核 2. 变更中的需求规格通过评审后设置状态为原需规状态 3. 变更中的需规通过审核时需将原需求状态调整为已变更 4. 变更中的需求规格拒绝评审后设置状态为已拒绝变更状态 5. 变更中的需规通过审核时需将原需求状态调整为来源状态 6. 需求评论对象还原为原需求id 7. 原需规记录评审意见 8. 记录评审意见并更新需规 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 4 +- .../controller/ProductUserReqController.java | 4 +- .../domain/enums/ProductReqStatus.java | 2 + ...qReviewVo.java => ProductReqReviewVo.java} | 19 ++++-- .../IPmsProductRequirementService.java | 4 +- .../PmsProductRequirementServiceImpl.java | 59 +++++++++++++++++-- 6 files changed, 77 insertions(+), 15 deletions(-) rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/{ProductUserReqReviewVo.java => ProductReqReviewVo.java} (66%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 78524647a..6cc76536a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -95,7 +95,7 @@ public class ProductReqSpecsController extends BaseController { @Log(title = "需求规格", businessType = BusinessType.UPDATE) @PutMapping("/review") @ApiOperation(value = "评审需求规格") - public AjaxResult review(@RequestBody @Validated ProductUserReqReviewVo productUserReqReviewVo) { - return toAjax(pmsProductRequirementService.reviewUserReq(productUserReqReviewVo)); + public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { + return toAjax(pmsProductRequirementService.reviewReqSpecs(productReqReviewVo)); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 45af2d3ab..193c17e26 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -95,7 +95,7 @@ public class ProductUserReqController extends BaseController { @Log(title = "用户需求", businessType = BusinessType.UPDATE) @PutMapping("/review") @ApiOperation(value = "评审用户需求") - public AjaxResult review(@RequestBody @Validated ProductUserReqReviewVo productUserReqReviewVo) { - return toAjax(pmsProductRequirementService.reviewUserReq(productUserReqReviewVo)); + public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { + return toAjax(pmsProductRequirementService.reviewUserReq(productReqReviewVo)); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 5ac45fec8..09b9b409f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -15,6 +15,8 @@ public enum ProductReqStatus { REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求规格"), + CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求规格"), + REJECTED_CHANGE_REQ_SPECS("rejectedChangeReqSpecs", "已拒绝变更", "已拒绝变更的需求规格"), REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)"), PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求规格(变更中)"), PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java similarity index 66% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 657cb3081..1f647ad52 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -17,13 +17,13 @@ import java.util.Date; */ @Data @ApiModel("用户需求评审对象") -public class ProductUserReqReviewVo { +public class ProductReqReviewVo { @ApiModelProperty(value = "需求Id", required = true) @NotNull private Long id; - @ApiModelProperty(value = "评审意见", required = true) + @ApiModelProperty(value = "评审状态", required = true) @NotNull private String reviewStatus; @@ -31,11 +31,11 @@ public class ProductUserReqReviewVo { @NotNull private Date reviewTime; - @ApiModelProperty(value = "评审结论", required = true) + @ApiModelProperty(value = "评审意见", required = true) @NotNull private String reviewContent; - public PmsProductReqOperationRecord toPmsProductReqOperationRecord(String operator) { + public PmsProductReqOperationRecord toUserReqRecord(String operator) { PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); record.setProductRequirementId(id); record.setType(ProductReqOperationType.REVIEW_USER_REQ.getKey()); @@ -45,4 +45,15 @@ public class ProductUserReqReviewVo { record.setContent(reviewContent); return record; } + + public PmsProductReqOperationRecord toReqSpecsRecord(String operator) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(id); + record.setType(ProductReqOperationType.REVIEW_REQ_SPECS.getKey()); + record.setOperation(reviewStatus); + record.setOperator(operator); + record.setOperatingTime(reviewTime); + record.setContent(reviewContent); + return record; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 18c0053e4..20a8d12f8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -147,7 +147,7 @@ public interface IPmsProductRequirementService int deleteUserReqByIds(Long[] ids); - int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo); + int reviewUserReq(ProductReqReviewVo productReqReviewVo); GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); @@ -158,4 +158,6 @@ public interface IPmsProductRequirementService int updateReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo); int deleteReqSpecsByIds(Long[] ids); + + int reviewReqSpecs(ProductReqReviewVo productReqReviewVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index e4dc0b572..2fefba4fe 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -352,27 +352,74 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override @Transactional(rollbackFor = ServiceException.class) - public int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo) { + public int reviewUserReq(ProductReqReviewVo productReqReviewVo) { // 通过id检查需修改的产品需求是否存在 - PmsProductRequirement userReq = selectPmsProductRequirementById(productUserReqReviewVo.getId(), true); + PmsProductRequirement userReq = selectPmsProductRequirementById(productReqReviewVo.getId(), true); if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) { throw new ServiceException("只有待审核状态的用户需求才能进行审核"); } PmsProductReqOperationRecord pmsProductReqOperationRecord - = productUserReqReviewVo.toPmsProductReqOperationRecord(SecurityUtils.getUsername()); - if (ProductReqReviewStatus.PASS.getKey().equals(productUserReqReviewVo.getReviewStatus())) { + = productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername()); + if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REVIEWED_USER_REQ.getKey()); userReqToReqSpecs(userReq, pmsProductReqOperationRecord); - } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productUserReqReviewVo.getReviewStatus())) { + } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REJECTED_USER_REQ.getKey()); } else { - throw new ServiceException("请选择正确的审核意见"); + throw new ServiceException("请选择正确的审核状态"); } // 记录评审意见 pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); return updateRequirement(userReq, userReq.getPmsProductIdentifier()); } + + @Override + public int reviewReqSpecs(ProductReqReviewVo productReqReviewVo) { + // 通过id检查需修改的需求规格是否存在 + PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqReviewVo.getId(), true); + if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(reqSpecs.getStatus()) + && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { + throw new ServiceException("只有待审核和变更中状态的需求规格才能进行审核"); + } + PmsProductReqOperationRecord pmsProductReqOperationRecord + = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername()); + if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { + if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { + PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true); + // 变更中的需求规格通过评审后设置状态为原需规状态 + reqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); + // 变更中的需规通过审核时需将原需求状态调整为已变更 + fromReqSpecs.setStatus(ProductReqStatus.CHANGED_REQ_SPECS.getKey()); + updateRequirement(fromReqSpecs, reqSpecs.getPmsProductIdentifier()); + } else { + reqSpecs.setStatus(ProductReqStatus.REVIEWED_REQ_SPECS.getKey()); + } + } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productReqReviewVo.getReviewStatus())) { + if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { + PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true); + // 变更中的需求规格拒绝评审后设置状态为已拒绝变更状态 + reqSpecs.setStatus(ProductReqStatus.REJECTED_CHANGE_REQ_SPECS.getKey()); + // 变更中的需规通过审核时需将原需求状态调整为来源状态 + fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); + updateRequirement(fromReqSpecs, reqSpecs.getPmsProductIdentifier()); + // 需求评论对象还原为原需求id + pmsJournalsService.updateJournalsIdByTypeAndOldId( + PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, reqSpecs.getId(), fromReqSpecs.getId()); + // 原需规记录评审意见 + pmsProductReqOperationRecord.setId(fromReqSpecs.getId()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + } else { + reqSpecs.setStatus(ProductReqStatus.REJECTED_REQ_SPECS.getKey()); + } + } else { + throw new ServiceException("请选择正确的审核状态"); + } + // 记录评审意见 + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + return updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier()); + } + /** * 用户需求转换为需求规格 */ From f50d4ef1a82739a3d69a904ad192d69d2e60c9c9 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 2 Dec 2024 15:17:37 +0800 Subject: [PATCH 032/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需规修改接口拆分为修改接口和变更接口: 1. 限制已评审或计划中的需求规格请通过需求变更调整需求内容(标题、正文、附件) 2. 限制变更需求规格时,变更内容不能为空 3. 已评审或已计划的需规需要进行变更:调整原需规状态、创建变更后的需规、更新需求唯一标识、原需求评论需迁移至变更后的需求、记录变更评审记录 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 11 +++ .../product/domain/PmsProductRequirement.java | 25 ++---- .../domain/enums/ProductReqStatus.java | 12 +++ .../domain/vo/ProductReqSpecsChangeVo.java | 57 ++++++++++++ .../domain/vo/ProductReqSpecsUpdateVo.java | 18 +--- .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 90 ++++++++++--------- 7 files changed, 137 insertions(+), 78 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 6cc76536a..fb7ebb2da 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -77,6 +77,17 @@ public class ProductReqSpecsController extends BaseController { return toAjax(pmsProductRequirementService.updateReqSpecs(productReqSpecsUpdateVo)); } + /** + * 变更需求规格 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @PutMapping + @ApiOperation(value = "变更需求规格") + public AjaxResult change(@RequestBody @Validated ProductReqSpecsChangeVo productReqSpecsChangeVo) { + return toAjax(pmsProductRequirementService.changeReqSpecs(productReqSpecsChangeVo)); + } + /** * 删除需求规格 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index 831f59b35..b6d812017 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -7,8 +7,8 @@ import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.domain.BaseEntity; import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsChangeVo; import com.microservices.pms.product.domain.vo.ProductReqSpecsDataVo; -import com.microservices.pms.product.domain.vo.ProductReqSpecsUpdateVo; import com.microservices.pms.product.domain.vo.ProductUserReqDataVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -178,29 +178,20 @@ public class PmsProductRequirement extends BaseEntity return target; } - public PmsProductRequirement toChangeReqSpecs(ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { + public PmsProductRequirement toChangeReqSpecs(ProductReqSpecsChangeVo productReqSpecsChangeVo) { PmsProductRequirement target = new PmsProductRequirement(); BeanUtils.copyProperties(this, target); target.setId(null); target.setFromId(this.id); target.setStatus(ProductReqStatus.CHANGING_REQ_SPECS.getKey()); - if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { - target.setTitle(productReqSpecsUpdateVo.getTitle()); + if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getTitle())) { + target.setTitle(productReqSpecsChangeVo.getTitle()); } - if (productReqSpecsUpdateVo.getPmsProductModuleId() != null) { - target.setPmsProductModuleId(productReqSpecsUpdateVo.getPmsProductModuleId()); + if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getContent())) { + target.setContent(productReqSpecsChangeVo.getContent()); } - if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getContent())) { - target.setContent(productReqSpecsUpdateVo.getContent()); - } - if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getFileIdentifiers())) { - target.setFileIdentifiers(productReqSpecsUpdateVo.getFileIdentifiers()); - } - if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getType())) { - target.setType(productReqSpecsUpdateVo.getType()); - } - if (productReqSpecsUpdateVo.getPmsProductPlanId() != null) { - target.setPmsProductPlanId(productReqSpecsUpdateVo.getPmsProductPlanId()); + if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getFileIdentifiers())) { + target.setFileIdentifiers(productReqSpecsChangeVo.getFileIdentifiers()); } return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 09b9b409f..73848c350 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -62,4 +62,16 @@ public enum ProductReqStatus { throw new ServiceException("获取需求规格的来源状态失败"); } } + + // 获取将改成的状态 + public static ProductReqStatus getToStatus(String status) { + ProductReqStatus productReqStatus = getByKey(status); + if (REVIEWED_REQ_SPECS == productReqStatus) { + return REVIEWED_REQ_SPECS_CHANGING; + } else if (PLANNED_REQ_SPECS == productReqStatus) { + return PLANNED_REQ_SPECS_CHANGING; + } else { + throw new ServiceException("获取需求规格的更新状态失败"); + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java new file mode 100644 index 000000000..87bddaabd --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -0,0 +1,57 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.common.core.utils.StringUtils; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("变更需求规格变更对象") +public class ProductReqSpecsChangeVo { + @ApiModelProperty(value = "需求Id", required = true) + @NotNull + private Long id; + + @ApiModelProperty(value = "标题") + @Size(max = 50, message = "长度需要小于50") + private String title; + + @ApiModelProperty(value = "正文") + private String content; + + @ApiModelProperty(value = "附件标识列表") + private String fileIdentifiers; + + // 需求变更记录应记录在原需求下 + public PmsProductReqOperationRecord toReqSpecsChangeRecord(Long oldReqSpecsId, PmsProductRequirement changeReqSpecs) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(oldReqSpecsId); + record.setType(ProductReqOperationType.CONTENT_MODIFY.getKey()); + record.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); + record.setOperator(changeReqSpecs.getUpdateBy()); + record.setOperatingTime(changeReqSpecs.getUpdateTime()); + return record; + } + + public boolean isReqChange(PmsProductRequirement oldPmsProductRequirement) { + if (StringUtils.isNotEmpty(this.getContent()) || StringUtils.isNotEmpty(this.getFileIdentifiers()) || StringUtils.isNotEmpty(this.getTitle())) { + return !oldPmsProductRequirement.getTitle().equals(this.title) + || !oldPmsProductRequirement.getContent().equals(this.content) + || !oldPmsProductRequirement.getFileIdentifiers().equals(this.fileIdentifiers); + } + return false; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java index 8f4dda386..0ffcc3461 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java @@ -9,9 +9,6 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - /** * 产品需求对象 pms_product_requirement * @@ -20,24 +17,11 @@ import javax.validation.constraints.Size; */ @Data @ApiModel("需求规格更新对象") -public class ProductReqSpecsUpdateVo { - @ApiModelProperty(value = "需求Id", required = true) - @NotNull - private Long id; - - @ApiModelProperty(value = "标题") - @Size(max = 50, message = "长度需要小于50") - private String title; +public class ProductReqSpecsUpdateVo extends ProductReqSpecsChangeVo { @ApiModelProperty(value = "关联产品模块ID") private Long pmsProductModuleId; - @ApiModelProperty(value = "正文") - private String content; - - @ApiModelProperty(value = "附件标识列表") - private String fileIdentifiers; - @ApiModelProperty(value = "产品需求类型") private String type; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 20a8d12f8..133706349 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -160,4 +160,6 @@ public interface IPmsProductRequirementService int deleteReqSpecsByIds(Long[] ids); int reviewReqSpecs(ProductReqReviewVo productReqReviewVo); + + int changeReqSpecs(ProductReqSpecsChangeVo productReqSpecsChangeVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 2fefba4fe..dedbae217 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -509,52 +509,54 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS int success = 0; PmsProductReqOperationRecord pmsProductReqOperationRecord; PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); - checkUserReqParameter(pmsProductRequirement, pmsProduct); - String reqIdentifier = oldPmsProductRequirement.getIdentifier(); - if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { + checkReqSpecsParameter(pmsProductRequirement, pmsProduct, oldPmsProductRequirement); + if (ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) || ProductReqStatus.PLANNED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + if (productReqSpecsUpdateVo.isReqChange(oldPmsProductRequirement)) { + throw new ServiceException("已评审或计划中的需求规格请通过需求变更调整需求内容(标题、正文、附件)"); + } + } else if (ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) || ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + // 待审核和变更中的需求可随意更改 + if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { + // 更新需求唯一标识 + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle())); + } + } else { + throw new ServiceException("当前状态下的需求规格不允许修改"); + } + success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement)); + return success; + } + + @Override + public int changeReqSpecs(ProductReqSpecsChangeVo productReqSpecsChangeVo) { + // 通过id检查需修改的产品需求是否存在 + PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productReqSpecsChangeVo.getId(), true); + if (!ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && !ProductReqStatus.PLANNED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("仅已评审和计划中的需求规格才能发起需求变更"); + } + if (!productReqSpecsChangeVo.isReqChange(oldPmsProductRequirement)) { + throw new ServiceException("变更需求规格时,变更内容不能为空"); + } + + // 已评审或已计划的需规需要进行变更(创建一条对应的需规) + // 调整原需规状态 + oldPmsProductRequirement.setStatus(ProductReqStatus.getToStatus(oldPmsProductRequirement.getStatus()).getKey()); + updateRequirement(oldPmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); + // 创建变更后的需规 + PmsProductRequirement changingReqSpecs = oldPmsProductRequirement.toChangeReqSpecs(productReqSpecsChangeVo); + if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getTitle())) { // 更新需求唯一标识 - reqIdentifier = genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle()); + changingReqSpecs.setIdentifier(genReqSpecsIdentifier(oldPmsProductRequirement.getPmsProductIdentifier(), productReqSpecsChangeVo.getTitle())); } - switch (ProductReqStatus.getByKey(oldPmsProductRequirement.getStatus())) { - case PENDING_REVIEW_REQ_SPECS: - case CHANGING_REQ_SPECS: { - // 待审核和变更中的需求可随意更改 - pmsProductRequirement.setIdentifier(reqIdentifier); - success = updateRequirement(pmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); - pmsProductReqOperationRecord = - productReqSpecsUpdateVo.toPmsProductReqOperationRecord(pmsProductRequirement); - break; - } - case REVIEWED_REQ_SPECS: - case PLANNED_REQ_SPECS: { - // 已评审或已计划的需规需要进行变更(创建一条对应的需规) - if (ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { - oldPmsProductRequirement.setStatus(ProductReqStatus.REVIEWED_REQ_SPECS_CHANGING.getKey()); - } else { - oldPmsProductRequirement.setStatus(ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey()); - } - - success = updateRequirement(oldPmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier()); - PmsProductRequirement changingReqSpecs = oldPmsProductRequirement.toChangeReqSpecs(productReqSpecsUpdateVo); - changingReqSpecs.setIdentifier(reqIdentifier); - changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); - changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); - pmsProductRequirementMapper.insertPmsProductRequirement(changingReqSpecs); - // 原需求评论需迁移至变更后的需求 - pmsJournalsService.updateJournalsIdByTypeAndOldId( - PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, oldPmsProductRequirement.getId(), changingReqSpecs.getId()); - pmsProductReqOperationRecord = - productReqSpecsUpdateVo.toPmsProductReqOperationRecord(changingReqSpecs); - pmsProductReqOperationRecord.setOperation(ProductContentModifyOperation.CHANGING_REQ.getKey()); - break; - } - - default: { - throw new ServiceException("当前状态下的需求规格不允许修改"); - } - } - - pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); + changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); + int success = pmsProductRequirementMapper.insertPmsProductRequirement(changingReqSpecs); + // 原需求评论需迁移至变更后的需求 + pmsJournalsService.updateJournalsIdByTypeAndOldId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, oldPmsProductRequirement.getId(), changingReqSpecs.getId()); + // 插入变更记录 + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(productReqSpecsChangeVo.toReqSpecsChangeRecord(oldPmsProductRequirement.getId(), changingReqSpecs)); return success; } From f12fac99e77c70717fe1fdbdba45ced1504ffb13 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 3 Dec 2024 11:02:34 +0800 Subject: [PATCH 033/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求规格纳入计划接口开发: 1. 限制仅已评审状态的需求规格才能纳入计划 2. 将需求规格文件上传至forge 3. 在对应项目中创建计划 4. 更新需规状态,记录计划id 5. 记录需规纳入计划操作 Signed-off-by: OTTO <731554297@qq.com> --- .../system/api/RemoteFileService.java | 10 ++++ .../factory/RemoteFileFallbackFactory.java | 5 ++ .../file/controller/CommonController.java | 13 +++++ .../file/service/ISysFileInfoService.java | 2 + .../service/impl/SysFileInfoServiceImpl.java | 24 +++++++++ .../controller/ProductReqSpecsController.java | 13 ++++- .../domain/enums/ProductReqOperationType.java | 1 + .../product/domain/vo/ProductReqReviewVo.java | 2 +- .../vo/ProductReqSpecsActivePlanVo.java | 52 +++++++++++++++++++ .../domain/vo/ProductReqSpecsChangeVo.java | 12 +++-- .../IPmsProductRequirementService.java | 2 + .../PmsProductRequirementServiceImpl.java | 34 ++++++++++++ .../pms/PmsProductRequirementMapper.xml | 2 +- 13 files changed, 164 insertions(+), 8 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java index 36cf769cf..9e3fd6f7b 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java @@ -107,4 +107,14 @@ public interface RemoteFileService { @RequestParam("type") String type, @RequestParam("hierarchy") String hierarchy, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + /** + * 上传本地文件到Forge + * + * @param fileIdentifiers 文件标识列表,逗号分隔 + * @return Forge文件标识列表 + */ + @PostMapping(value = "/common/uploadFileToForge/{fileIdentifiers}") + R> uploadFileToForge(@PathVariable("fileIdentifiers") String fileIdentifiers, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java index 915390c94..ea330cd94 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java @@ -70,6 +70,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory packagedFile(HashMap packagedStructure, String zipFileName, String type, String hierarchy, String source) { return R.fail("打包文件失败:" + throwable.getMessage()); } + + @Override + public R> uploadFileToForge(String fileIdentifiers, String source) { + return R.fail("上传本地文件到Forge失败:" + throwable.getMessage()); + } }; } } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java index a066b679e..e248747bd 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java @@ -210,4 +210,17 @@ public class CommonController extends BaseController { sysFileInfo.setFilePath(""); return R.ok(sysFileInfo); } + + /** + * 上传本地文件到Forge + * + * @param fileIdentifiers 文件标识列表,逗号分隔 + * @return Forge文件标识列表 + */ + @InnerAuth + @PostMapping(value = "/uploadFileToForge/{fileIdentifiers}") + @ApiOperation(value = "上传本地文件到Forge", hidden = true) + R> uploadFileToForge(@PathVariable("fileIdentifiers") String fileIdentifiers) { + return R.ok(sysFileInfoService.uploadFileToForge(fileIdentifiers)); + } } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java index b5314ddb4..e9dac72bd 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java @@ -171,4 +171,6 @@ public interface ISysFileInfoService { * @return 压缩包文件标识 */ String packagedFile(HashMap packagedStructure, String zipFileName, String type, String hierarchy); + + List uploadFileToForge(String fileIdentifiers); } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index 8913d17c4..25404a085 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -496,6 +496,30 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { return fileIdentifier; } + @Override + public List uploadFileToForge(String fileIdentifiers) { + List fileInfoList = getFileListByIdentifier(fileIdentifiers); + try { + List forgeFileIdentifierList = new ArrayList<>(); + for (SysFileInfo fileInfo : fileInfoList) { + String filePath = localFilePath + fileInfo.getFilePath(); + File file = new File(filePath); + if (!file.exists()) { + throw new ServiceException("该文件不存在"); + } + // 拷贝文件到打包目录 + FileInputStream fileInputStream = new FileInputStream(file); + MultipartFile multipartFile = FileUtils.createMultipartFile(fileInputStream, fileInfo.getFileOriginName()); + SysFileInfo sysFileInfo = upload(multipartFile, "pms-gitlink", null); + forgeFileIdentifierList.add(sysFileInfo.getFileIdentifier()); + } + return forgeFileIdentifierList; + } catch (IOException e) { + logger.error("上传本地文件到Forge失败{}", e.getMessage()); + throw new ServiceException("上传本地文件到Forge失败"); + } + } + private void fileDownload(SysFileInfo sysFileInfo, HttpServletResponse response) { try { String fileName = sysFileInfo.getFileOriginName(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index fb7ebb2da..6dc2addde 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -82,7 +82,7 @@ public class ProductReqSpecsController extends BaseController { */ @RequiresPermissions("pms:pmsProductRequirement:edit") @Log(title = "需求规格", businessType = BusinessType.UPDATE) - @PutMapping + @PutMapping("/change") @ApiOperation(value = "变更需求规格") public AjaxResult change(@RequestBody @Validated ProductReqSpecsChangeVo productReqSpecsChangeVo) { return toAjax(pmsProductRequirementService.changeReqSpecs(productReqSpecsChangeVo)); @@ -109,4 +109,15 @@ public class ProductReqSpecsController extends BaseController { public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { return toAjax(pmsProductRequirementService.reviewReqSpecs(productReqReviewVo)); } + + /** + * 需求规格纳入计划 + */ + @RequiresPermissions("pms:pmsProductRequirement:edit") + @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @PutMapping("/activePlan") + @ApiOperation(value = "需求规格纳入计划") + public AjaxResult activePlan(@RequestBody @Validated ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo) { + return toAjax(pmsProductRequirementService.activePlan(productReqSpecsActivePlanVo)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index f01a6f446..980646eb8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -11,6 +11,7 @@ import lombok.Getter; public enum ProductReqOperationType { CONTENT_MODIFY("contentModify", "内容修改"), REVIEW_USER_REQ("reviewUserReq", "用户需求评审"), + ACTIVE_PLAN("activePlan", "纳入计划"), REVIEW_REQ_SPECS("reviewUserReq", "需求规格评审"); private final String key; private final String name; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 1f647ad52..5e9a38830 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -16,7 +16,7 @@ import java.util.Date; * @date 2023-10-10 */ @Data -@ApiModel("用户需求评审对象") +@ApiModel("需求评审对象") public class ProductReqReviewVo { @ApiModelProperty(value = "需求Id", required = true) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java new file mode 100644 index 000000000..7584d51d3 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java @@ -0,0 +1,52 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import com.microservices.pms.project.domain.vo.PmsProjectIssuesInputVo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格纳入计划对象") +public class ProductReqSpecsActivePlanVo { + @ApiModelProperty(value = "需求Id", required = true) + @NotNull + private Long id; + + @ApiModelProperty(value = "项目Id", required = true) + @NotNull + private Long projectId; + + public PmsProjectIssuesInputVo toPmsProjectIssuesInputVo(PmsProductRequirement reqSpecs, List forgeFileIdentifierList) { + PmsProjectIssuesInputVo issue = new PmsProjectIssuesInputVo(); + issue.setSubject(reqSpecs.getTitle()); + issue.setPmProjectId(projectId); + issue.setStatusId(1); + issue.setPmIssueType(1); + issue.setPriorityId(2); + issue.setDescription(reqSpecs.getContent()); + issue.setAttachmentIds(forgeFileIdentifierList); + return issue; + } + + public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { + PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); + record.setProductRequirementId(pmsProductRequirement.getId()); + record.setType(ProductReqOperationType.ACTIVE_PLAN.getKey()); + record.setOperation("激活"); + record.setOperator(pmsProductRequirement.getCreateBy()); + record.setOperatingTime(pmsProductRequirement.getCreateTime()); + return record; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java index 87bddaabd..1b787a672 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -47,11 +47,13 @@ public class ProductReqSpecsChangeVo { } public boolean isReqChange(PmsProductRequirement oldPmsProductRequirement) { - if (StringUtils.isNotEmpty(this.getContent()) || StringUtils.isNotEmpty(this.getFileIdentifiers()) || StringUtils.isNotEmpty(this.getTitle())) { - return !oldPmsProductRequirement.getTitle().equals(this.title) - || !oldPmsProductRequirement.getContent().equals(this.content) - || !oldPmsProductRequirement.getFileIdentifiers().equals(this.fileIdentifiers); + + if (StringUtils.isNotEmpty(this.getContent()) && !this.content.equals(oldPmsProductRequirement.getContent())) { + return true; } - return false; + if (StringUtils.isNotEmpty(this.getTitle()) && !this.title.equals(oldPmsProductRequirement.getTitle())) { + return true; + } + return StringUtils.isNotEmpty(this.getFileIdentifiers()) && !this.getFileIdentifiers().equals(oldPmsProductRequirement.getFileIdentifiers()); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 133706349..0d2709c18 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -162,4 +162,6 @@ public interface IPmsProductRequirementService int reviewReqSpecs(ProductReqReviewVo productReqReviewVo); int changeReqSpecs(ProductReqSpecsChangeVo productReqSpecsChangeVo); + + int activePlan(ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index dedbae217..9f46fc33a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.NotFoundException; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.*; @@ -16,11 +17,14 @@ import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.mapper.PmsProductRequirementMapper; import com.microservices.pms.product.service.*; import com.microservices.pms.project.domain.PmsProject; +import com.microservices.pms.project.domain.vo.PmsProjectIssuesInputVo; import com.microservices.pms.project.service.IPmsProjectService; import com.microservices.pms.project.service.PmsProjectIssuesService; import com.microservices.pms.utils.PmsConstants; import com.microservices.pms.utils.PmsUtils; +import com.microservices.system.api.RemoteFileService; import com.microservices.system.api.domain.SysUser; +import com.microservices.system.api.utils.FeignUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -65,6 +69,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Autowired @Lazy private IPmsJournalsService pmsJournalsService; + @Autowired + private RemoteFileService remoteFileService; /** * 查询产品需求 @@ -560,6 +566,34 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return success; } + @Override + public int activePlan(ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo) { + // 通过id检查需修改的产品需求是否存在 + PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqSpecsActivePlanVo.getId(), true); + if (!ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { + throw new ServiceException("仅已评审状态的需求规格才能纳入计划"); + } + PmsProject project = pmsProjectService.selectAndCheckPmsProjectById(productReqSpecsActivePlanVo.getProjectId()); + List forgeFileIdentifierList = null; + if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { + // 需求规格文件上传至forge + forgeFileIdentifierList = FeignUtils.getReturnData( + remoteFileService.uploadFileToForge(reqSpecs.getFileIdentifiers(), SecurityConstants.INNER) + ); + } + PmsProjectIssuesInputVo pmsProjectIssuesInputVo = productReqSpecsActivePlanVo.toPmsProjectIssuesInputVo(reqSpecs, forgeFileIdentifierList); + + JSONObject projectIssue = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); + reqSpecs.setPmsProjectId(project.getId()); + reqSpecs.setProjectReqId(projectIssue.getLong("id")); + reqSpecs.setStatus(ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey()); + int success = updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productReqSpecsActivePlanVo.toPmsProductReqOperationRecord(reqSpecs) + ); + return success; + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 749d270f4..aa5b76378 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -271,7 +271,7 @@ requirement_assignee_gitlink_ids = #{requirementAssigneeGitlinkIds}, pms_project_id = #{pmsProjectId}, from_id = #{fromId}, - project_req_id = #{project_req_id}, + project_req_id = #{projectReqId}, type = #{type}, identifier = #{identifier}, source_user = #{sourceUser}, From 05a7dab7bd08cfe3a1572668cee87517bece8084 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 3 Dec 2024 11:09:22 +0800 Subject: [PATCH 034/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除无效废弃方法 Signed-off-by: OTTO <731554297@qq.com> --- .../PmsProductRequirementController.java | 145 ------------------ .../IPmsProductRequirementService.java | 48 ------ .../PmsProductRequirementServiceImpl.java | 102 +----------- 3 files changed, 4 insertions(+), 291 deletions(-) delete mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductRequirementController.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductRequirementController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductRequirementController.java deleted file mode 100644 index cd1645db9..000000000 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/PmsProductRequirementController.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.microservices.pms.product.controller; - -import com.alibaba.fastjson2.JSONObject; -import com.microservices.common.core.web.controller.BaseController; -import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.common.core.web.domain.GenericsAjaxResult; -import com.microservices.common.core.web.page.GenericsTableDataInfo; -import com.microservices.common.log.annotation.Log; -import com.microservices.common.log.enums.BusinessType; -import com.microservices.common.security.annotation.Logical; -import com.microservices.common.security.annotation.RequiresPermissions; -import com.microservices.pms.product.domain.PmsProductRequirement; -import com.microservices.pms.product.domain.vo.*; -import com.microservices.pms.product.service.IPmsProductModuleService; -import com.microservices.pms.product.service.IPmsProductRequirementService; -import io.swagger.annotations.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 产品需求Controller - * - * @author otto - * @date 2023-10-10 - */ -@RestController -@Api(tags = "项目管理-产品需求相关接口") -@RequestMapping("/{enterpriseIdentifier}/pmsProductRequirement") -@ApiImplicitParams({ - @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") -}) -public class PmsProductRequirementController extends BaseController -{ - @Autowired - private IPmsProductRequirementService pmsProductRequirementService; - @Autowired - private IPmsProductModuleService pmsProductModuleService; - - /** - * 查询产品需求列表 - */ - @RequiresPermissions("pms:pmsProduct:show") - @GetMapping("/list") - @ApiOperation(value = "查询产品需求列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "pageNum", value = "当前记录起始索引", paramType = "query", dataType = "Integer"), - @ApiImplicitParam(name = "pageSize", value = "每页显示记录数", paramType = "query", dataType = "Integer"), - @ApiImplicitParam(name = "orderByColumn", value = "排序列(更新时间:updateTime,创建时间:createTime,优先级:priorityId,开始时间:startTime,结束时间:endTime)", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "isAsc", value = "排序的方向desc或者asc,默认asc", paramType = "query", dataType = "String") - }) - public GenericsTableDataInfo list(@Validated PmsProductRequirementSearchVo pmsProductRequirementSearchVo) - { - PmsProductRequirement pmsProductRequirementSearch=pmsProductRequirementSearchVo.toPmsProductRequirement(); - - if (pmsProductRequirementSearch.getPmsProductModuleId() != null && pmsProductRequirementSearch.getPmsProductModuleId() != 0) { - List moduleIdList=pmsProductModuleService.selectChildrenPmsProductModuleIdList(pmsProductRequirementSearch.getPmsProductModuleId()); - pmsProductRequirementSearch.setChildrenModuleIdList(moduleIdList); - } - return pmsProductRequirementService.selectPmsProductRequirementPageList(pmsProductRequirementSearch); - } - - /** - * 获取产品需求详细信息 - */ - @RequiresPermissions("pms:pmsProduct:show") - @GetMapping(value = "/{id}") - @ApiOperation(value = "获取产品需求详细信息") - public GenericsAjaxResult getInfo(@PathVariable("id") Long id) - { - return genericsSuccess(pmsProductRequirementService.selectPmsProductRequirementDetailById(id)); - } - - /** - * 根据产品标识和需求索引获取产品需求详细信息 - */ - @RequiresPermissions("pms:pmsProduct:show") - @GetMapping(value = "/ProductIdentifier/{productIdentifier}/index/{index}") - @ApiOperation(value = "根据产品标识和需求索引获取产品需求详细信息") - public GenericsAjaxResult getInfo(@PathVariable("productIdentifier") String productIdentifier, @PathVariable("index") Long index) - { - return genericsSuccess(pmsProductRequirementService.selectPmsProductRequirementDetailByProductIdentifierAndIndex(productIdentifier, index)); - } - - /** - * 新增产品需求 - */ - @RequiresPermissions("pms:pmsProductRequirement:add") - @Log(title = "产品需求", businessType = BusinessType.INSERT) - @PostMapping - @ApiOperation(value = "新增产品需求") - public AjaxResult add(@RequestBody @Validated PmsProductRequirementInputVo pmsProductRequirementInputVo) - { - return success(pmsProductRequirementService.insertPmsProductRequirement(pmsProductRequirementInputVo.toPmsProductRequirement())); - } - - /** - * 修改产品需求 - */ - @RequiresPermissions(value = {"pms:pmsProductRequirement:edit", "pms:pmsProductPlan:edit"}, logical = Logical.OR) - @Log(title = "产品需求", businessType = BusinessType.UPDATE) - @PutMapping - @ApiOperation(value = "修改产品需求") - public AjaxResult edit(@RequestBody @Validated PmsProductRequirementUpdateVo pmsProductRequirementUpdateVo) - { - return toAjax(pmsProductRequirementService.updatePmsProductRequirement(pmsProductRequirementUpdateVo.toPmsProductRequirement())); - } - - /** - * 批量修改产品需求 - */ - @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "产品需求", businessType = BusinessType.UPDATE) - @PutMapping("/batch") - @ApiOperation(value = "批量修改产品需求") - public AjaxResult batchEdit( - @ApiParam(name = "pmsProductRequirementBatchUpdateVo", - value = "【字段说明】(非必填字段不传递则代表不更新,传null则代表置空):\n" + - "idList:需求Id列表(必填),示例:[1,2,3];\n" + - "priorityId:关联优先级ID;\n" + - "statusId:关联状态ID;\n" + - "pmsProductModuleId:关联产品模块ID;\n" + - "pmsProductPlanId:关联产品计划ID;\n" + - "tags:标记Id列表,使用逗号分割的字符串;\n" + - "requirementAssigneeGitlinkIds:需求负责人Gitlink ID列表(逗号分隔);\n" + - "pmsProjectId:关联项目ID\n") - @RequestBody JSONObject pmsProductRequirementBatchUpdateVo) - { - return toAjax(pmsProductRequirementService.batchUpdatePmsProductRequirement(pmsProductRequirementBatchUpdateVo)); - } - - /** - * 删除产品需求 - */ - @RequiresPermissions("pms:pmsProductRequirement:remove") - @Log(title = "产品需求", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - @ApiOperation(value = "删除产品需求") - public AjaxResult remove(@PathVariable Long[] ids) - { - return toAjax(pmsProductRequirementService.deletePmsProductRequirementByIds(ids)); - } -} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 0d2709c18..24e74ace6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -1,6 +1,5 @@ package com.microservices.pms.product.service; -import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.*; @@ -15,13 +14,6 @@ import java.util.List; */ public interface IPmsProductRequirementService { - /** - * 查询产品需求详情 - * - * @param id 产品需求主键 - * @return 产品需求详情 - */ - public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id); /** * 查询产品需求 * @@ -31,22 +23,6 @@ public interface IPmsProductRequirementService */ public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole); - /** - * 查询产品需求列表 - * - * @param pmsProductRequirement 产品需求 - * @return 产品需求集合 - */ - public GenericsTableDataInfo selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirement); - - /** - * 新增产品需求 - * - * @param pmsProductRequirement 产品需求 - * @return 结果 - */ - public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement); - /** * 修改产品需求 * @@ -63,14 +39,6 @@ public interface IPmsProductRequirementService */ public int updatePmsProductRequirementChange(Long id); - /** - * 批量删除产品需求 - * - * @param ids 需要删除的产品需求主键集合 - * @return 结果 - */ - public int deletePmsProductRequirementByIds(Long[] ids); - /** * 删除产品需求信息 * @@ -86,22 +54,6 @@ public interface IPmsProductRequirementService */ Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirement); - /** - * 根据产品标识和需求索引获取产品需求详细信息 - * @param productIdentifier 产品标识 - * @param index 索引 - * @return 产品需求详情 - */ - PmsProductRequirementDetailVo selectPmsProductRequirementDetailByProductIdentifierAndIndex(String productIdentifier, Long index); - - /** - * 批量更新需求 - * - * @param jsonObject 批量更新对象 - * @return 更新条数 - */ - int batchUpdatePmsProductRequirement(JSONObject jsonObject); - /** * 删除产品下所有需求 * diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 9f46fc33a..5f30e456a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -4,7 +4,10 @@ import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.NotFoundException; import com.microservices.common.core.exception.ServiceException; -import com.microservices.common.core.utils.*; +import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.utils.PinYinStringUtils; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; @@ -30,7 +33,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; import java.util.HashMap; import java.util.List; @@ -72,18 +74,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Autowired private RemoteFileService remoteFileService; - /** - * 查询产品需求 - * - * @param id 产品需求主键 - * @return 产品需求 - */ - @Override - public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id) { - PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); - return toPmsProductRequirementDetailVo(pmsProductRequirement); - } - private PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(PmsProductRequirement pmsProductRequirement) { PmsProductRequirementDataVo pmsProductRequirementDataVo = toPmsProductRequirementDataVo(pmsProductRequirement, null); PmsProductRequirementDetailVo pmsProductRequirementDetailVo = pmsProductRequirementDataVo.toPmsProductRequirementDetailVo(); @@ -632,58 +622,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return productUserReqDetailVo; } - /** - * 查询产品需求列表 - * - * @param pmsProductRequirementSearch 产品需求 - * @return 产品需求 - */ - @Override - public GenericsTableDataInfo selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirementSearch) { - pmsProductService.selectPmsProductByIdentifier(pmsProductRequirementSearch.getPmsProductIdentifier()); - startPage(); - List pmsProductRequirementList = pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch); - HashMap selectCache = new HashMap<>(); - return PageUtils.toPage(pmsProductRequirementList, x -> toPmsProductRequirementDataVo(x, selectCache)); - } - - /** - * 新增产品需求 - * - * @param pmsProductRequirement 产品需求 - * @return 结果 - */ - @Override - public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement) { - // 校验产品是否存在 - PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductRequirement.getPmsProductIdentifier()); - pmsProductService.checkManageRole(pmsProduct); - // 设置需求优先级,若未传入则设置为默认优先级 - Long priorityId = - pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE); - pmsProductRequirement.setPriorityId(priorityId); - // 设置默认需求状态 - // TODO:需要根据用户需求、需求规格来判断需求状态 - // pmsProductRequirement.setStatusId(statusId); - checkPmsProductRequirement(pmsProductRequirement, pmsProduct, null); - - Date now = DateUtils.getNowDate(); - String username = SecurityUtils.getUsername(); - pmsProductRequirement.setCreateBy(username); - pmsProductRequirement.setCreateTime(now); - pmsProductRequirement.setUpdateBy(username); - pmsProductRequirement.setUpdateTime(now); - // 获取当前产品下需求的最大索引值 - Long maxIndex = pmsProductRequirementMapper.selectPmsProductRequirementMaxIndexByProductIdentifier(pmsProductRequirement.getPmsProductIdentifier()); - if (maxIndex == null) { - maxIndex = 1L; - } - pmsProductRequirement.setIndex(++maxIndex); - pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); - pmsProductRequirementMapper.insertPmsProductRequirement(pmsProductRequirement); - return pmsProductRequirement.getId(); - } - private void checkPmsProductRequirement(PmsProductRequirement pmsProductRequirement, PmsProduct pmsProduct, PmsProductRequirement oldPmsProductRequirement) { if (StringUtils.isNotBlank(pmsProductRequirement.getRequirementAssigneeGitlinkIds())) { String[] gitlinkUserIdStrList = pmsProductRequirement.getRequirementAssigneeGitlinkIds().split(","); @@ -783,22 +721,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement); } - /** - * 批量删除产品需求 - * - * @param ids 需要删除的产品需求主键 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deletePmsProductRequirementByIds(Long[] ids) { - int success = 0; - for (Long id : ids) { - success += deletePmsProductRequirementById(id); - } - return success; - } - /** * 删除产品需求信息 * @@ -822,22 +744,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return pmsProductRequirementMapper.selectPmsProductRequirementCount(pmsProductRequirementSearch); } - @Override - public PmsProductRequirementDetailVo selectPmsProductRequirementDetailByProductIdentifierAndIndex(String productIdentifier, Long index) { - PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectPmsProductRequirementByProductIdentifierAndIndex(productIdentifier, index); - if (pmsProductRequirement == null) { - throw new ServiceException("该产品需求不存在(产品标识[%s],产品需求索引[%d])", productIdentifier, index); - } - return toPmsProductRequirementDetailVo(pmsProductRequirement); - } - - @Override - public int batchUpdatePmsProductRequirement(JSONObject jsonObject) { - List idList = JSONUtils.getLongListByJsonArray(jsonObject.getJSONArray("idList")); - checkBatchUpdateInTheSameProduct(idList); - return batchUpdatePmsProductRequirementByJsonObject(idList, jsonObject); - } - /** * 检查批量更新的产品需求是否属于同一个产品 * From bccc9b8e1244efeef1ed515f88aff0d07b40239e Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 3 Dec 2024 14:44:04 +0800 Subject: [PATCH 035/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 增加用户需求和操作记录的关联查询操作,查询需求最新的评审情况 2. 查询用户需求列表时返回评审人、评审时间和评审意见 3. 修正部分评审记录异常的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/PmsProductRequirement.java | 7 +++ .../domain/enums/ProductReqOperationType.java | 2 +- .../product/domain/vo/ProductReqReviewVo.java | 24 +++++++---- .../domain/vo/ProductUserReqDataVo.java | 10 +++++ .../PmsProductRequirementServiceImpl.java | 26 +++++++---- .../pms/PmsProductRequirementMapper.xml | 43 ++++++++++++++++++- 6 files changed, 92 insertions(+), 20 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index b6d812017..864708cfc 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -151,6 +151,13 @@ public class PmsProductRequirement extends BaseEntity @ApiModelProperty(value = "需求标识") private String identifier; + @ApiModelProperty(value = "评审时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reviewTime; + + @ApiModelProperty(value = "评审内容") + private String reviewContent; + public PmsProductRequirementDataVo toPmsProductRequirementDataVo(){ PmsProductRequirementDataVo target = new PmsProductRequirementDataVo(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index 980646eb8..1ea045364 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -12,7 +12,7 @@ public enum ProductReqOperationType { CONTENT_MODIFY("contentModify", "内容修改"), REVIEW_USER_REQ("reviewUserReq", "用户需求评审"), ACTIVE_PLAN("activePlan", "纳入计划"), - REVIEW_REQ_SPECS("reviewUserReq", "需求规格评审"); + REVIEW_REQ_SPECS("reviewReqSpecs", "需求规格评审"); private final String key; private final String name; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 5e9a38830..860d4477f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -1,5 +1,6 @@ package com.microservices.pms.product.domain.vo; +import com.alibaba.fastjson2.JSONObject; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.domain.enums.ProductReqOperationType; import io.swagger.annotations.ApiModel; @@ -31,29 +32,36 @@ public class ProductReqReviewVo { @NotNull private Date reviewTime; + @ApiModelProperty(value = "评审人", required = true) + @NotNull + private String reviewUser; + @ApiModelProperty(value = "评审意见", required = true) @NotNull private String reviewContent; public PmsProductReqOperationRecord toUserReqRecord(String operator) { - PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); - record.setProductRequirementId(id); + PmsProductReqOperationRecord record = toRecord(operator); record.setType(ProductReqOperationType.REVIEW_USER_REQ.getKey()); - record.setOperation(reviewStatus); - record.setOperator(operator); - record.setOperatingTime(reviewTime); - record.setContent(reviewContent); return record; } public PmsProductReqOperationRecord toReqSpecsRecord(String operator) { + PmsProductReqOperationRecord record = toRecord(operator); + record.setType(ProductReqOperationType.REVIEW_REQ_SPECS.getKey()); + return record; + } + + private PmsProductReqOperationRecord toRecord(String operator) { PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); record.setProductRequirementId(id); - record.setType(ProductReqOperationType.REVIEW_REQ_SPECS.getKey()); record.setOperation(reviewStatus); record.setOperator(operator); record.setOperatingTime(reviewTime); - record.setContent(reviewContent); + JSONObject contentJson = new JSONObject(); + contentJson.put("reviewUser", reviewUser); + contentJson.put("reviewContent", reviewContent); + record.setContent(contentJson.toJSONString()); return record; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index c18c73c26..51e6be62a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -40,6 +40,16 @@ public class ProductUserReqDataVo { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; + @ApiModelProperty(value = "评审时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reviewTime; + + @ApiModelProperty(value = "评审人") + private String reviewUser; + + @ApiModelProperty(value = "评审意见") + private String reviewContent; + public ProductUserReqDetailVo toProductReqUserDetailVo() { ProductUserReqDetailVo target = new ProductUserReqDetailVo(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 5f30e456a..dc38b0301 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -1,5 +1,6 @@ package com.microservices.pms.product.service.impl; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.NotFoundException; @@ -177,7 +178,12 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo(); // 设置状态 productUserReqDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus())); - + if (StringUtils.isNotEmpty(pmsProductRequirement.getReviewContent()) + && JSON.isValid(pmsProductRequirement.getReviewContent())) { + JSONObject reviewContentJson = JSONObject.parseObject(pmsProductRequirement.getReviewContent()); + productUserReqDataVo.setReviewUser(reviewContentJson.getString("reviewUser")); + productUserReqDataVo.setReviewContent(reviewContentJson.getString("reviewContent")); + } return productUserReqDataVo; } @@ -354,18 +360,18 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) { throw new ServiceException("只有待审核状态的用户需求才能进行审核"); } - PmsProductReqOperationRecord pmsProductReqOperationRecord - = productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername()); + if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REVIEWED_USER_REQ.getKey()); - userReqToReqSpecs(userReq, pmsProductReqOperationRecord); + userReqToReqSpecs(userReq, productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername())); } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productReqReviewVo.getReviewStatus())) { userReq.setStatus(ProductReqStatus.REJECTED_USER_REQ.getKey()); } else { throw new ServiceException("请选择正确的审核状态"); } // 记录评审意见 - pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( + productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername())); return updateRequirement(userReq, userReq.getPmsProductIdentifier()); } @@ -378,8 +384,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { throw new ServiceException("只有待审核和变更中状态的需求规格才能进行审核"); } - PmsProductReqOperationRecord pmsProductReqOperationRecord - = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername()); if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true); @@ -403,8 +407,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsJournalsService.updateJournalsIdByTypeAndOldId( PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, reqSpecs.getId(), fromReqSpecs.getId()); // 原需规记录评审意见 - pmsProductReqOperationRecord.setId(fromReqSpecs.getId()); - pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); + PmsProductReqOperationRecord oldReqSpecsRecord + = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername()); + oldReqSpecsRecord.setId(fromReqSpecs.getId()); + pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(oldReqSpecsRecord); } else { reqSpecs.setStatus(ProductReqStatus.REJECTED_REQ_SPECS.getKey()); } @@ -412,6 +418,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS throw new ServiceException("请选择正确的审核状态"); } // 记录评审意见 + PmsProductReqOperationRecord pmsProductReqOperationRecord + = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername()); pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord); return updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier()); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index aa5b76378..8810e4679 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -38,7 +38,7 @@ select id, title, `index`, - status, + `status`, priority_id, pms_product_module_id, pms_product_plan_id, @@ -65,6 +65,45 @@ from pms_product_requirement + + + select ppr.id, + ppr.title, + ppr.`index`, + ppr.`status`, + ppr.priority_id, + ppr.pms_product_module_id, + ppr.pms_product_plan_id, + ppr.pms_product_identifier, + ppr.content, + ppr.tag_ids, + ppr.start_time, + ppr.end_time, + ppr.file_identifiers, + ppr.sort, + ppr.update_time, + ppr.update_by, + ppr.create_time, + ppr.create_by, + ppr.del_flag, + ppr.requirement_assignee_gitlink_ids, + ppr.pms_project_id, + ppr.from_id, + ppr.project_req_id, + ppr.type, + ppr.source_user, + ppr.source_company, + ppr.identifier, + record.reviewTime, + record.content as reviewContent + from pms_product_requirement as ppr + left join (select product_requirement_id, MAX(operating_time) as reviewTime, content + from pms_product_req_operation_record + where type = 'reviewUserReq' + group by product_requirement_id, content) as record + on record.product_requirement_id = ppr.id + + + From f3b2b8cc0129eeae39a058535d65b69302257228 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 4 Dec 2024 09:34:10 +0800 Subject: [PATCH 037/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求跟踪相关接口: 1. 查询用户需求变更记录 - 根据用户需求id查询用户需求变更记录列表 - 根据产品需求操作类型生成记录描述 2. 查询需求规格变更记录: - 根据需求规格id和fromId查询需求规格相关的所有需求规格相关的变更记录列表 - 根据产品需求操作类型生成记录描述 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductReqTrackingController.java | 56 ++++++++++++++++++ .../enums/ProductContentModifyOperation.java | 11 +++- .../domain/enums/ProductReqOperationType.java | 48 +++++++++++++++- .../domain/enums/ProductReqReviewStatus.java | 9 +++ .../domain/enums/ProductReqStatus.java | 6 ++ .../vo/ProductReqOperationRecordDataVo.java | 21 +++++++ .../vo/ProductReqSpecsActivePlanVo.java | 4 +- .../IPmsProductReqOperationRecordService.java | 5 ++ ...sProductReqOperationRecordServiceImpl.java | 57 +++++++++++++++++++ .../PmsProductRequirementServiceImpl.java | 4 +- .../PmsProductReqOperationRecordMapper.xml | 1 + 11 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqOperationRecordDataVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java new file mode 100644 index 000000000..47cef7119 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java @@ -0,0 +1,56 @@ +package com.microservices.pms.product.controller; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.security.annotation.RequiresPermissions; +import com.microservices.pms.product.domain.vo.ProductReqOperationRecordDataVo; +import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 产品需求规格相关接口 + * + * @author otto + * @date 2023-10-10 + */ +@RestController +@Api(tags = "项目管理-需求跟踪相关接口") +@RequestMapping("/{enterpriseIdentifier}/productRequirementTracking") +@ApiImplicitParams({ + @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") +}) +public class ProductReqTrackingController extends BaseController { + @Autowired + private IPmsProductReqOperationRecordService pmsProductReqOperationRecordService; + + /** + * 查询用户需求变更记录 + */ + @ApiOperation(value = "查询用户需求变更记录") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/{userReqId}/userReqChangeRecord") + public List getUserReqChangeRecordList( + @PathVariable("userReqId") Long userReqId) { + return pmsProductReqOperationRecordService.selectUserReqChangeRecordList(userReqId); + } + + /** + * 查询用户需求变更记录 + */ + @ApiOperation(value = "查询需求规格变更记录") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/{reqSpecsId}/reqSpecsChangeRecord") + public List getReqSpecsChangeRecordList( + @PathVariable("reqSpecsId") Long reqSpecsId) { + return pmsProductReqOperationRecordService.selectReqSpecsChangeRecordList(reqSpecsId); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java index 133a2eaf0..3347c7f43 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductContentModifyOperation.java @@ -9,7 +9,7 @@ import lombok.Getter; */ @Getter public enum ProductContentModifyOperation { - CHANGING_REQ("changingReq", "需求变更"), + CHANGING_REQ("changingReq", "进行需求变更"), CANCEL_CHANGE_REQ("cancelChangeReq", "取消需求变更"), CREATE("create", "创建"), EDIT("edit", "编辑"); @@ -20,4 +20,13 @@ public enum ProductContentModifyOperation { this.key = key; this.name = name; } + + public static String getNameByKey(String key) { + for (ProductContentModifyOperation operation : ProductContentModifyOperation.values()) { + if (operation.getKey().equals(key)) { + return operation.getName(); + } + } + return null; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index 1ea045364..5599ec9b0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -1,9 +1,14 @@ package com.microservices.pms.product.domain.enums; +import com.microservices.common.core.exception.ServiceException; +import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.system.api.domain.SimpleSysUser; import lombok.Getter; +import java.text.SimpleDateFormat; + /** - * 产品需求状态 + * 产品需求操作类型 * * @author OTTO */ @@ -20,4 +25,45 @@ public enum ProductReqOperationType { this.key = key; this.name = name; } + + public static String genRecordStr(SimpleSysUser operator, PmsProductReqOperationRecord record) { + ProductReqOperationType type = getByKey(record.getType()); + if (type == null) { + throw new ServiceException("需求操作记录类型错误"); + } + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String operationTimeStr = formatter.format(record.getOperatingTime()); + switch (type) { + case CONTENT_MODIFY: + return String.format("%s,由【%s】%s", + operationTimeStr, + operator.getNickName(), + ProductContentModifyOperation.getNameByKey(record.getOperation())); + case REVIEW_USER_REQ: + return String.format("%s,由【%s】进行了用户需求评审,评审结果为【%s】", + operationTimeStr, + operator.getNickName(), + ProductReqReviewStatus.getNameByKey(record.getOperation())); + case ACTIVE_PLAN: + return String.format("%s,由【%s】将需求纳入了计划", + operationTimeStr, + operator.getNickName()); + case REVIEW_REQ_SPECS: + return String.format("%s,由【%s】进行了需求规格评审,评审结果为【%s】", + operationTimeStr, + operator.getNickName(), + ProductReqReviewStatus.getNameByKey(record.getOperation())); + default: + throw new ServiceException("需求操作记录类型错误"); + } + } + + public static ProductReqOperationType getByKey(String key) { + for (ProductReqOperationType type : ProductReqOperationType.values()) { + if (type.getKey().equals(key)) { + return type; + } + } + return null; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java index 906d700d8..dd125eb72 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java @@ -18,4 +18,13 @@ public enum ProductReqReviewStatus { this.key = key; this.name = name; } + + public static String getNameByKey(String operation) { + for (ProductReqReviewStatus status : values()) { + if (status.getKey().equals(operation)) { + return status.getName(); + } + } + return null; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 73848c350..6fd39a966 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -74,4 +74,10 @@ public enum ProductReqStatus { throw new ServiceException("获取需求规格的更新状态失败"); } } + + public static boolean isUserReqStatus(String key) { + return PENDING_REVIEW_USER_REQ.getKey().equals(key) + || REJECTED_USER_REQ.getKey().equals(key) + || REVIEWED_USER_REQ.getKey().equals(key); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqOperationRecordDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqOperationRecordDataVo.java new file mode 100644 index 000000000..dde1bde58 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqOperationRecordDataVo.java @@ -0,0 +1,21 @@ +package com.microservices.pms.product.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求变更记录数据对象") +public class ProductReqOperationRecordDataVo { + @ApiModelProperty(value = "操作记录") + private String record; + + @ApiModelProperty(value = "操作内容(内容为JSON字符串)") + private String content; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java index 7584d51d3..255fe82d2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java @@ -45,8 +45,8 @@ public class ProductReqSpecsActivePlanVo { record.setProductRequirementId(pmsProductRequirement.getId()); record.setType(ProductReqOperationType.ACTIVE_PLAN.getKey()); record.setOperation("激活"); - record.setOperator(pmsProductRequirement.getCreateBy()); - record.setOperatingTime(pmsProductRequirement.getCreateTime()); + record.setOperator(pmsProductRequirement.getUpdateBy()); + record.setOperatingTime(pmsProductRequirement.getUpdateTime()); return record; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java index f091ee6ac..8a236ce49 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.service; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.vo.ProductReqOperationRecordDataVo; import java.util.List; @@ -66,4 +67,8 @@ public interface IPmsProductReqOperationRecordService { * @return 最近一次评审记录 */ PmsProductReqOperationRecord selectUserReqLatestReviewRecord(Long reqId); + + List selectUserReqChangeRecordList(Long userReqId); + + List selectReqSpecsChangeRecordList(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 2d50fe676..53a6d3f30 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -1,13 +1,23 @@ package com.microservices.pms.product.service.impl; +import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.security.utils.SecurityUtils; +import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductReqOperationType; +import com.microservices.pms.product.domain.enums.ProductReqStatus; +import com.microservices.pms.product.domain.vo.ProductReqOperationRecordDataVo; import com.microservices.pms.product.mapper.PmsProductReqOperationRecordMapper; import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; +import com.microservices.pms.product.service.IPmsProductRequirementService; +import com.microservices.system.api.domain.SimpleSysUser; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -20,6 +30,11 @@ import java.util.List; public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOperationRecordService { @Autowired private PmsProductReqOperationRecordMapper pmsProductReqOperationRecordMapper; + @Autowired + private IPmsCommonService commonService; + @Autowired + @Lazy + private IPmsProductRequirementService pmsProductRequirementService; /** * 查询项目管理-产品需求操作记录 @@ -95,4 +110,46 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp public PmsProductReqOperationRecord selectUserReqLatestReviewRecord(Long reqId) { return pmsProductReqOperationRecordMapper.selectUserReqLatestReviewRecord(reqId); } + + @Override + public List selectUserReqChangeRecordList(Long userReqId) { + PmsProductRequirement userReq = pmsProductRequirementService.selectPmsProductRequirementById(userReqId, false); + if (!ProductReqStatus.isUserReqStatus(userReq.getStatus())) { + throw new ServiceException("需求规格变更记录请使用查询需求规格变更记录接口"); + } + PmsProductReqOperationRecord recordSearch = new PmsProductReqOperationRecord(); + recordSearch.setProductRequirementId(userReqId); + List recordList = pmsProductReqOperationRecordMapper.selectPmsProductReqOperationRecordList(recordSearch); + return getRecordDataList(recordList); + } + + @Override + public List selectReqSpecsChangeRecordList(Long reqSpecsId) { + PmsProductRequirement reqSpecs = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecsId, false); + if (ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { + throw new ServiceException("用户需求变更记录请使用查询用户需求变更记录接口"); + } + // 根据需求规格id和fromId查询需求规格相关的所有需求规格相关的变更记录列表 + PmsProductReqOperationRecord recordSearch = new PmsProductReqOperationRecord(); + List recordList = new ArrayList<>(); + while (reqSpecs.getFromId() != null && !ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { + recordSearch.setProductRequirementId(reqSpecs.getId()); + recordList.addAll(pmsProductReqOperationRecordMapper.selectPmsProductReqOperationRecordList(recordSearch)); + reqSpecs = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecs.getFromId(), false); + } + + return getRecordDataList(recordList); + } + + private List getRecordDataList(List recordList) { + List recordDataList = new ArrayList<>(); + for (PmsProductReqOperationRecord record : recordList) { + ProductReqOperationRecordDataVo recordData = new ProductReqOperationRecordDataVo(); + recordData.setContent(record.getContent()); + SimpleSysUser simpleSysUser = commonService.getSimpleSysUserByUsername(record.getOperator()); + recordData.setRecord(ProductReqOperationType.genRecordStr(simpleSysUser, record)); + recordDataList.add(recordData); + } + return recordDataList; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index ab4a32074..c9eb1f239 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -253,13 +253,13 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && - ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { throw new ServiceException("只有待审核和变更中状态的需求规格才能被删除"); } if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { // 变更中需求规格被删除时需将原需求还原状态 PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(oldPmsProductRequirement.getFromId(), true); - fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(oldPmsProductRequirement.getStatus()).getKey()); + fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); updateRequirement(fromReqSpecs, oldPmsProductRequirement.getPmsProductIdentifier()); // 需求评论对象还原为原需求id pmsJournalsService.updateJournalsIdByTypeAndOldId( diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml index bb5f7e584..ef942f6c5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -57,6 +57,7 @@ and reserved_field_2 = #{reservedField2} and reserved_field_3 = #{reservedField3} and reserved_field_4 = #{reservedField4} + order by operating_time desc From 4c7ffcc5d6b352742b91228de3ebb511b725ba09 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 4 Dec 2024 13:48:26 +0800 Subject: [PATCH 038/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善需求评审接口: 评审通过时若原需求为计划中需同步更新计划详情 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/vo/ProductReqSpecsChangeVo.java | 4 ++-- .../impl/PmsProductRequirementServiceImpl.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java index 1b787a672..b008642a9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -48,12 +48,12 @@ public class ProductReqSpecsChangeVo { public boolean isReqChange(PmsProductRequirement oldPmsProductRequirement) { - if (StringUtils.isNotEmpty(this.getContent()) && !this.content.equals(oldPmsProductRequirement.getContent())) { + if (this.getContent() != null && !this.content.equals(oldPmsProductRequirement.getContent())) { return true; } if (StringUtils.isNotEmpty(this.getTitle()) && !this.title.equals(oldPmsProductRequirement.getTitle())) { return true; } - return StringUtils.isNotEmpty(this.getFileIdentifiers()) && !this.getFileIdentifiers().equals(oldPmsProductRequirement.getFileIdentifiers()); + return this.getFileIdentifiers() != null && !this.getFileIdentifiers().equals(oldPmsProductRequirement.getFileIdentifiers()); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index c9eb1f239..c742627a9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -313,6 +313,22 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true); + // 若原需求为计划中需同步更新计划详情 + if (ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey().equals(fromReqSpecs.getStatus())) { + List forgeFileIdentifierList = null; + if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { + // 需求规格文件上传至forge + forgeFileIdentifierList = FeignUtils.getReturnData( + remoteFileService.uploadFileToForge(reqSpecs.getFileIdentifiers(), SecurityConstants.INNER) + ); + } + PmsProjectIssuesInputVo issue = new PmsProjectIssuesInputVo(); + issue.setSubject(reqSpecs.getTitle()); + issue.setDescription(reqSpecs.getContent()); + issue.setAttachmentIds(forgeFileIdentifierList); + issue.setPmProjectId(fromReqSpecs.getPmsProjectId()); + pmsProjectIssuesService.updatePmsProjectIssues(fromReqSpecs.getProjectReqId(), issue); + } // 变更中的需求规格通过评审后设置状态为原需规状态 reqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); // 变更中的需规通过审核时需将原需求状态调整为已变更 From e2dfb6a5d7c73c3ce313f284dcf54b1e58aeff73 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 4 Dec 2024 16:03:48 +0800 Subject: [PATCH 039/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增用户需求和需求规格状态获取接口 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 12 ++++ .../controller/ProductUserReqController.java | 12 ++++ .../product/domain/enums/CommonEnumType.java | 20 ------- .../domain/enums/ProductReqStatus.java | 58 ++++++++++++++----- .../domain/vo/ProductReqSpecsDataVo.java | 3 +- .../domain/vo/ProductUserReqDataVo.java | 3 +- .../product/domain/vo/ReqStatusCommonVo.java | 20 +++++++ .../IPmsProductRequirementService.java | 4 ++ .../PmsProductRequirementServiceImpl.java | 10 ++++ 9 files changed, 102 insertions(+), 40 deletions(-) delete mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 6dc2addde..09d3e6de0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 产品需求规格相关接口 * @@ -120,4 +122,14 @@ public class ProductReqSpecsController extends BaseController { public AjaxResult activePlan(@RequestBody @Validated ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo) { return toAjax(pmsProductRequirementService.activePlan(productReqSpecsActivePlanVo)); } + + /** + * 查询需求规格状态列表 + */ + @ApiOperation(value = "查询需求规格状态列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/statusList") + public List statusList() { + return pmsProductRequirementService.selectReqSpecsStatusList(); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 193c17e26..33ee39609 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 产品用户需求相关接口 * @@ -98,4 +100,14 @@ public class ProductUserReqController extends BaseController { public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { return toAjax(pmsProductRequirementService.reviewUserReq(productReqReviewVo)); } + + /** + * 查询用户需求状态列表 + */ + @ApiOperation(value = "查询用户需求状态列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/statusList") + public List statusList() { + return pmsProductRequirementService.selectUserReqStatusList(); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java deleted file mode 100644 index 686687e13..000000000 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/CommonEnumType.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.microservices.pms.product.domain.enums; - -import lombok.Data; - -/** - * @author OTTO - */ -@Data -public class CommonEnumType { - private String key; - private String name; - - public CommonEnumType() { - } - - public CommonEnumType(String key, String name) { - this.key = key; - this.name = name; - } -} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index 6fd39a966..c4880dd2a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -1,8 +1,12 @@ package com.microservices.pms.product.domain.enums; import com.microservices.common.core.exception.ServiceException; +import com.microservices.pms.product.domain.vo.ReqStatusCommonVo; import lombok.Getter; +import java.util.ArrayList; +import java.util.List; + /** * 产品需求状态 * @@ -10,27 +14,29 @@ import lombok.Getter; */ @Getter public enum ProductReqStatus { - PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的用户需求"), - REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"), - REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"), - PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"), - CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求规格"), - CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求规格"), - REJECTED_CHANGE_REQ_SPECS("rejectedChangeReqSpecs", "已拒绝变更", "已拒绝变更的需求规格"), - REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)"), - PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求规格(变更中)"), - PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"), - REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"), - REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"), - COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求规格"); + PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的用户需求", "#FF6F00"), + REJECTED_USER_REQ("rejectedUserReq", "未通过", "已拒绝的用户需求", "#FF0000"), + REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求", "#13B33E"), + PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格", "#FF6F00"), + CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求规格", "#FF0000"), + CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求规格", null), + REJECTED_CHANGE_REQ_SPECS("rejectedChangeReqSpecs", "已拒绝变更", "已拒绝变更的需求规格", null), + REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)", null), + PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求规格(变更中)", null), + PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格", "#0D5EF8"), + REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格", "#B1AAA5"), + REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格", "#13B33E"), + COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求规格", "#13B33E"); private final String key; private final String name; private final String remark; + private final String color; - ProductReqStatus(String key, String name, String remark) { + ProductReqStatus(String key, String name, String remark, String color) { this.key = key; this.name = name; this.remark = remark; + this.color = color; } public static ProductReqStatus getByKey(String key) { @@ -42,10 +48,10 @@ public enum ProductReqStatus { throw new ServiceException("需求状态错误(需求状态[%s])", key); } - public static CommonEnumType getTypeByKey(String status) { + public static ReqStatusCommonVo getTypeByKey(String status) { for (ProductReqStatus productReqStatus : ProductReqStatus.values()) { if (productReqStatus.getKey().equals(status)) { - return new CommonEnumType(productReqStatus.getKey(), productReqStatus.getName()); + return new ReqStatusCommonVo(productReqStatus); } } return null; @@ -80,4 +86,24 @@ public enum ProductReqStatus { || REJECTED_USER_REQ.getKey().equals(key) || REVIEWED_USER_REQ.getKey().equals(key); } + + public static List getUserReqStatusList() { + List statusCommonVoList = new ArrayList<>(); + for (ProductReqStatus productReqStatus : ProductReqStatus.values()) { + if (isUserReqStatus(productReqStatus.getKey()) && productReqStatus.getColor() != null) { + statusCommonVoList.add(new ReqStatusCommonVo(productReqStatus)); + } + } + return statusCommonVoList; + } + + public static List getReqSpecsStatusList() { + List statusCommonVoList = new ArrayList<>(); + for (ProductReqStatus productReqStatus : ProductReqStatus.values()) { + if (!isUserReqStatus(productReqStatus.getKey()) && productReqStatus.getColor() != null) { + statusCommonVoList.add(new ReqStatusCommonVo(productReqStatus)); + } + } + return statusCommonVoList; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java index b97e1e222..d2945ca35 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java @@ -3,7 +3,6 @@ package com.microservices.pms.product.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProductModule; -import com.microservices.pms.product.domain.enums.CommonEnumType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -28,7 +27,7 @@ public class ProductReqSpecsDataVo { private String title; @ApiModelProperty(value = "需求状态") - private CommonEnumType status; + private ReqStatusCommonVo status; @ApiModelProperty(value = "产品需求类型") private String type; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index 51e6be62a..babc70a16 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -3,7 +3,6 @@ package com.microservices.pms.product.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProductModule; -import com.microservices.pms.product.domain.enums.CommonEnumType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -25,7 +24,7 @@ public class ProductUserReqDataVo { private String title; @ApiModelProperty(value = "需求状态") - private CommonEnumType status; + private ReqStatusCommonVo status; @ApiModelProperty(value = "从属产品模块") private PmsProductModule pmsProductModule; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java new file mode 100644 index 000000000..35dc2f4b8 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java @@ -0,0 +1,20 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.pms.product.domain.enums.ProductReqStatus; +import lombok.Data; + +/** + * @author OTTO + */ +@Data +public class ReqStatusCommonVo { + private String key; + private String name; + private String color; + + public ReqStatusCommonVo(ProductReqStatus status) { + this.key = status.getKey(); + this.name = status.getName(); + this.color = status.getColor(); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 24e74ace6..5264204a7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -116,4 +116,8 @@ public interface IPmsProductRequirementService int changeReqSpecs(ProductReqSpecsChangeVo productReqSpecsChangeVo); int activePlan(ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo); + + List selectUserReqStatusList(); + + List selectReqSpecsStatusList(); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index c742627a9..ecf91a32d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -534,6 +534,16 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return success; } + @Override + public List selectUserReqStatusList() { + return ProductReqStatus.getUserReqStatusList(); + } + + @Override + public List selectReqSpecsStatusList() { + return ProductReqStatus.getReqSpecsStatusList(); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); From 306a7c2558d3db9537eae0d436ae872ad3122e6e Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 4 Dec 2024 17:28:23 +0800 Subject: [PATCH 040/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增查询需求规格类型列表接口 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 10 ++++++++++ .../domain/enums/ProductReqSpecsType.java | 13 ++++++++++++ .../pms/product/domain/vo/EnumCommonVo.java | 20 +++++++++++++++++++ .../product/domain/vo/ReqStatusCommonVo.java | 8 +++----- .../IPmsProductRequirementService.java | 2 ++ .../PmsProductRequirementServiceImpl.java | 5 +++++ 6 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/EnumCommonVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 09d3e6de0..e15776ed1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -132,4 +132,14 @@ public class ProductReqSpecsController extends BaseController { public List statusList() { return pmsProductRequirementService.selectReqSpecsStatusList(); } + + /** + * 查询需求规格类型列表 + */ + @ApiOperation(value = "查询需求规格类型列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/typeList") + public List typeList() { + return pmsProductRequirementService.selectReqSpecsTypeList(); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java index 60bff5755..64d2d732e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqSpecsType.java @@ -1,8 +1,12 @@ package com.microservices.pms.product.domain.enums; import com.microservices.common.core.exception.ServiceException; +import com.microservices.pms.product.domain.vo.EnumCommonVo; import lombok.Getter; +import java.util.ArrayList; +import java.util.List; + /** * @author OTTO */ @@ -26,4 +30,13 @@ public enum ProductReqSpecsType { } throw new ServiceException("错误的需求类型(需求类型[%s])", key); } + + + public static List getReqSpecsTypeList() { + List typeCommonVoList = new ArrayList<>(); + for (ProductReqSpecsType productReqSpecsType : ProductReqSpecsType.values()) { + typeCommonVoList.add(new EnumCommonVo(productReqSpecsType.key, productReqSpecsType.name)); + } + return typeCommonVoList; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/EnumCommonVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/EnumCommonVo.java new file mode 100644 index 000000000..c72cacd06 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/EnumCommonVo.java @@ -0,0 +1,20 @@ +package com.microservices.pms.product.domain.vo; + +import lombok.Data; + +/** + * @author OTTO + */ +@Data +public class EnumCommonVo { + protected String key; + protected String name; + + public EnumCommonVo() { + } + + public EnumCommonVo(String key, String name) { + this.key = key; + this.name = name; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java index 35dc2f4b8..29057cf42 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusCommonVo.java @@ -7,14 +7,12 @@ import lombok.Data; * @author OTTO */ @Data -public class ReqStatusCommonVo { - private String key; - private String name; +public class ReqStatusCommonVo extends EnumCommonVo { private String color; public ReqStatusCommonVo(ProductReqStatus status) { - this.key = status.getKey(); - this.name = status.getName(); + super.key = status.getKey(); + super.name = status.getName(); this.color = status.getColor(); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 5264204a7..dacd76b1b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -120,4 +120,6 @@ public interface IPmsProductRequirementService List selectUserReqStatusList(); List selectReqSpecsStatusList(); + + List selectReqSpecsTypeList(); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index ecf91a32d..6f8aa1488 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -544,6 +544,11 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return ProductReqStatus.getReqSpecsStatusList(); } + @Override + public List selectReqSpecsTypeList() { + return ProductReqSpecsType.getReqSpecsTypeList(); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); From 7026580e8bf1bf65a8b0d6b6cf80592b16255d6b Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 5 Dec 2024 14:31:22 +0800 Subject: [PATCH 041/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复获取用户详情时评审记录可能为Null的情况 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 6f8aa1488..cd1e5a53d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -114,8 +114,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS public ProductUserReqDetailVo selectUserReqDetailById(Long id) { PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false); PmsProductReqOperationRecord record = pmsProductReqOperationRecordService.selectUserReqLatestReviewRecord(pmsProductRequirement.getId()); - pmsProductRequirement.setReviewContent(record.getContent()); - pmsProductRequirement.setReviewTime(record.getOperatingTime()); + if (record != null) { + pmsProductRequirement.setReviewContent(record.getContent()); + pmsProductRequirement.setReviewTime(record.getOperatingTime()); + } return toProductUserReqDetailVo(pmsProductRequirement); } From 2c2870b71ba8d2093ab0d5c01b15b9469a20a52a Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 5 Dec 2024 15:59:00 +0800 Subject: [PATCH 042/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持通过评审时间排序 Signed-off-by: OTTO <731554297@qq.com> --- .../resources/mapper/pms/PmsProductRequirementMapper.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 8810e4679..9766ba296 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -32,6 +32,8 @@ + + @@ -94,10 +96,10 @@ ppr.source_user, ppr.source_company, ppr.identifier, - record.reviewTime, - record.content as reviewContent + record.review_time, + record.content as review_content from pms_product_requirement as ppr - left join (select product_requirement_id, MAX(operating_time) as reviewTime, content + left join (select product_requirement_id, MAX(operating_time) as review_time, content from pms_product_req_operation_record where type = 'reviewUserReq' group by product_requirement_id, content) as record From f3f051dc5bec979bf0e24d67b58f12510be2a694 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 10:26:32 +0800 Subject: [PATCH 043/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=85=B3=E8=81=94=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E8=A7=84?= =?UTF-8?q?=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../PmsProjectTestcaseController.java | 1 + .../project/domain/PmsProjectTestcase.java | 14 +++----- .../vo/PmsProjectTestcaseBatchUpdateVo.java | 5 +++ .../domain/vo/PmsProjectTestcaseDataVo.java | 7 ++++ .../domain/vo/PmsProjectTestcaseInputVo.java | 3 ++ .../domain/vo/PmsProjectTestcaseSearchVo.java | 6 ++-- .../domain/vo/PmsProjectTestcaseUpdateVo.java | 3 ++ .../impl/PmsProjectTestcaseServiceImpl.java | 32 +++++++++++++++++++ .../mapper/pms/PmsProjectTestcaseMapper.xml | 21 ++++++------ 9 files changed, 69 insertions(+), 23 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java index 1beeb25f6..7b9bea402 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java @@ -119,6 +119,7 @@ public class PmsProjectTestcaseController extends BaseController { "assigneeGitlinkId:用例维护人Gitlink ID;\n" + "typeId:用例类型ID;\n" + "tags:标记Id列表,使用逗号分割的字符串;\n" + + "productReqSpecsId:关联产品需求规格id;\n" + "pmsModuleId:关联模块ID;\n") @RequestBody JSONObject batchUpdateVo) { return toAjax(pmsProjectTestcaseService.batchUpdatePmsProjectTestcase(batchUpdateVo)); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java index f53533188..e8a728bda 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java @@ -143,17 +143,11 @@ public class PmsProjectTestcase extends BaseEntity { @JsonIgnore private String reservedField3; - /** - * 预留字段4 - */ - @JsonIgnore - private String reservedField4; + @ApiModelProperty(value = "测试用例标识") + private String identifier; - /** - * 预留字段5 - */ - @JsonIgnore - private String reservedField5; + @ApiModelProperty(value = "产品需求规格id") + private Long productReqSpecsId; public PmsProjectTestcaseDataVo toPmsProjectTestcaseDataVo() { PmsProjectTestcaseDataVo target = new PmsProjectTestcaseDataVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java index 2a5b948e0..35cf5fe9a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java @@ -46,6 +46,10 @@ public class PmsProjectTestcaseBatchUpdateVo { private String tagIds; private Boolean tagIdsIsChange = false; + @ApiModelProperty(value = "产品需求规格id") + private Long productReqSpecsId; + private Boolean productReqSpecsIdIsChange = false; + /** * 关联模块ID */ @@ -70,6 +74,7 @@ public class PmsProjectTestcaseBatchUpdateVo { return assigneeGitlinkIdIsChange || typeIdIsChange || tagIdsIsChange + || productReqSpecsIdIsChange || pmsModuleIdIsChange; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java index fa325850d..499c7ac3a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java @@ -2,6 +2,7 @@ package com.microservices.pms.project.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProductModule; +import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.PmsProductRequirementTag; import com.microservices.pms.project.domain.PmsProject; import com.microservices.pms.project.domain.PmsProjectTestcaseType; @@ -64,6 +65,12 @@ public class PmsProjectTestcaseDataVo extends BaseEntityVo { @ApiModelProperty(value = "关联模块") private PmsProductModule pmsModule; + /** + * 关联模块 + */ + @ApiModelProperty(value = "关联产品需求规格") + private PmsProductRequirement productReqSpecs; + /** * 用例索引 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java index ee4904cfd..708c75cf6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java @@ -36,6 +36,9 @@ public class PmsProjectTestcaseInputVo { @ApiModelProperty(value = "用例维护人Gitlink ID") private Long assigneeGitlinkId; + @ApiModelProperty(value = "产品需求规格id") + private Long productReqSpecsId; + /** * 关联项目ID */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java index f4c72b186..1acb17d3c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java @@ -49,12 +49,12 @@ public class PmsProjectTestcaseSearchVo { @ApiModelProperty(value = "关联模块ID") private Long pmsModuleId; - /** - * 标记Id - */ @ApiModelProperty(value = "标记Id") private String tagId; + @ApiModelProperty(value = "产品需求规格id") + private Long productReqSpecsId; + public PmsProjectTestcase toPmsProjectTestcase() { PmsProjectTestcase target = new PmsProjectTestcase(); BeanUtils.copyProperties(this, target); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java index 3a6c0f4ff..40ff681a0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java @@ -34,6 +34,9 @@ public class PmsProjectTestcaseUpdateVo { @Size(max = 100, message = "长度需要小于100") private String title; + @ApiModelProperty(value = "产品需求规格id") + private Long productReqSpecsId; + /** * 用例维护人Gitlink ID */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java index 200908440..97918fb48 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java @@ -11,7 +11,10 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.product.domain.PmsProductModule; +import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.service.IPmsProductModuleService; +import com.microservices.pms.product.service.IPmsProductRequirementService; import com.microservices.pms.product.service.IPmsProductRequirementTagService; import com.microservices.pms.project.domain.PmsProject; import com.microservices.pms.project.domain.PmsProjectTestcase; @@ -63,6 +66,8 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService private IPmsProductRequirementTagService pmsProductRequirementTagService; @Autowired private PmsProjectTestsheetCasesMapper pmsProjectTestsheetCasesMapper; + @Autowired + private IPmsProductRequirementService pmsProductRequirementService; /** * 查询测试用例管理 @@ -143,6 +148,15 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService , pmsCommonService::getNickNameByUsername , pmsProjectTestcase.getUpdateBy()) ); + // 设置产品需求规格 + if (pmsProjectTestcase.getProductReqSpecsId() != null) { + pmsProjectTestcaseDataVo.setProductReqSpecs( + PmsUtils.getSelectObjectInCache( + hashMap + , x -> pmsProductRequirementService.selectPmsProductRequirementById(x, false) + , pmsProjectTestcase.getProductReqSpecsId()) + ); + } return pmsProjectTestcaseDataVo; } @@ -245,6 +259,13 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService // 校验标记是否存在 pmsProductRequirementTagService.checkTags(pmsProjectTestcase.getTags(), PmsConstants.TESTCASE_TAG_AND_MODULE_TYPE, pmsProject.getPmsEnterpriseId()); pmsProjectTestcase.setTagIds(pmsProjectTestcase.getTags()); + + if (pmsProjectTestcase.getProductReqSpecsId() != null) { + PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(pmsProjectTestcase.getProductReqSpecsId(), false); + if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { + throw new ServiceException("该需求处于用户需求状态,不能关联测试用例"); + } + } } private void checkUserInEnterprise(Long assigneeGitlinkId, PmsProject pmsProject) { @@ -366,6 +387,10 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService pmsProjectTestcaseBatchUpdateVo.setTagIds(jsonObject.getString("tags")); pmsProjectTestcaseBatchUpdateVo.setTagIdsIsChange(true); } + if (jsonObject.containsKey("productReqSpecsId")) { + pmsProjectTestcaseBatchUpdateVo.setProductReqSpecsId(jsonObject.getLong("productReqSpecsId")); + pmsProjectTestcaseBatchUpdateVo.setProductReqSpecsIdIsChange(true); + } if (pmsProjectTestcaseBatchUpdateVo.thisIsChange()) { checkPmsProjectTestcaseBatchUpdateVo(pmsProjectTestcaseBatchUpdateVo); pmsProjectTestcaseBatchUpdateVo.setUpdateBy(SecurityUtils.getUsername()); @@ -410,5 +435,12 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService pmsProject.getPmsEnterpriseId()); } + if (pmsProjectTestcaseBatchUpdateVo.getProductReqSpecsIdIsChange()) { + PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(pmsProjectTestcaseBatchUpdateVo.getProductReqSpecsId(), false); + if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { + throw new ServiceException("该需求处于用户需求状态,不能关联测试用例"); + } + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml index f4e0ebc71..bc6706185 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml @@ -24,8 +24,8 @@ - - + + @@ -48,8 +48,8 @@ reserved_field_1, reserved_field_2, reserved_field_3, - reserved_field_4, - reserved_field_5 + identifier, + product_req_specs_id from pms_project_testcase @@ -129,8 +129,8 @@ reserved_field_1, reserved_field_2, reserved_field_3, - reserved_field_4, - reserved_field_5, + identifier, + product_req_specs_id, #{title}, @@ -151,8 +151,8 @@ #{reservedField1}, #{reservedField2}, #{reservedField3}, - #{reservedField4}, - #{reservedField5}, + #{identifier}, + #{productReqSpecsId}, @@ -177,8 +177,8 @@ reserved_field_1 = #{reservedField1}, reserved_field_2 = #{reservedField2}, reserved_field_3 = #{reservedField3}, - reserved_field_4 = #{reservedField4}, - reserved_field_5 = #{reservedField5}, + identifier = #{identifier}, + product_req_specs_id = #{productReqSpecsId}, where id = #{id} @@ -198,6 +198,7 @@ pms_module_id = #{pmsModuleId}, update_time = #{updateTime}, update_by = #{updateBy}, + product_req_specs_id = #{productReqSpecsId}, where id in From 44069a7c55b015fc451735084ec20d54c958ff90 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 11:13:35 +0800 Subject: [PATCH 044/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增需求规格关联测试用例及其执行结果查询 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductReqTrackingController.java | 15 +++++ ...oductReqSpecsAssociatedTestcaseDataVo.java | 55 +++++++++++++++++++ .../service/IPmsProjectTestcaseService.java | 3 + .../impl/PmsProjectTestcaseServiceImpl.java | 36 ++++++++++-- .../mapper/pms/PmsProjectTestcaseMapper.xml | 1 + 5 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java index 47cef7119..191289edf 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java @@ -3,7 +3,9 @@ package com.microservices.pms.product.controller; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.domain.vo.ProductReqOperationRecordDataVo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsAssociatedTestcaseDataVo; import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; +import com.microservices.pms.project.service.IPmsProjectTestcaseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -31,6 +33,8 @@ import java.util.List; public class ProductReqTrackingController extends BaseController { @Autowired private IPmsProductReqOperationRecordService pmsProductReqOperationRecordService; + @Autowired + private IPmsProjectTestcaseService pmsProjectTestcaseService; /** * 查询用户需求变更记录 @@ -53,4 +57,15 @@ public class ProductReqTrackingController extends BaseController { @PathVariable("reqSpecsId") Long reqSpecsId) { return pmsProductReqOperationRecordService.selectReqSpecsChangeRecordList(reqSpecsId); } + + /** + * 查询用户需求变更记录 + */ + @ApiOperation(value = "查询关联的测试用例") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/{reqSpecsId}/associatedTestcase") + public List getReqSpecsAssociatedTestcaseList( + @PathVariable("reqSpecsId") Long reqSpecsId) { + return pmsProjectTestcaseService.selectReqSpecsAssociatedTestcaseList(reqSpecsId); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java new file mode 100644 index 000000000..3135558c1 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java @@ -0,0 +1,55 @@ +package com.microservices.pms.product.domain.vo; + +import com.microservices.pms.enums.TestCaseStatus; +import com.microservices.pms.project.domain.PmsProjectTestsheetCases; +import com.microservices.system.api.domain.SimpleSysUser; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 产品需求对象 pms_product_requirement + * + * @author otto + * @date 2023-10-10 + */ +@Data +@ApiModel("需求规格关联测试用例数据对象") +public class ProductReqSpecsAssociatedTestcaseDataVo { + private Long id; + + @ApiModelProperty(value = "标题") + private String title; + + @ApiModelProperty(value = "用例维护人") + private SimpleSysUser assigneeUser; + + @ApiModelProperty(value = "执行次数") + private Long executeCount; + + @ApiModelProperty(value = "未执行次数") + private Long unExecuteCount; + + @ApiModelProperty(value = "通过次数") + private Long executePassCount; + + @ApiModelProperty(value = "跳过次数") + private Long executeSkipCount; + + @ApiModelProperty(value = "阻塞次数") + private Long executeBlockCount; + + @ApiModelProperty(value = "失败次数") + private Long executeFailCount; + + public void setCountData(List testsheetCasesList) { + this.setUnExecuteCount(testsheetCasesList.stream().filter(x -> TestCaseStatus.INIT.ordinal() == x.getTestStatus().intValue()).count()); + this.setExecutePassCount(testsheetCasesList.stream().filter(x -> TestCaseStatus.PASS.ordinal() == x.getTestStatus().intValue()).count()); + this.setExecuteFailCount(testsheetCasesList.stream().filter(x -> TestCaseStatus.FAIL.ordinal() == x.getTestStatus().intValue()).count()); + this.setExecuteBlockCount(testsheetCasesList.stream().filter(x -> TestCaseStatus.BLOCKING.ordinal() == x.getTestStatus().intValue()).count()); + this.setExecuteSkipCount(testsheetCasesList.stream().filter(x -> TestCaseStatus.SKIP.ordinal() == x.getTestStatus().intValue()).count()); + this.setExecuteCount((long) testsheetCasesList.size()); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java index 6ad150600..06b701240 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java @@ -2,6 +2,7 @@ package com.microservices.pms.project.service; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.pms.product.domain.vo.ProductReqSpecsAssociatedTestcaseDataVo; import com.microservices.pms.project.domain.PmsProjectTestcase; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDataVo; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDetailVo; @@ -113,4 +114,6 @@ public interface IPmsProjectTestcaseService { * @return 测试用例列表 */ List selectPmsProjectTestcaseList(PmsProjectTestcase pmsProjectTestcaseSearch); + + List selectReqSpecsAssociatedTestcaseList(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java index 97918fb48..8e48da3da 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java @@ -5,6 +5,7 @@ import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.JSONUtils; import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; @@ -13,13 +14,11 @@ import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.product.domain.PmsProductModule; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.enums.ProductReqStatus; +import com.microservices.pms.product.domain.vo.ProductReqSpecsAssociatedTestcaseDataVo; import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.product.service.IPmsProductRequirementService; import com.microservices.pms.product.service.IPmsProductRequirementTagService; -import com.microservices.pms.project.domain.PmsProject; -import com.microservices.pms.project.domain.PmsProjectTestcase; -import com.microservices.pms.project.domain.PmsProjectTestcaseStep; -import com.microservices.pms.project.domain.PmsProjectTestcaseType; +import com.microservices.pms.project.domain.*; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseBatchUpdateVo; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDataVo; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDetailVo; @@ -35,6 +34,7 @@ import com.microservices.system.api.domain.SysUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -192,6 +192,34 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService return pmsProjectTestcaseMapper.selectPmsProjectTestcaseList(pmsProjectTestcaseSearch); } + @Override + public List selectReqSpecsAssociatedTestcaseList(Long reqSpecsId) { + List reqSpecsTestcaseDataVoList = new ArrayList<>(); + PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecsId, false); + if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { + throw new ServiceException("用户需求无法查询关联的测试用例"); + } + PmsProjectTestcase testcaseSearch = new PmsProjectTestcase(); + testcaseSearch.setProductReqSpecsId(reqSpecsId); + List reqSpecsTestcaseList = pmsProjectTestcaseMapper.selectPmsProjectTestcaseList(testcaseSearch); + HashMap hashMap = new HashMap<>(); + for (PmsProjectTestcase pmsProjectTestcase : reqSpecsTestcaseList) { + ProductReqSpecsAssociatedTestcaseDataVo reqSpecsTestcaseDataVo = new ProductReqSpecsAssociatedTestcaseDataVo(); + BeanUtils.copyProperties(pmsProjectTestcase, reqSpecsTestcaseDataVo); + reqSpecsTestcaseDataVo.setAssigneeUser( + PmsUtils.getSelectObjectInCache( + hashMap + , pmsCommonService::getSimpleSysUserByGitlinkUserId + , pmsProjectTestcase.getAssigneeGitlinkId())); + PmsProjectTestsheetCases projectTestSheetCasesSearch = new PmsProjectTestsheetCases(); + projectTestSheetCasesSearch.setProjectTestcaseId(pmsProjectTestcase.getId()); + List testsheetCasesList = pmsProjectTestsheetCasesMapper.selectPmsProjectTestsheetCasesList(projectTestSheetCasesSearch); + reqSpecsTestcaseDataVo.setCountData(testsheetCasesList); + reqSpecsTestcaseDataVoList.add(reqSpecsTestcaseDataVo); + } + return reqSpecsTestcaseDataVoList; + } + /** * 新增测试用例管理 * diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml index bc6706185..db06427f2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestcaseMapper.xml @@ -67,6 +67,7 @@ and type_id = #{typeId} and FIND_IN_SET(#{tagId},tag_ids) and `index` = #{index} + and `product_req_specs_id` = #{productReqSpecsId} From a46d7e65cf84c478c742502896c04521e888b553 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 14:19:17 +0800 Subject: [PATCH 045/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 变更中的需求规格返回变更人和变更时间 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/vo/ProductReqSpecsDetailVo.java | 19 +++++++++++++++++++ .../PmsProductReqOperationRecordMapper.java | 2 ++ .../IPmsProductReqOperationRecordService.java | 2 ++ ...sProductReqOperationRecordServiceImpl.java | 5 +++++ .../PmsProductRequirementServiceImpl.java | 10 +++++++++- .../PmsProductReqOperationRecordMapper.xml | 9 +++++++++ 6 files changed, 46 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java index feadfa130..dcb344f0d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java @@ -1,13 +1,16 @@ package com.microservices.pms.product.domain.vo; import com.alibaba.fastjson2.JSONObject; +import com.fasterxml.jackson.annotation.JsonFormat; import com.microservices.pms.product.domain.PmsProductPlan; import com.microservices.pms.project.domain.PmsProject; +import com.microservices.system.api.domain.SimpleSysUser; import com.microservices.system.api.domain.SysFileInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; import java.util.List; /** @@ -33,4 +36,20 @@ public class ProductReqSpecsDetailVo extends ProductReqSpecsDataVo { @ApiModelProperty(value = "关联产品计划") private PmsProductPlan pmsProductPlan; + + @ApiModelProperty(value = "创建人") + private SimpleSysUser createBy; + + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @ApiModelProperty(value = "变更人") + private SimpleSysUser changeBy; + + @ApiModelProperty(value = "变更") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date changeTime; + + } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java index 20c80f31d..cb91fd656 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java @@ -62,4 +62,6 @@ public interface PmsProductReqOperationRecordMapper { public int deletePmsProductReqOperationRecordByIds(Long[] ids); PmsProductReqOperationRecord selectUserReqLatestReviewRecord(Long reqId); + + PmsProductReqOperationRecord selectReqSpecsLatestChangeRecord(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java index 8a236ce49..17950527f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java @@ -71,4 +71,6 @@ public interface IPmsProductReqOperationRecordService { List selectUserReqChangeRecordList(Long userReqId); List selectReqSpecsChangeRecordList(Long reqSpecsId); + + PmsProductReqOperationRecord selectReqSpecsLatestChangeRecord(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 53a6d3f30..1ddb3e0a4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -141,6 +141,11 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp return getRecordDataList(recordList); } + @Override + public PmsProductReqOperationRecord selectReqSpecsLatestChangeRecord(Long reqSpecsId) { + return pmsProductReqOperationRecordMapper.selectReqSpecsLatestChangeRecord(reqSpecsId); + } + private List getRecordDataList(List recordList) { List recordDataList = new ArrayList<>(); for (PmsProductReqOperationRecord record : recordList) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index cd1e5a53d..b467aa851 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -570,7 +570,15 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS productReqSpecsDetailVo.setPmsProductPlan( pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false)); } - + productReqSpecsDetailVo.setCreateBy(pmsCommonService.getSimpleSysUserByUsername(pmsProductRequirement.getCreateBy())); + productReqSpecsDetailVo.setCreateTime(pmsProductRequirement.getCreateTime()); + if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(pmsProductRequirement.getStatus())) { + PmsProductReqOperationRecord record = pmsProductReqOperationRecordService.selectReqSpecsLatestChangeRecord(pmsProductRequirement.getFromId()); + if (record != null) { + productReqSpecsDetailVo.setChangeBy(pmsCommonService.getSimpleSysUserByUsername(record.getOperator())); + productReqSpecsDetailVo.setChangeTime(record.getOperatingTime()); + } + } return productReqSpecsDetailVo; } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml index ef942f6c5..be609229c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -74,6 +74,15 @@ order by operating_time desc limit 1 + From 5bc5185882557cc0fcc640d01c9244d01add46fa Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 14:23:09 +0800 Subject: [PATCH 046/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正评审状态判断错误的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../product/service/impl/PmsProductRequirementServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index b467aa851..277dd3137 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -308,7 +308,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS public int reviewReqSpecs(ProductReqReviewVo productReqReviewVo) { // 通过id检查需修改的需求规格是否存在 PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqReviewVo.getId(), true); - if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(reqSpecs.getStatus()) + if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(reqSpecs.getStatus()) && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { throw new ServiceException("只有待审核和变更中状态的需求规格才能进行审核"); } From 0af814be0da79aba52e5338b403af96f0187a22c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 15:10:03 +0800 Subject: [PATCH 047/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增查询需求规格关联的计划接口 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductReqTrackingController.java | 33 ++++++++++++------- .../IPmsProductRequirementService.java | 3 ++ .../PmsProductRequirementServiceImpl.java | 15 +++++++++ .../pms/utils/PmsGitLinkRequestUrl.java | 4 +++ 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java index 191289edf..7609d4e19 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java @@ -1,10 +1,14 @@ package com.microservices.pms.product.controller; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.GenericsAjaxResult; +import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.domain.vo.ProductReqOperationRecordDataVo; import com.microservices.pms.product.domain.vo.ProductReqSpecsAssociatedTestcaseDataVo; import com.microservices.pms.product.service.IPmsProductReqOperationRecordService; +import com.microservices.pms.product.service.IPmsProductRequirementService; import com.microservices.pms.project.service.IPmsProjectTestcaseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -16,8 +20,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** * 产品需求规格相关接口 * @@ -35,6 +37,8 @@ public class ProductReqTrackingController extends BaseController { private IPmsProductReqOperationRecordService pmsProductReqOperationRecordService; @Autowired private IPmsProjectTestcaseService pmsProjectTestcaseService; + @Autowired + private IPmsProductRequirementService pmsProductRequirementService; /** * 查询用户需求变更记录 @@ -42,9 +46,9 @@ public class ProductReqTrackingController extends BaseController { @ApiOperation(value = "查询用户需求变更记录") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{userReqId}/userReqChangeRecord") - public List getUserReqChangeRecordList( + public GenericsTableDataInfo getUserReqChangeRecordList( @PathVariable("userReqId") Long userReqId) { - return pmsProductReqOperationRecordService.selectUserReqChangeRecordList(userReqId); + return getGenericsDataTable(pmsProductReqOperationRecordService.selectUserReqChangeRecordList(userReqId)); } /** @@ -53,19 +57,24 @@ public class ProductReqTrackingController extends BaseController { @ApiOperation(value = "查询需求规格变更记录") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{reqSpecsId}/reqSpecsChangeRecord") - public List getReqSpecsChangeRecordList( + public GenericsTableDataInfo getReqSpecsChangeRecordList( @PathVariable("reqSpecsId") Long reqSpecsId) { - return pmsProductReqOperationRecordService.selectReqSpecsChangeRecordList(reqSpecsId); + return getGenericsDataTable(pmsProductReqOperationRecordService.selectReqSpecsChangeRecordList(reqSpecsId)); } - /** - * 查询用户需求变更记录 - */ - @ApiOperation(value = "查询关联的测试用例") + @ApiOperation(value = "查询需求规格关联的测试用例") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{reqSpecsId}/associatedTestcase") - public List getReqSpecsAssociatedTestcaseList( + public GenericsTableDataInfo getReqSpecsAssociatedTestcaseList( @PathVariable("reqSpecsId") Long reqSpecsId) { - return pmsProjectTestcaseService.selectReqSpecsAssociatedTestcaseList(reqSpecsId); + return getGenericsDataTable(pmsProjectTestcaseService.selectReqSpecsAssociatedTestcaseList(reqSpecsId)); + } + + @ApiOperation(value = "查询需求规格关联的计划") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/{reqSpecsId}/associatedPlan") + public GenericsAjaxResult getReqSpecsAssociatedPlanData( + @PathVariable("reqSpecsId") Long reqSpecsId) { + return GenericsAjaxResult.success(pmsProductRequirementService.selectReqSpecsAssociatedPlanData(reqSpecsId)); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index dacd76b1b..c92053682 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -1,5 +1,6 @@ package com.microservices.pms.product.service; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.*; @@ -122,4 +123,6 @@ public interface IPmsProductRequirementService List selectReqSpecsStatusList(); List selectReqSpecsTypeList(); + + JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 277dd3137..9fe663419 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -10,6 +10,7 @@ import com.microservices.common.core.utils.PageUtils; import com.microservices.common.core.utils.PinYinStringUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.httpClient.util.GitLinkRequestHelper; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; @@ -25,6 +26,7 @@ import com.microservices.pms.project.domain.vo.PmsProjectIssuesInputVo; import com.microservices.pms.project.service.IPmsProjectService; import com.microservices.pms.project.service.PmsProjectIssuesService; import com.microservices.pms.utils.PmsConstants; +import com.microservices.pms.utils.PmsGitLinkRequestUrl; import com.microservices.pms.utils.PmsUtils; import com.microservices.system.api.RemoteFileService; import com.microservices.system.api.domain.SysUser; @@ -74,6 +76,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private IPmsJournalsService pmsJournalsService; @Autowired private RemoteFileService remoteFileService; + @Autowired + private GitLinkRequestHelper gitLinkRequestHelper; @Override public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole) { @@ -551,6 +555,17 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return ProductReqSpecsType.getReqSpecsTypeList(); } + @Override + public JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId) { + PmsProductRequirement reqSpecs = selectPmsProductRequirementById(reqSpecsId, true); + if (reqSpecs.getPmsProjectId() == null) { + return null; + } + return gitLinkRequestHelper.doGet( + PmsGitLinkRequestUrl.GET_REQ_SPECS_LINK_ISSUES(reqSpecs.getProjectReqId(), reqSpecs.getPmsProjectId()) + ); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index 56c37d119..6031771e2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -362,4 +362,8 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { public static GitLinkRequestUrl SAVE_PIPELINE_YAML(String owner, String repoIdentifier) { return getGitLinkRequestUrl(String.format("/api/v1/%s/%s/pipelines/save_yaml", owner, repoIdentifier)); } + + public static GitLinkRequestUrl GET_REQ_SPECS_LINK_ISSUES(Long reqSpecsIssueId, Long projectId) { + return getGitLinkRequestUrl(String.format("/api/pm/issues/%d/link_issues?pm_project_id=%d", reqSpecsIssueId, projectId)); + } } From 290b42333f0c8ba84a1369a473bf13358e315663 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 15:11:20 +0800 Subject: [PATCH 048/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正需求规格纳入计划时修改了错误的状态 Signed-off-by: OTTO <731554297@qq.com> --- .../product/service/impl/PmsProductRequirementServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 9fe663419..42a7ba917 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -532,7 +532,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS JSONObject projectIssue = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); reqSpecs.setPmsProjectId(project.getId()); reqSpecs.setProjectReqId(projectIssue.getLong("id")); - reqSpecs.setStatus(ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey()); + reqSpecs.setStatus(ProductReqStatus.PLANNED_REQ_SPECS.getKey()); int success = updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier()); pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord( productReqSpecsActivePlanVo.toPmsProductReqOperationRecord(reqSpecs) From c7c3f53f91941e4de553562e918d49c43c16eb86 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 6 Dec 2024 15:14:29 +0800 Subject: [PATCH 049/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 已拒绝的需求规格允许用户删除 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 42a7ba917..ba1b93a85 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -259,8 +259,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && - !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核和变更中状态的需求规格才能被删除"); + !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && + !ProductReqStatus.REJECTED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { + throw new ServiceException("只有待审核、变更中和已拒绝状态的需求规格才能被删除"); } if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { // 变更中需求规格被删除时需将原需求还原状态 From 42b5dd4530f7e22a13a03a24796aab384f4da313 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 14:13:33 +0800 Subject: [PATCH 050/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求规格详情返回评审相关信息 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/vo/ProductReqSpecsDetailVo.java | 11 +++++++ .../PmsProductReqOperationRecordMapper.java | 2 ++ .../IPmsProductReqOperationRecordService.java | 2 ++ ...sProductReqOperationRecordServiceImpl.java | 5 ++++ .../PmsProductRequirementServiceImpl.java | 29 +++++++++++++++++-- .../PmsProductReqOperationRecordMapper.xml | 8 +++++ 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java index dcb344f0d..03a79ad0c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java @@ -52,4 +52,15 @@ public class ProductReqSpecsDetailVo extends ProductReqSpecsDataVo { private Date changeTime; + @ApiModelProperty(value = "评审时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date reviewTime; + + @ApiModelProperty(value = "评审人") + private String reviewUser; + + @ApiModelProperty(value = "评审意见") + private String reviewContent; + + } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java index cb91fd656..ffbb62350 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductReqOperationRecordMapper.java @@ -64,4 +64,6 @@ public interface PmsProductReqOperationRecordMapper { PmsProductReqOperationRecord selectUserReqLatestReviewRecord(Long reqId); PmsProductReqOperationRecord selectReqSpecsLatestChangeRecord(Long reqSpecsId); + + PmsProductReqOperationRecord selectReqSpecsLatestReviewRecord(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java index 17950527f..07089be83 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java @@ -73,4 +73,6 @@ public interface IPmsProductReqOperationRecordService { List selectReqSpecsChangeRecordList(Long reqSpecsId); PmsProductReqOperationRecord selectReqSpecsLatestChangeRecord(Long reqSpecsId); + + PmsProductReqOperationRecord selectReqSpecsLatestReviewRecord(Long reqSpecsId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 1ddb3e0a4..8dc6edb0a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -146,6 +146,11 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp return pmsProductReqOperationRecordMapper.selectReqSpecsLatestChangeRecord(reqSpecsId); } + @Override + public PmsProductReqOperationRecord selectReqSpecsLatestReviewRecord(Long reqSpecsId) { + return pmsProductReqOperationRecordMapper.selectReqSpecsLatestReviewRecord(reqSpecsId); + } + private List getRecordDataList(List recordList) { List recordDataList = new ArrayList<>(); for (PmsProductReqOperationRecord record : recordList) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index ba1b93a85..e74034c2f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -589,10 +589,33 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS productReqSpecsDetailVo.setCreateBy(pmsCommonService.getSimpleSysUserByUsername(pmsProductRequirement.getCreateBy())); productReqSpecsDetailVo.setCreateTime(pmsProductRequirement.getCreateTime()); if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(pmsProductRequirement.getStatus())) { - PmsProductReqOperationRecord record = pmsProductReqOperationRecordService.selectReqSpecsLatestChangeRecord(pmsProductRequirement.getFromId()); + PmsProductReqOperationRecord changeRecord = pmsProductReqOperationRecordService.selectReqSpecsLatestChangeRecord(pmsProductRequirement.getFromId()); + if (changeRecord != null) { + productReqSpecsDetailVo.setChangeBy(pmsCommonService.getSimpleSysUserByUsername(changeRecord.getOperator())); + productReqSpecsDetailVo.setChangeTime(changeRecord.getOperatingTime()); + } + } + PmsProductRequirement fromReq = pmsProductRequirement; + PmsProductReqOperationRecord record = null; + while (fromReq != null) { + if (ProductReqStatus.isUserReqStatus(fromReq.getStatus())) { + record = pmsProductReqOperationRecordService.selectUserReqLatestReviewRecord(fromReq.getId()); + } else { + record = pmsProductReqOperationRecordService.selectReqSpecsLatestReviewRecord(fromReq.getId()); + } + if (record != null) { - productReqSpecsDetailVo.setChangeBy(pmsCommonService.getSimpleSysUserByUsername(record.getOperator())); - productReqSpecsDetailVo.setChangeTime(record.getOperatingTime()); + break; + } + fromReq = selectPmsProductRequirementById(fromReq.getFromId(), true); + } + if (record != null) { + productReqSpecsDetailVo.setReviewTime(record.getOperatingTime()); + if (StringUtils.isNotEmpty(record.getContent()) + && JSON.isValid(record.getContent())) { + JSONObject reviewContentJson = JSONObject.parseObject(record.getContent()); + productReqSpecsDetailVo.setReviewUser(reviewContentJson.getString("reviewUser")); + productReqSpecsDetailVo.setReviewContent(reviewContentJson.getString("reviewContent")); } } return productReqSpecsDetailVo; diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml index be609229c..991a38563 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -83,6 +83,14 @@ order by operating_time desc limit 1 + From 95ad6b83b4d4adf6c4b4fdc060c7e5898712caa7 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 14:25:14 +0800 Subject: [PATCH 051/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品标识不允许重复 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/PmsProductInputVo.java | 1 + .../pms/product/mapper/PmsProductMapper.java | 4 +++- .../pms/product/service/impl/PmsProductServiceImpl.java | 9 ++++++--- .../src/main/resources/mapper/pms/PmsProductMapper.xml | 7 +++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java index f91d9f955..44cb814af 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java @@ -44,6 +44,7 @@ public class PmsProductInputVo @ApiModelProperty(value = "产品标识", required = true) @NotNull + @Size(max = 50, message = "长度需要小于50") private String productIdentifier; public PmsProduct toPmsProduct(String pmsEnterpriseIdentifier) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java index 032877180..c5867a77f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java @@ -77,7 +77,7 @@ public interface PmsProductMapper * 根据名称查找产品数量 * * @param name - * @param pmsEnterpriseId + * @param pmsEnterpriseIdentifier * @return */ Integer selectPmsProductByNameCount(@Param("name") String name, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); @@ -89,4 +89,6 @@ public interface PmsProductMapper * @return 产品数量 */ Integer selectPmsProductCount(PmsProductSearchVo pmsProductSearchVo); + + Integer selectPmsProductByIdentifierCount(@Param("identifier") String identifier, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java index 6d6313f96..867554cd8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java @@ -114,10 +114,13 @@ public class PmsProductServiceImpl implements IPmsProductService * @return 结果 */ @Override - public String insertPmsProduct(PmsProduct pmsProduct) - { - checkNameDuplicates(pmsProduct.getProductName(), pmsProduct.getPmsEnterpriseIdentifier()); + public String insertPmsProduct(PmsProduct pmsProduct) { PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProduct.getPmsEnterpriseIdentifier()); + checkNameDuplicates(pmsProduct.getProductName(), pmsProduct.getPmsEnterpriseIdentifier()); + Integer count = pmsProductMapper.selectPmsProductByIdentifierCount(pmsProduct.getProductIdentifier(), pmsEnterprise.getEnterpriseIdentifier()); + if (count > 0) { + throw new ServiceException("该产品标识在当前企业下已存在(产品标识[%s])", pmsProduct.getProductIdentifier()); + } pmsProduct.setPmsEnterpriseId(pmsEnterprise.getId()); String currentUsername=SecurityUtils.getUsername(); Date now=DateUtils.getNowDate(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml index 46531f9e8..d7b702965 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml @@ -109,6 +109,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join pms_enterprise as pe on ppd.pms_enterprise_id=pe.id + insert into pms_product From e1b377ceef2e1a16316a96e8d62bb30d9a3af957 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 14:49:25 +0800 Subject: [PATCH 052/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求规格标识不允许重复,存在重复的在最后面添加数字 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/PmsProductRequirementMapper.java | 2 ++ .../PmsProductRequirementServiceImpl.java | 23 ++++++++++++++----- .../pms/PmsProductRequirementMapper.xml | 6 +++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index bd4a6cd50..4e30160ae 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -108,4 +108,6 @@ public interface PmsProductRequirementMapper List selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo); List selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); + + Integer selectReqSpecsCountByIdentifier(@Param("identifier") String identifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index e74034c2f..ad36bb942 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -379,7 +379,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private void userReqToReqSpecs(PmsProductRequirement userReq, PmsProductReqOperationRecord record) { PmsProductRequirement reqSpecs = userReq.userReqToReqSpecs(); - reqSpecs.setIdentifier(genReqSpecsIdentifier(userReq.getPmsProductIdentifier(), userReq.getTitle())); + reqSpecs.setIdentifier(genReqSpecsIdentifier(userReq.getPmsProductIdentifier(), userReq.getTitle(), null)); reqSpecs.setCreateAndUpdate(SecurityUtils.getUsername()); pmsProductRequirementMapper.insertPmsProductRequirement(reqSpecs); record.setProductRequirementId(reqSpecs.getId()); @@ -423,9 +423,19 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return toProductReqSpecsDetailVo(pmsProductRequirement); } - private String genReqSpecsIdentifier(String productIdentifier, String reqTitle) { + private String genReqSpecsIdentifier(String productIdentifier, String reqTitle, String oldIdentifier) { String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).replaceAll("[^a-z^A-Z]", "").toUpperCase(); - return productIdentifier + "-" + reqTitleIdentifier; + String identifier = productIdentifier + "-" + reqTitleIdentifier; + if (!identifier.equals(oldIdentifier)) { + Integer count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier); + int nameCount = 1; + while (count > 0) { + identifier = productIdentifier + "-" + reqTitleIdentifier + "-" + nameCount; + count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier); + nameCount++; + } + } + return identifier; } @Override @@ -440,7 +450,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS checkReqSpecsParameter(pmsProductRequirement, pmsProduct, null); // 生成需求唯一标识 - pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsInputVo.getTitle())); + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsInputVo.getTitle(), null)); // 设置默认需求状态 pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey()); @@ -471,7 +481,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 待审核和变更中的需求可随意更改 if (StringUtils.isNotEmpty(productReqSpecsUpdateVo.getTitle())) { // 更新需求唯一标识 - pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle())); + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsUpdateVo.getTitle(), oldPmsProductRequirement.getIdentifier())); } } else { throw new ServiceException("当前状态下的需求规格不允许修改"); @@ -501,7 +511,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductRequirement changingReqSpecs = oldPmsProductRequirement.toChangeReqSpecs(productReqSpecsChangeVo); if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getTitle())) { // 更新需求唯一标识 - changingReqSpecs.setIdentifier(genReqSpecsIdentifier(oldPmsProductRequirement.getPmsProductIdentifier(), productReqSpecsChangeVo.getTitle())); + changingReqSpecs.setIdentifier( + genReqSpecsIdentifier(oldPmsProductRequirement.getPmsProductIdentifier(), productReqSpecsChangeVo.getTitle(), oldPmsProductRequirement.getIdentifier())); } changingReqSpecs.setUpdateBy(SecurityUtils.getUsername()); changingReqSpecs.setUpdateTime(DateUtils.getNowDate()); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 9766ba296..85324cdaa 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -227,6 +227,12 @@ order by update_time desc + + insert into pms_product_requirement From 96c5a2b68712d9c83a404c4b19a7fc3ec47376b4 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 14:58:20 +0800 Subject: [PATCH 053/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生成需规标识时去掉标题中特殊字符 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index ad36bb942..920d874c0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -38,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; +import java.util.regex.Pattern; import static com.microservices.common.core.utils.PageUtils.startPage; @@ -424,7 +425,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } private String genReqSpecsIdentifier(String productIdentifier, String reqTitle, String oldIdentifier) { - String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).replaceAll("[^a-z^A-Z]", "").toUpperCase(); + // 去掉标题中特殊字符 + String regEx = "\\pP|\\pS|\\s+"; + reqTitle = Pattern.compile(regEx).matcher(reqTitle).replaceAll("").trim(); + String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).toUpperCase(); String identifier = productIdentifier + "-" + reqTitleIdentifier; if (!identifier.equals(oldIdentifier)) { Integer count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier); From c67da2401c3b6db2bd57cd438597e2e7beead82c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 14:59:22 +0800 Subject: [PATCH 054/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 限制评审人和评审意见长度 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/ProductReqReviewVo.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 860d4477f..485eeee3a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.util.Date; /** @@ -34,10 +35,12 @@ public class ProductReqReviewVo { @ApiModelProperty(value = "评审人", required = true) @NotNull + @Size(max = 100, message = "长度需要小于100") private String reviewUser; @ApiModelProperty(value = "评审意见", required = true) @NotNull + @Size(max = 1000, message = "长度需要小于1000") private String reviewContent; public PmsProductReqOperationRecord toUserReqRecord(String operator) { From dbceb01ce0d0169c980a212bdd44509d447f5871 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 15:39:15 +0800 Subject: [PATCH 055/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求操作记录使用中文逗号 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/enums/ProductReqOperationType.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index 5599ec9b0..f77e5a620 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -35,21 +35,21 @@ public enum ProductReqOperationType { String operationTimeStr = formatter.format(record.getOperatingTime()); switch (type) { case CONTENT_MODIFY: - return String.format("%s,由【%s】%s", + return String.format("%s,由【%s】%s", operationTimeStr, operator.getNickName(), ProductContentModifyOperation.getNameByKey(record.getOperation())); case REVIEW_USER_REQ: - return String.format("%s,由【%s】进行了用户需求评审,评审结果为【%s】", + return String.format("%s,由【%s】进行了用户需求评审,评审结果为【%s】", operationTimeStr, operator.getNickName(), ProductReqReviewStatus.getNameByKey(record.getOperation())); case ACTIVE_PLAN: - return String.format("%s,由【%s】将需求纳入了计划", + return String.format("%s,由【%s】将需求纳入了计划", operationTimeStr, operator.getNickName()); case REVIEW_REQ_SPECS: - return String.format("%s,由【%s】进行了需求规格评审,评审结果为【%s】", + return String.format("%s,由【%s】进行了需求规格评审,评审结果为【%s】", operationTimeStr, operator.getNickName(), ProductReqReviewStatus.getNameByKey(record.getOperation())); From 59cb39ee83d237f9793eead998ea18c0737ead93 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 15:51:29 +0800 Subject: [PATCH 056/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复需规评审相关信息不存在导致报错的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/enums/ProductReqReviewStatus.java | 2 +- .../product/service/impl/PmsProductRequirementServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java index dd125eb72..0258efae8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqReviewStatus.java @@ -10,7 +10,7 @@ import lombok.Getter; @Getter public enum ProductReqReviewStatus { PASS("pass", "已通过"), - REJECTED("rejected", "已拒绝"); + REJECTED("rejected", "未通过"); private final String key; private final String name; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 920d874c0..c19bd9d74 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -622,7 +622,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (record != null) { break; } - fromReq = selectPmsProductRequirementById(fromReq.getFromId(), true); + fromReq = fromReq.getFromId() != null ? selectPmsProductRequirementById(fromReq.getFromId(), true) : null; } if (record != null) { productReqSpecsDetailVo.setReviewTime(record.getOperatingTime()); From b0f325370f815ca7e5f459207f930bc0f6730a17 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 9 Dec 2024 15:53:49 +0800 Subject: [PATCH 057/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据需规类型搜索需规 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/ProductReqSpecsSearchVo.java | 3 +++ .../main/resources/mapper/pms/PmsProductRequirementMapper.xml | 1 + 2 files changed, 4 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java index 9e94a5dbe..d50ab0b22 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java @@ -39,6 +39,9 @@ public class ProductReqSpecsSearchVo { @ApiModelProperty(value = "产品需求状态(全部状态请传空)") private String status; + @ApiModelProperty(value = "产品需求类型") + private String type; + /** * 关联项目ID */ diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 85324cdaa..7afb4aad4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -205,6 +205,7 @@ and title like concat('%', #{title}, '%') and pms_product_identifier = #{pmsProductIdentifier} and `status` = #{status} + and `type` = #{type} From 0417d51f254a466e9ee8118f3f9c499ee8843ca0 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Mon, 9 Dec 2024 16:57:17 +0800 Subject: [PATCH 058/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E6=A6=82?= =?UTF-8?q?=E8=A7=88=EF=BC=89:=E8=BF=AD=E4=BB=A3=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=85=B3=E8=81=94=E6=B5=8B=E8=AF=95=E5=8D=95?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/project/domain/vo/PmsProjectSprintDetailVo.java | 3 +++ .../pms/project/mapper/PmsProjectTestsheetMapper.java | 2 ++ .../project/service/impl/PmsProjectSprintServiceImpl.java | 6 ++++++ .../main/resources/mapper/pms/PmsProjectTestsheetMapper.xml | 3 +++ 4 files changed, 14 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java index af9a74fac..05f692de2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java @@ -33,6 +33,9 @@ public class PmsProjectSprintDetailVo { @ApiModelProperty(value = "工时规模") private Long timeScale; + @ApiModelProperty(value = "关联测试用例数") + private Integer linkedTestCaseCount; + @ApiModelProperty(value = "状态 0待开始 1进行中 2已关闭") private String status; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectTestsheetMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectTestsheetMapper.java index 60edeb393..6144ef7ca 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectTestsheetMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectTestsheetMapper.java @@ -66,4 +66,6 @@ public interface PmsProjectTestsheetMapper List selectPmsProjectTestsheetByIds(@Param("pmsProjectTestSheetIds") String pmsProjectTestSheetIds); int deletePmsProjectTestsheetByProjectId(@Param("projectId") Long projectId); + + Integer selectCountBySprintId(@Param("sprintId") Long sprintId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java index cf2d15cc6..4b3aae5ba 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java @@ -11,6 +11,8 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.project.domain.PmsProjectSprint; import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.mapper.PmsProjectSprintMapper; +import com.microservices.pms.project.mapper.PmsProjectTestcaseMapper; +import com.microservices.pms.project.mapper.PmsProjectTestsheetMapper; import com.microservices.pms.project.service.IPmsProjectService; import com.microservices.pms.project.service.IPmsProjectSprintService; import com.microservices.pms.project.service.PmsProjectIssuesService; @@ -58,6 +60,9 @@ public class PmsProjectSprintServiceImpl implements IPmsProjectSprintService @Lazy private PmsProjectIssuesService pmsProjectIssuesService; + @Resource + private PmsProjectTestsheetMapper pmsProjectTestsheetMapper; + /** * 查询项目迭代 @@ -138,6 +143,7 @@ public class PmsProjectSprintServiceImpl implements IPmsProjectSprintService BeanUtils.copyProperties(pmsProjectSprint, pmsProjectSprintDetailVo); pmsProjectSprintDetailVo.setSprintAssignee(pmsCommonService.getSimpleSysUserByGitlinkUserId(pmsProjectSprint.getSprintAssigneeId())); pmsProjectSprintDetailVo.setSprintIssuesStatistics(sprintIssuesStatistics.getJSONObject(String.valueOf(pmsProjectSprint.getId()))); + pmsProjectSprintDetailVo.setLinkedTestCaseCount(pmsProjectTestsheetMapper.selectCountBySprintId(pmsProjectSprint.getId())); return pmsProjectSprintDetailVo; } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestsheetMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestsheetMapper.xml index 5eed3b216..ec6dd180c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestsheetMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectTestsheetMapper.xml @@ -50,6 +50,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{pmsProjectTestSheetIds} + insert into pms_project_testsheet From 168f60234d097abcc0e4f504ce685502a6c4184e Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Mon, 9 Dec 2024 17:32:38 +0800 Subject: [PATCH 059/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E6=A6=82?= =?UTF-8?q?=E8=A7=88=EF=BC=89:=E5=BC=80=E5=90=AF=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E6=95=B0=E3=80=81=E8=BF=91=E4=B8=80=E5=91=A8?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=AD=E4=BB=A3=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/project/mapper/PmsProjectSprintMapper.java | 4 ++++ .../project/service/impl/PmsProjectServiceImpl.java | 13 ++++++++++++- .../resources/mapper/pms/PmsProjectSprintMapper.xml | 13 +++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java index 7e5370db2..9c4210ffb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java @@ -73,4 +73,8 @@ public interface PmsProjectSprintMapper int deletePmsProjectSprintByProjectId(@Param("projectId") Long projectId); PmsProjectSprint selectLatestSprintByProjectIdAndNameAndAssigneeId(@Param("pmsProjectId") Long pmsProjectId, @Param("sprintName") String sprintName, @Param("sprintAssigneeId") Long sprintAssigneeId); + + Integer selectOpeningSprintCount(@Param("pmProjectId") Long pmProjectId); + + Integer selectOpeningSprintLastWeekIterationCount(@Param("pmProjectId") Long pmProjectId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index de1f13385..8ff606055 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -436,7 +436,18 @@ public class PmsProjectServiceImpl implements IPmsProjectService // 校验数据权限 selectAndCheckPmsProjectById(pmProjectId); JSONObject result = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_PROJECT_STATISTICS(pmProjectId)); - return result.getJSONObject(DATA_KEY); + JSONObject dataObj = result.getJSONObject(DATA_KEY); + if (dataObj.containsKey("open_data")) { + // 获取 open_data 对象 + JSONObject openData = dataObj.getJSONObject("open_data"); + Integer openSprintCount = pmsProjectSprintMapper.selectOpeningSprintCount(pmProjectId); + Integer openLastWeekIterationCount = pmsProjectSprintMapper.selectOpeningSprintLastWeekIterationCount(pmProjectId); + // 添加新的键值对 + openData.put("0", openSprintCount); // 新增开启中的迭代 + openData.put("0_lastWeekIteration", openLastWeekIterationCount); //近一周新增 + dataObj.put("open_data", openData); + } + return dataObj; } @Override diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml index 7aa6a8d1e..58d09ba99 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml @@ -184,4 +184,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by id desc limit 1 + + \ No newline at end of file From 22c5efd140f15d00553dc47fffb8adced11d19d7 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 11:05:24 +0800 Subject: [PATCH 060/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 获取需规列表时支持通过多状态查询 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/ProductReqSpecsSearchVo.java | 5 ++++- .../service/impl/PmsProductRequirementServiceImpl.java | 3 +++ .../resources/mapper/pms/PmsProductRequirementMapper.xml | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java index d50ab0b22..8b287ed87 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java @@ -36,9 +36,12 @@ public class ProductReqSpecsSearchVo { @ApiModelProperty(value = "关联产品模块ID(传0查询不属于任何模块的需求)") private Long pmsProductModuleId; - @ApiModelProperty(value = "产品需求状态(全部状态请传空)") + @ApiModelProperty(value = "产品需求状态(全部状态请传空)(可通过逗号分割传多个状态)") private String status; + @ApiModelProperty(value = "产品需求状态(数组)", hidden = true) + private String[] statusList; + @ApiModelProperty(value = "产品需求类型") private String type; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index c19bd9d74..06dcd9e52 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -394,6 +394,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS List moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId()); productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); } + if (StringUtils.isNotEmpty(productReqSpecsSearchVo.getStatus())) { + productReqSpecsSearchVo.setStatusList(productReqSpecsSearchVo.getStatus().split(",")); + } startPage(); List userReqList = pmsProductRequirementMapper.selectReqSpecsList(productReqSpecsSearchVo); HashMap hashMap = new HashMap<>(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 7afb4aad4..80876e48c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -204,7 +204,11 @@ and title like concat('%', #{title}, '%') and pms_product_identifier = #{pmsProductIdentifier} - and `status` = #{status} + and `status` in + + #{item} + + and `type` = #{type} From d596005853eb01c07d29cb0aecd044caee863029 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 11:41:31 +0800 Subject: [PATCH 061/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 测试用例新增拷贝接口 Signed-off-by: OTTO <731554297@qq.com> --- .../PmsProjectTestcaseController.java | 20 +++++++++++----- .../service/IPmsProjectTestcaseService.java | 4 +++- .../impl/PmsProjectTestcaseServiceImpl.java | 24 ++++++++++++++++++- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java index 7b9bea402..fe9676304 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java @@ -11,10 +11,7 @@ import com.microservices.common.security.annotation.Logical; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.service.IPmsProductModuleService; import com.microservices.pms.project.domain.PmsProjectTestcase; -import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDataVo; -import com.microservices.pms.project.domain.vo.PmsProjectTestcaseInputVo; -import com.microservices.pms.project.domain.vo.PmsProjectTestcaseSearchVo; -import com.microservices.pms.project.domain.vo.PmsProjectTestcaseUpdateVo; +import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.service.IPmsProjectTestcaseService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; @@ -68,8 +65,8 @@ public class PmsProjectTestcaseController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) @GetMapping(value = "/{id}") @ApiOperation(value = "获取测试用例详细信息") - public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { - return genericsSuccess(pmsProjectTestcaseService.selectPmsProjectTestcaseDataVoById(id)); + public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { + return genericsSuccess(pmsProjectTestcaseService.selectPmsProjectTestcaseDetailVoById(id)); } /** @@ -83,6 +80,17 @@ public class PmsProjectTestcaseController extends BaseController { return success(pmsProjectTestcaseService.insertPmsProjectTestcase(pmsProjectTestcaseInputVo.toPmsProjectTestcase())); } + /** + * 复制测试用例 + */ + @RequiresPermissions("pms:pmsProjectTestcase:add") + @Log(title = "测试用例管理", businessType = BusinessType.INSERT) + @PostMapping("{testcaseId}/copy") + @ApiOperation(value = "复制测试用例") + public AjaxResult copy(@PathVariable("testcaseId") Long testcaseId) { + return success(pmsProjectTestcaseService.copyPmsProjectTestcase(testcaseId)); + } + /** * 修改测试用例管理 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java index 06b701240..052fca224 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectTestcaseService.java @@ -78,7 +78,7 @@ public interface IPmsProjectTestcaseService { * @param id 测试用例ID * @return 测试用例详情 */ - PmsProjectTestcaseDataVo selectPmsProjectTestcaseDataVoById(Long id); + PmsProjectTestcaseDetailVo selectPmsProjectTestcaseDetailVoById(Long id); /** * 根据模块ID删除测试用例与模块的关联关系 @@ -116,4 +116,6 @@ public interface IPmsProjectTestcaseService { List selectPmsProjectTestcaseList(PmsProjectTestcase pmsProjectTestcaseSearch); List selectReqSpecsAssociatedTestcaseList(Long reqSpecsId); + + PmsProjectTestcase copyPmsProjectTestcase(Long testcaseId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java index 8e48da3da..f1ebeb69f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java @@ -22,6 +22,7 @@ import com.microservices.pms.project.domain.*; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseBatchUpdateVo; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDataVo; import com.microservices.pms.project.domain.vo.PmsProjectTestcaseDetailVo; +import com.microservices.pms.project.domain.vo.PmsProjectTestcaseStepDataVo; import com.microservices.pms.project.mapper.PmsProjectTestcaseMapper; import com.microservices.pms.project.mapper.PmsProjectTestsheetCasesMapper; import com.microservices.pms.project.service.IPmsProjectService; @@ -37,6 +38,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; import static com.microservices.common.core.utils.PageUtils.startPage; @@ -220,6 +222,26 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService return reqSpecsTestcaseDataVoList; } + @Override + public PmsProjectTestcase copyPmsProjectTestcase(Long testcaseId) { + PmsProjectTestcase pmsProjectTestcase = selectPmsProjectTestcaseById(testcaseId); + pmsProjectTestcase.setId(null); + pmsProjectTestcase.setTags(pmsProjectTestcase.getTagIds()); + PmsProjectTestcaseStep pmsProjectTestcaseStepSearch = new PmsProjectTestcaseStep(); + pmsProjectTestcaseStepSearch.setPmsTestcaseId(testcaseId); + List selectPmsProjectTestcaseStepList = pmsProjectTestcaseStepService.selectPmsProjectTestcaseStepList(pmsProjectTestcaseStepSearch); + List pmsProjectTestcaseStepList = selectPmsProjectTestcaseStepList.stream() + .map(x -> { + PmsProjectTestcaseStep pmsProjectTestcaseStep = new PmsProjectTestcaseStep(); + BeanUtils.copyProperties(x, pmsProjectTestcaseStep); + pmsProjectTestcaseStep.setId(null); + return pmsProjectTestcaseStep; + }).collect(Collectors.toList()); + pmsProjectTestcase.setTestcaseStepList(pmsProjectTestcaseStepList); + insertPmsProjectTestcase(pmsProjectTestcase); + return pmsProjectTestcase; + } + /** * 新增测试用例管理 * @@ -364,7 +386,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService } @Override - public PmsProjectTestcaseDataVo selectPmsProjectTestcaseDataVoById(Long id) { + public PmsProjectTestcaseDetailVo selectPmsProjectTestcaseDetailVoById(Long id) { return toPmsProjectTestcaseDetailVo(selectPmsProjectTestcaseById(id)); } From c7cc7a911177c7a5b4f559199a5320ac30a696f8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 14:22:28 +0800 Subject: [PATCH 062/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复附件无法下载的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/file/service/impl/SysFileInfoServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index 25404a085..8df0a8ed0 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -263,7 +263,7 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { @Override public void fileDownloadByIdentifier(String fileIdentifier, HttpServletResponse response, HttpServletRequest request) { SysFileInfo sysFileInfo = selectSysFileInfoByFileIdentifier(fileIdentifier); - if (StringUtils.isEmpty(sysFileInfo.getFilePath()) || !sysFileInfo.getFilePath().contains("/zone-identifier")) { + if (StringUtils.isEmpty(sysFileInfo.getFilePath())) { throw new ServiceException("当前文件无法下载"); } fileDownload(sysFileInfo, response); From 63c5fc1b7f03d26c564e72ff515464d2ccc432b0 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 14:36:53 +0800 Subject: [PATCH 063/270] =?UTF-8?q?fix(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复待评审的需规查询不到变更记录的bug Signed-off-by: OTTO <731554297@qq.com> --- .../impl/PmsProductReqOperationRecordServiceImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 8dc6edb0a..bd8c2758d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -132,10 +132,14 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp // 根据需求规格id和fromId查询需求规格相关的所有需求规格相关的变更记录列表 PmsProductReqOperationRecord recordSearch = new PmsProductReqOperationRecord(); List recordList = new ArrayList<>(); - while (reqSpecs.getFromId() != null && !ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { + while (reqSpecs != null && !ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { recordSearch.setProductRequirementId(reqSpecs.getId()); recordList.addAll(pmsProductReqOperationRecordMapper.selectPmsProductReqOperationRecordList(recordSearch)); - reqSpecs = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecs.getFromId(), false); + if (reqSpecs.getFromId() != null) { + reqSpecs = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecs.getFromId(), false); + } else { + reqSpecs = null; + } } return getRecordDataList(recordList); From 4cca1bf20564369f78c36896a8baab7d644df592 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 15:18:11 +0800 Subject: [PATCH 064/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需规纳入计划时计划状态需设置为进行中 Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/vo/ProductReqSpecsActivePlanVo.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java index 255fe82d2..fb924449f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java @@ -1,9 +1,12 @@ package com.microservices.pms.product.domain.vo; +import com.microservices.pms.enums.ProjectIssuePriority; +import com.microservices.pms.enums.ProjectIssueStatus; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.enums.ProductReqOperationType; import com.microservices.pms.project.domain.vo.PmsProjectIssuesInputVo; +import com.microservices.pms.utils.PmsConstants; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -32,9 +35,9 @@ public class ProductReqSpecsActivePlanVo { PmsProjectIssuesInputVo issue = new PmsProjectIssuesInputVo(); issue.setSubject(reqSpecs.getTitle()); issue.setPmProjectId(projectId); - issue.setStatusId(1); - issue.setPmIssueType(1); - issue.setPriorityId(2); + issue.setStatusId(ProjectIssueStatus.RESOLVING.getId()); + issue.setPmIssueType(Integer.valueOf(PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT)); + issue.setPriorityId(ProjectIssuePriority.NORMAL.getId()); issue.setDescription(reqSpecs.getContent()); issue.setAttachmentIds(forgeFileIdentifierList); return issue; From 464ce4e2866529eeb19fb1e68af27d1275aeb480 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 10 Dec 2024 17:26:30 +0800 Subject: [PATCH 065/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E9=9C=80=E8=A7=84=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E8=AE=A1=E5=88=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 项目计划仅能基于产品需求规格创建 2. 项目计划不允许编辑标题、正文和附件 3. 项目计划状态值仅能为进行中、已完成、已关闭 4. 如果状态发生变更,需同步产品需规的状态变更: - 项目计划修改为进行中将需规调整为已计划 - 项目计划修改为已完成或已关闭将需规调整为已完成 - 限制需求规格变更中,项目计划不能调整为已完成或已关闭状态 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/PmsProductRequirementMapper.java | 2 + .../IPmsProductRequirementService.java | 3 + .../PmsProductRequirementServiceImpl.java | 18 ++++ .../PmsProjectIssuesController.java | 91 ++++++++----------- .../domain/vo/PmsProjectIssuesInputVo.java | 12 +++ .../service/PmsProjectIssuesService.java | 38 ++++++++ .../pms/PmsProductRequirementMapper.xml | 6 ++ 7 files changed, 116 insertions(+), 54 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index 4e30160ae..d102369a6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -110,4 +110,6 @@ public interface PmsProductRequirementMapper List selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); Integer selectReqSpecsCountByIdentifier(@Param("identifier") String identifier); + + PmsProductRequirement selectReqSpecsByProjectReqId(@Param("projectReqId") Long projectReqId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index c92053682..4c5d17f7b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -3,6 +3,7 @@ package com.microservices.pms.product.service; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; +import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.*; import java.util.List; @@ -125,4 +126,6 @@ public interface IPmsProductRequirementService List selectReqSpecsTypeList(); JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId); + + void updateReqSpecsStatusByProjectReqId(Long projectReqId, ProductReqStatus productReqStatus); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 06dcd9e52..95396163a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -585,6 +585,24 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS ); } + @Override + public void updateReqSpecsStatusByProjectReqId(Long projectReqId, ProductReqStatus productReqStatus) { + PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectReqSpecsByProjectReqId(projectReqId); + if (pmsProductRequirement == null) { + throw new ServiceException("项目计划关联的需求规格不存在"); + } + if (productReqStatus.getKey().equals(pmsProductRequirement.getStatus())) { + return; + } + if (ProductReqStatus.COMPLETED_REQ_SPECS.getKey().equals(productReqStatus.getKey())) { + if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(pmsProductRequirement.getStatus())) { + throw new ServiceException("需求规格变更中,项目计划不能调整为已完成或已关闭状态"); + } + } + pmsProductRequirement.setStatus(productReqStatus.getKey()); + updateRequirement(pmsProductRequirement, pmsProductRequirement.getPmsProductIdentifier()); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java index 61ec32a12..c7aac46a6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java @@ -2,6 +2,7 @@ package com.microservices.pms.project.controller; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; @@ -10,6 +11,7 @@ import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.service.IPmsProjectTestsheetIssuesService; import com.microservices.pms.project.service.PmsProjectIssuesService; +import com.microservices.pms.utils.PmsConstants; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -30,7 +32,7 @@ import javax.servlet.http.HttpServletResponse; @ApiImplicitParams({ @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") }) -public class PmsProjectIssuesController extends BaseController { +public class PmsProjectIssuesController extends BaseController { @Autowired private PmsProjectIssuesService pmsProjectIssuesService; @@ -44,8 +46,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe", "pms:pmsProjectTestsheet:edit"}, logical = Logical.OR) @GetMapping("/list") @ApiOperation(value = "项目工作项列表") - public AjaxResult list(PmsProjectIssuesSearchVo pmsProjectIssuesSearchVo) - { + public AjaxResult list(PmsProjectIssuesSearchVo pmsProjectIssuesSearchVo) { JSONObject result = pmsProjectIssuesService.selectPmsProjectIssuesList(pmsProjectIssuesSearchVo); return success(result); } @@ -56,8 +57,11 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssues:add") @PostMapping("/add") @ApiOperation(value = "新增项目工作项") - public AjaxResult add(@RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) - { + public AjaxResult add(@RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { + if (PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(String.valueOf(pmsProjectIssuesInputVo.getPmIssueType())) + && pmsProjectIssuesInputVo.getRootId() == null) { + throw new ServiceException("项目计划仅能基于产品需求规格创建"); + } JSONObject result = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); return success(result); } @@ -68,8 +72,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssues:edit") @PostMapping("/edit/{id}") @ApiOperation(value = "编辑项目工作项") - public AjaxResult edit(@PathVariable("id") Long id, @RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) - { + public AjaxResult edit(@PathVariable("id") Long id, @RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { JSONObject result = pmsProjectIssuesService.updatePmsProjectIssues(id, pmsProjectIssuesInputVo); return success(result); } @@ -80,10 +83,8 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssues:edit") @PutMapping("/edit/batch") @ApiOperation(value = "批量修改项目工作项") - public AjaxResult batchUpdate(@ApiParam( "项目Id") @RequestParam(name= "pmProjectId") Long pmProjectId, - @RequestBody PmsProjectIssuesBatchUpdateVo pmsProjectIssuesUpdateVo) - { - + public AjaxResult batchUpdate(@ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId, + @RequestBody PmsProjectIssuesBatchUpdateVo pmsProjectIssuesUpdateVo) { JSONObject result = pmsProjectIssuesService.batchUpdatePmsProjectIssues(pmProjectId, pmsProjectIssuesUpdateVo); return success(result); } @@ -93,8 +94,7 @@ public class PmsProjectIssuesController extends BaseController { */ @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) @GetMapping("/{id}") - public AjaxResult query(@PathVariable("id") Long id, @ApiParam( "项目Id")@RequestParam(name = "pmProjectId") Long pmProjectId) - { + public AjaxResult query(@PathVariable("id") Long id, @ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId) { JSONObject result = pmsProjectIssuesService.selectPmsProjectIssueById(id, pmProjectId); return success(result); @@ -105,9 +105,7 @@ public class PmsProjectIssuesController extends BaseController { */ @RequiresPermissions("pms:pmsProjectIssues:remove") @DeleteMapping("/{ids}") - public AjaxResult remove(@ApiParam( "工作项id数组,为-1时删除全部")@PathVariable Long[] ids, @ApiParam( "项目Id")@RequestParam(name = "pmProjectId") Long pmProjectId) - { - + public AjaxResult remove(@ApiParam("工作项id数组,为-1时删除全部") @PathVariable Long[] ids, @ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId) { JSONObject result = pmsProjectIssuesService.deletePmsProjectIssueByIds(ids, pmProjectId); return success(result); } @@ -118,8 +116,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) @GetMapping("/issueStatus") @ApiOperation(value = "查询项目工作项状态列表") - public AjaxResult issueStatus() - { + public AjaxResult issueStatus() { JSONObject result = pmsProjectIssuesService.selectPmsProjectIssueStatus(); return success(result); @@ -131,8 +128,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) @GetMapping("/issuePriorities") @ApiOperation(value = "查询项目工作项优先级列表") - public AjaxResult issuePriorities() - { + public AjaxResult issuePriorities() { JSONObject result = pmsProjectIssuesService.selectPmsProjectIssuePriorities(); return success(result); @@ -145,8 +141,7 @@ public class PmsProjectIssuesController extends BaseController { @GetMapping("/issueTags") @ApiOperation(value = "查询初始的项目工作项标记列表") public AjaxResult issueTags(@ApiParam(name = "pmProjectId", value = "项目Id") Long pmProjectId, - @ApiParam(name = "repositoryId", value = "仓库") Long repositoryId) - { + @ApiParam(name = "repositoryId", value = "仓库") Long repositoryId) { JSONObject result = pmsProjectIssuesService.selectPmsProjectIssueTags(pmProjectId, repositoryId); return success(result); @@ -158,8 +153,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe", "pms:pmsProjectIssuesTag:manage"}, logical = Logical.OR) @GetMapping("/enterpriseIssueTags") @ApiOperation(value = "查询企业下项目工作项标记列表") - public AjaxResult getEnterpriseIssueTags(PmsEnterpriseIssueTagsSearchVo pmsEnterpriseIssueTagsSearchVo) - { + public AjaxResult getEnterpriseIssueTags(PmsEnterpriseIssueTagsSearchVo pmsEnterpriseIssueTagsSearchVo) { JSONObject result = pmsProjectIssuesService.selectPmsEnterpriseIssueTags(pmsEnterpriseIssueTagsSearchVo); return success(result); @@ -171,8 +165,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssuesTag:manage") @PostMapping("/enterpriseIssueTags") @ApiOperation(value = "创建企业下项目工作项标记") - public AjaxResult createEnterpriseIssueTag(@RequestBody PmsEnterpriseIssueTagInputVo pmsEnterpriseIssueTagInputVo) - { + public AjaxResult createEnterpriseIssueTag(@RequestBody PmsEnterpriseIssueTagInputVo pmsEnterpriseIssueTagInputVo) { JSONObject result = pmsProjectIssuesService.createPmsEnterpriseIssueTag(pmsEnterpriseIssueTagInputVo); return success(result); @@ -184,8 +177,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssuesTag:manage") @PutMapping("/enterpriseIssueTags/{tagId}") @ApiOperation(value = "更新企业下项目工作项标记") - public AjaxResult editEnterpriseIssueTag(@PathVariable("tagId") Long tagId, @RequestBody PmsEnterpriseIssueTagUpdateVo pmsEnterpriseIssueTagUpdateVo) - { + public AjaxResult editEnterpriseIssueTag(@PathVariable("tagId") Long tagId, @RequestBody PmsEnterpriseIssueTagUpdateVo pmsEnterpriseIssueTagUpdateVo) { JSONObject result = pmsProjectIssuesService.editPmsEnterpriseIssueTag(tagId, pmsEnterpriseIssueTagUpdateVo); return success(result); @@ -197,8 +189,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions("pms:pmsProjectIssuesTag:manage") @DeleteMapping("/enterpriseIssueTags/{tagId}") @ApiOperation(value = "删除企业下项目工作项标记") - public AjaxResult deleteEnterpriseIssueTag(@PathVariable("tagId") Long tagId) - { + public AjaxResult deleteEnterpriseIssueTag(@PathVariable("tagId") Long tagId) { JSONObject result = pmsProjectIssuesService.deletePmsEnterpriseIssueTag(tagId); return success(result); @@ -210,8 +201,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) @GetMapping("{repositoryId}/repoBranches") @ApiOperation(value = "查询仓库下分支列表") - public AjaxResult repoBranches(@PathVariable Long repositoryId) - { + public AjaxResult repoBranches(@PathVariable Long repositoryId) { JSONArray result = pmsProjectIssuesService.selectPmsProjectRepoBranches(repositoryId); return success(result); @@ -223,8 +213,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProjectIssues:edit", "pms:pmsProjectIssues:add"}, logical = Logical.OR) @PostMapping("/attachments") @ApiOperation(value = "上传工作项中的附件") - public AjaxResult uploadAttachments(@RequestPart("file") MultipartFile file) - { + public AjaxResult uploadAttachments(@RequestPart("file") MultipartFile file) { JSONObject result = pmsProjectIssuesService.uploadAttachment(file); return success(result); } @@ -235,8 +224,7 @@ public class PmsProjectIssuesController extends BaseController { @RequiresPermissions(value = {"pms:pmsProjectIssues:edit", "pms:pmsProjectIssues:add", "pms:pmsProjectIssues:remove"}, logical = Logical.OR) @DeleteMapping("/attachments/{id}") @ApiOperation(value = "删除工作项中的附件") - public AjaxResult deleteAttachments(@PathVariable Long id) - { + public AjaxResult deleteAttachments(@PathVariable Long id) { JSONObject result = pmsProjectIssuesService.deleteAttachment(id); return success(result); @@ -249,8 +237,7 @@ public class PmsProjectIssuesController extends BaseController { @PostMapping("/link/{issueId}") @ApiOperation(value = "添加项目工作项关联") public AjaxResult addIssueLinks(@ApiParam("工作项id") @PathVariable Long issueId, - @RequestBody PmsProjectIssuesLinkVo pmsProjectIssuesLinkVo) - { + @RequestBody PmsProjectIssuesLinkVo pmsProjectIssuesLinkVo) { JSONObject result = pmsProjectIssuesService.addPmsProjectIssueLink(issueId, pmsProjectIssuesLinkVo); return success(result); @@ -263,8 +250,7 @@ public class PmsProjectIssuesController extends BaseController { @GetMapping("/link/{issueId}") @ApiOperation(value = "查看项目工作项关联") public AjaxResult getIssueLinks(@ApiParam("工作项id") @PathVariable Long issueId, - @ApiParam( "项目Id")@RequestParam(name = "pmProjectId") Long pmProjectId) - { + @ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId) { JSONObject result = pmsProjectIssuesService.getPmsProjectIssueLink(issueId, pmProjectId); return success(result); @@ -294,12 +280,12 @@ public class PmsProjectIssuesController extends BaseController { @GetMapping("/optionalParentIssue/{issueId}") @ApiOperation(value = "可选择的父工作项列表") public AjaxResult getOptionalParentIssueList( - @ApiParam("页码") Integer pageNum, - @ApiParam("页数") Integer pageSize, - @ApiParam("工作项id") @PathVariable Long issueId, - @ApiParam("需求1 任务2 缺陷3") @RequestParam(name = "pmIssueType") String pmIssueType, - @ApiParam("项目id") @RequestParam(name = "pmProjectId") String pmProjectId, - @ApiParam("搜索关键词") @RequestParam(name = "keyword", required = false) String keyword + @ApiParam("页码") Integer pageNum, + @ApiParam("页数") Integer pageSize, + @ApiParam("工作项id") @PathVariable Long issueId, + @ApiParam("需求1 任务2 缺陷3") @RequestParam(name = "pmIssueType") String pmIssueType, + @ApiParam("项目id") @RequestParam(name = "pmProjectId") String pmProjectId, + @ApiParam("搜索关键词") @RequestParam(name = "keyword", required = false) String keyword ) { @@ -315,8 +301,7 @@ public class PmsProjectIssuesController extends BaseController { @ApiOperation(value = "删除项目工作项关联") public AjaxResult removeIssueLinks(@ApiParam("当前工作项id") @PathVariable Long issueId, @ApiParam("关联工作项id") @PathVariable String linkIssueId, - @ApiParam( "项目Id")@RequestParam(name = "pmProjectId") Long pmProjectId) - { + @ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId) { JSONObject result = pmsProjectIssuesService.deletePmsProjectIssueLink(issueId, linkIssueId, pmProjectId); return success(result); @@ -328,8 +313,7 @@ public class PmsProjectIssuesController extends BaseController { @PostMapping("/journals/{issueId}") @ApiOperation(value = "新增工作项评论") public AjaxResult addJournals(@ApiParam("工作项id") @PathVariable Long issueId, - @RequestBody PmsProjectIssueJournalInputVo pmsProjectIssueJournalInputVo) - { + @RequestBody PmsProjectIssueJournalInputVo pmsProjectIssueJournalInputVo) { JSONObject result = pmsProjectIssuesService.addPmsProjectIssueJournals(issueId, pmsProjectIssueJournalInputVo); return success(result); } @@ -341,10 +325,9 @@ public class PmsProjectIssuesController extends BaseController { @ApiOperation(value = "删除工作项评论") public AjaxResult removeJournals(@ApiParam("工作项id") @PathVariable Long issueId, @ApiParam("评论id") @PathVariable Long journalId, - @ApiParam( "项目Id")@RequestParam(name = "pmProjectId") Long pmProjectId, - @ApiParam( "工作项关联的仓库id")@RequestParam(name = "pmProjectRepositoryId", required = false) Long pmProjectRepositoryId - ) - { + @ApiParam("项目Id") @RequestParam(name = "pmProjectId") Long pmProjectId, + @ApiParam("工作项关联的仓库id") @RequestParam(name = "pmProjectRepositoryId", required = false) Long pmProjectRepositoryId + ) { JSONObject result = pmsProjectIssuesService.removePmsProjectIssueJournals(issueId, journalId, pmProjectId, pmProjectRepositoryId); return success(result); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java index 1ccf17954..e77fa6172 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java @@ -1,5 +1,7 @@ package com.microservices.pms.project.domain.vo; +import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.utils.StringUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -70,4 +72,14 @@ public class PmsProjectIssuesInputVo { @ApiModelProperty(value = "关联工作项id") private Long linkAbleId; + + public boolean isChangeContent(JSONObject issueJson) { + if (StringUtils.isNotEmpty(subject) && !issueJson.getString("subject").equals(subject)) { + return true; + } + if (StringUtils.isNotEmpty(description) && !issueJson.getString("description").equals(description)) { + return true; + } + return attachmentIds != null; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java index 1927c29f0..203dcce95 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java @@ -9,6 +9,9 @@ import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.enums.ProjectIssueStatus; +import com.microservices.pms.product.domain.enums.ProductReqStatus; +import com.microservices.pms.product.service.IPmsProductRequirementService; import com.microservices.pms.project.domain.PmsProject; import com.microservices.pms.project.domain.SimpleRepository; import com.microservices.pms.project.domain.vo.*; @@ -23,6 +26,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -53,6 +57,10 @@ public class PmsProjectIssuesService { @Lazy private IPmsProjectService pmsProjectService; + @Autowired + @Lazy + private IPmsProductRequirementService pmsProductRequirementService; + @Autowired @Lazy private IPmsProjectTestsheetIssuesService pmsProjectTestsheetIssuesService; @@ -95,6 +103,7 @@ public class PmsProjectIssuesService { return gitLinkRequestHelper.doPost(PmsGitLinkRequestUrl.CREATE_ISSUE(), issueInput); } + @Transactional(rollbackFor = Exception.class) public JSONObject updatePmsProjectIssues(Long id, PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); JSONObject updatedIssue; @@ -102,6 +111,35 @@ public class PmsProjectIssuesService { updatedIssue = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE(id, pmsProjectIssuesInputVo.getPmProjectId())); } catch (URISyntaxException e) { throw new RuntimeException(e); + } + // 项目计划不允许编辑标题、正文和附件 + if (PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(updatedIssue.getString("pm_issue_type")) + && updatedIssue.getString("root_id") == null) { + if (pmsProjectIssuesInputVo.isChangeContent(updatedIssue)) { + throw new ServiceException("项目计划不允许编辑标题、正文和附件"); + } + if (ProjectIssueStatus.REFUSE.getId().equals(pmsProjectIssuesInputVo.getStatusId()) + || ProjectIssueStatus.NEW.getId().equals(pmsProjectIssuesInputVo.getStatusId())) { + throw new ServiceException("项目计划状态值选择错误"); + } + + // 如果状态发生变更,需同步产品需规的状态变更 + if (pmsProjectIssuesInputVo.getStatusId() != null) { + JSONObject statusJson = updatedIssue.getJSONObject("status"); + if (!statusJson.getString("id").equals(String.valueOf(pmsProjectIssuesInputVo.getStatusId()))) { + // 项目计划修改为进行中将需规调整为已计划 + if (ProjectIssueStatus.RESOLVING.getId().equals(pmsProjectIssuesInputVo.getStatusId())) { + pmsProductRequirementService.updateReqSpecsStatusByProjectReqId(id, ProductReqStatus.PLANNED_REQ_SPECS); + } + // 项目计划修改为已完成或已关闭将需规调整为已完成 + if (ProjectIssueStatus.RESOLVED.getId().equals(pmsProjectIssuesInputVo.getStatusId()) + || ProjectIssueStatus.CLOSE.getId().equals(pmsProjectIssuesInputVo.getStatusId())) { + pmsProductRequirementService.updateReqSpecsStatusByProjectReqId(id, ProductReqStatus.COMPLETED_REQ_SPECS); + } + } + } + + } if (PmsConstants.PROJECT_ISSUE_TYPE_WEEKLY_REPORT.equals(updatedIssue.getString("pm_issue_type")) && updatedIssue.getString("root_id") != null diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 80876e48c..d911cef96 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -237,6 +237,12 @@ from pms_product_requirement where identifier = #{identifier} + From 413c11d98ce1778420585ca9a736914a833733b1 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 11 Dec 2024 10:07:00 +0800 Subject: [PATCH 066/270] =?UTF-8?q?feat(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E6=88=91=E7=9A=84=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/controller/PmsDashboardController.java | 4 +--- .../dashboard/domain/vo/MyProjectIssuesSearchVo.java | 3 +++ .../pms/project/service/PmsProjectIssuesService.java | 11 +++++++++++ .../microservices/pms/utils/PmsGitLinkRequestUrl.java | 5 +++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 38debc5d0..6deb18dd6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -92,9 +92,7 @@ public class PmsDashboardController extends BaseController { return success(); } pmsProjectIssuesSearchVo.setPmProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); - // 不包含周报 - pmsProjectIssuesSearchVo.setPmIssueTypes("1,2,3"); - JSONObject result = pmsProjectIssuesService.selectPmsProjectIssuesList(pmsProjectIssuesSearchVo); + JSONObject result = pmsProjectIssuesService.selectMyPmsProjectIssuesList(pmsProjectIssuesSearchVo); return success(result); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java index 428ea9960..a512b4c3a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java @@ -32,4 +32,7 @@ public class MyProjectIssuesSearchVo { @ApiModelProperty(value = "按pmProjectId集合查询,逗号隔开", hidden = true) private String pmsProjectIds; + @ApiModelProperty(value = "工作项类型:计划1 任务2 缺陷3,多个用逗号隔开") + private String pmIssueTypes; + } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java index 1927c29f0..2cfd73b15 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java @@ -493,4 +493,15 @@ public class PmsProjectIssuesService { throw new ServiceException("导出工作项失败"); } } + + public JSONObject selectMyPmsProjectIssuesList(PmsProjectIssuesSearchVo pmsProjectIssuesSearchVo) { + pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesSearchVo.getPmProjectId()); + JSONObject issueSearch = new JSONObject(); + convertObjectToJSONObject(pmsProjectIssuesSearchVo, issueSearch, null); + try { + return setProjectIssueListUserState(gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_MY_ISSUE_LIST(issueSearch))); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index 6031771e2..3778ef410 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -366,4 +366,9 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { public static GitLinkRequestUrl GET_REQ_SPECS_LINK_ISSUES(Long reqSpecsIssueId, Long projectId) { return getGitLinkRequestUrl(String.format("/api/pm/issues/%d/link_issues?pm_project_id=%d", reqSpecsIssueId, projectId)); } + + public static GitLinkRequestUrl GET_MY_ISSUE_LIST(JSONObject params) throws URISyntaxException { + return getGitLinkRequestUrl( + buildUri("/api/pm/dashboards/my_issues", params)); + } } From 8ae43e5dc2eede04f0ce3eab66d2735b3ba06f12 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 11 Dec 2024 14:45:11 +0800 Subject: [PATCH 067/270] =?UTF-8?q?feat(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E6=88=91=E7=9A=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E3=80=81=E6=88=91=E7=9A=84=E4=BB=93=E5=BA=93=E3=80=81=E6=88=91?= =?UTF-8?q?=E7=9A=84=E5=BE=85=E5=8A=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsDashboardController.java | 51 ++++++++++++++----- .../domain/vo/MyProjectIssuesSearchVo.java | 8 +-- .../vo/MyTodoProjectIssuesSearchVo.java | 35 +++++++++++++ .../vo/PmsProjectSprintStatisticsVo.java | 17 +++++++ .../mapper/PmsProjectSprintMapper.java | 3 ++ .../project/service/IPmsProjectService.java | 6 +++ .../service/PmsProjectIssuesService.java | 18 +++++-- .../service/impl/PmsProjectServiceImpl.java | 25 +++++++++ .../pms/utils/PmsGitLinkRequestUrl.java | 15 ++++++ .../mapper/pms/PmsProjectSprintMapper.xml | 24 +++++++++ 10 files changed, 183 insertions(+), 19 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyTodoProjectIssuesSearchVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintStatisticsVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 6deb18dd6..7265ac8a0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -9,6 +9,7 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.dashboard.domain.vo.MyDashboardVo; import com.microservices.pms.dashboard.domain.vo.MyProjectIssuesSearchVo; +import com.microservices.pms.dashboard.domain.vo.MyTodoProjectIssuesSearchVo; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.PmsProductSearchVo; @@ -19,15 +20,9 @@ import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.service.IPmsProjectService; import com.microservices.pms.project.service.IPmsProjectSprintService; import com.microservices.pms.project.service.PmsProjectIssuesService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; @@ -85,14 +80,13 @@ public class PmsDashboardController extends BaseController { @GetMapping("/myProjectIssues") @ApiOperation(value = "我的工作项") public AjaxResult myProjectIssues(MyProjectIssuesSearchVo myProjectIssuesSearchVo) { - PmsProjectIssuesSearchVo pmsProjectIssuesSearchVo = new PmsProjectIssuesSearchVo(); - BeanUtils.copyProperties(myProjectIssuesSearchVo, pmsProjectIssuesSearchVo); + List projectList = pmsProjectService.selectPmsProjectList(new PmsProject()); if(projectList.isEmpty()){ return success(); } - pmsProjectIssuesSearchVo.setPmProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); - JSONObject result = pmsProjectIssuesService.selectMyPmsProjectIssuesList(pmsProjectIssuesSearchVo); + myProjectIssuesSearchVo.setPmProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); + JSONObject result = pmsProjectIssuesService.selectMyPmsProjectIssuesList(myProjectIssuesSearchVo); return success(result); } @@ -106,6 +100,24 @@ public class PmsDashboardController extends BaseController { return pmsProjectService.selectPmsProjectList(pmsProjectSearchVo); } + /** + * 我的项目-项目情况统计 + */ + @ApiOperation(value = "我的项目-项目统计") + @GetMapping("/myProjects/statistics") + public AjaxResult myProjectStatistics(@ApiParam("项目id") @RequestParam Long pmProjectId) { + return success(pmsProjectService.getMyProjectStatistics(pmProjectId)); + } + + /** + * 我的仓库-仓库情况统计 + */ + @ApiOperation(value = "我的仓库-仓库情况统计") + @GetMapping("/myRepositories/statistics") + public AjaxResult myRepositoriesStatistics(@ApiParam("仓库id") @RequestParam Long repositoryId) { + return success(pmsProjectService.getMyRepositoriesStatistics(repositoryId)); + } + /** * 我的迭代 @@ -126,4 +138,19 @@ public class PmsDashboardController extends BaseController { pmsProjectSprintSearchVo.setPmsProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); return pmsProjectSprintService.selectAllPmsProjectSprintList(pmsProjectSprintSearchVo); } + + /** + * 我的待办 + */ + @GetMapping("/todo") + @ApiOperation(value = "我的待办") + public AjaxResult todoProjectIssues(MyTodoProjectIssuesSearchVo todoProjectIssuesSearchVo) { + List projectList = pmsProjectService.selectPmsProjectList(new PmsProject()); + if(projectList.isEmpty()){ + return success(); + } + todoProjectIssuesSearchVo.setPmProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); + JSONObject result = pmsProjectIssuesService.selectMyTodoPmsProjectIssuesList(todoProjectIssuesSearchVo); + return success(result); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java index a512b4c3a..5aed079cb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyProjectIssuesSearchVo.java @@ -8,10 +8,10 @@ import lombok.Data; @ApiModel("我的工作项搜索对象") public class MyProjectIssuesSearchVo { - @ApiModelProperty(value = "疑修类型,all 全部 opened 开启中 closed 已关闭", required = true) + @ApiModelProperty(value = "疑修类型,all 全部 opened 开启中 closed 已关闭") private String category; - @ApiModelProperty(value = "参与类型,all 全部 aboutme 关于我的 authoredme 我创建的 assignedme 我负责的 atme @我的", required = true) + @ApiModelProperty(value = "参与类型,all 全部 aboutme 关于我的 authoredme 我创建的 assignedme 我负责的 atme @我的") private String participantCategory; @ApiModelProperty(value = "工作项名称搜索关键词") @@ -30,9 +30,9 @@ public class MyProjectIssuesSearchVo { private String limit; @ApiModelProperty(value = "按pmProjectId集合查询,逗号隔开", hidden = true) - private String pmsProjectIds; + private String pmProjectIds; - @ApiModelProperty(value = "工作项类型:计划1 任务2 缺陷3,多个用逗号隔开") + @ApiModelProperty(value = "工作项类型:计划1 任务2 缺陷3,多个用逗号隔开", required = true) private String pmIssueTypes; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyTodoProjectIssuesSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyTodoProjectIssuesSearchVo.java new file mode 100644 index 000000000..190246cfe --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyTodoProjectIssuesSearchVo.java @@ -0,0 +1,35 @@ +package com.microservices.pms.dashboard.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("我的待办工作项搜索对象") +public class MyTodoProjectIssuesSearchVo { + + @ApiModelProperty(value = "日期,格式:yyyy-MM-dd,示例值:2024-12-11") + private String date; + + @ApiModelProperty(value = "工作项名称搜索关键词") + private String keyword; + + @ApiModelProperty(value = "排序方式: issues.updated_on 更新时间 issues.created_on 创建时间 issue_priorities.position 优先级") + private String sortBy; + + @ApiModelProperty(value = "排序方向:asc 正序 desc 倒序") + private String sortDirection; + + @ApiModelProperty(value = "页码", required = true) + private String page; + + @ApiModelProperty(value = "分页数", required = true) + private String limit; + + @ApiModelProperty(value = "按pmProjectId集合查询,逗号隔开", hidden = true) + private String pmProjectIds; + + @ApiModelProperty(value = "工作项类型:计划1 任务2 缺陷3,多个用逗号隔开") + private String pmIssueTypes; + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintStatisticsVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintStatisticsVo.java new file mode 100644 index 000000000..c392b8449 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintStatisticsVo.java @@ -0,0 +1,17 @@ +package com.microservices.pms.project.domain.vo; + +import lombok.Data; + +@Data +public class PmsProjectSprintStatisticsVo { + + // 总数 + private Integer all_sprint_count; + // 待开始 + private Integer todo_sprint_count; + // 进行中 + private Integer doing_sprint_count; + // 已关闭 + private Integer closed_sprint_count; + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java index 9c4210ffb..c4ffc5623 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectSprintMapper.java @@ -2,6 +2,7 @@ package com.microservices.pms.project.mapper; import com.microservices.pms.project.domain.PmsProjectSprint; import com.microservices.pms.project.domain.vo.PmsProjectSprintSearchVo; +import com.microservices.pms.project.domain.vo.PmsProjectSprintStatisticsVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -77,4 +78,6 @@ public interface PmsProjectSprintMapper Integer selectOpeningSprintCount(@Param("pmProjectId") Long pmProjectId); Integer selectOpeningSprintLastWeekIterationCount(@Param("pmProjectId") Long pmProjectId); + + PmsProjectSprintStatisticsVo selectPmsProjectSprintStatisticsByProjectId(@Param("pmProjectId") Long pmProjectId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java index dbf9703df..ccdd78767 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java @@ -92,4 +92,10 @@ public interface IPmsProjectService * @param productId 产品Id */ void clearPmsProjectAndProductAssociations(Long productId); + + JSONObject getPmsProjectDynamics(Long pmProjectId); + + JSONObject getMyProjectStatistics(Long pmProjectId); + + JSONObject getMyRepositoriesStatistics(Long repositoryId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java index 2cfd73b15..73024e219 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java @@ -7,6 +7,8 @@ import com.microservices.common.core.utils.DateUtils; import com.microservices.common.httpClient.util.GitLinkRequestHelper; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; +import com.microservices.pms.dashboard.domain.vo.MyProjectIssuesSearchVo; +import com.microservices.pms.dashboard.domain.vo.MyTodoProjectIssuesSearchVo; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.project.domain.PmsProject; @@ -494,14 +496,24 @@ public class PmsProjectIssuesService { } } - public JSONObject selectMyPmsProjectIssuesList(PmsProjectIssuesSearchVo pmsProjectIssuesSearchVo) { - pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesSearchVo.getPmProjectId()); + public JSONObject selectMyPmsProjectIssuesList(MyProjectIssuesSearchVo myProjectIssuesSearchVo) { + JSONObject issueSearch = new JSONObject(); - convertObjectToJSONObject(pmsProjectIssuesSearchVo, issueSearch, null); + convertObjectToJSONObject(myProjectIssuesSearchVo, issueSearch, null); try { return setProjectIssueListUserState(gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_MY_ISSUE_LIST(issueSearch))); } catch (URISyntaxException e) { throw new RuntimeException(e); } } + + public JSONObject selectMyTodoPmsProjectIssuesList(MyTodoProjectIssuesSearchVo todoProjectIssuesSearchVo) { + JSONObject issueSearch = new JSONObject(); + convertObjectToJSONObject(todoProjectIssuesSearchVo, issueSearch, null); + try { + return setProjectIssueListUserState(gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_MY_TODO_ISSUE_LIST(issueSearch))); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index 8ff606055..3715af59b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -148,6 +148,31 @@ public class PmsProjectServiceImpl implements IPmsProjectService return toPage(pmsProjectList, pmsProject -> buildPmsProjectDetailVo(pmsProject, finalProjectTotalCount)); } + @Override + public JSONObject getMyProjectStatistics(Long pmProjectId) { + selectAndCheckPmsProjectById(pmProjectId); + JSONObject result = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_MY_PROJECT_STATISTICS(pmProjectId)); + JSONObject data = result.getJSONObject(DATA_KEY); + if (data != null) { + fillSprintStatisticsData(pmProjectId, data); + } + return data; + } + + @Override + public JSONObject getMyRepositoriesStatistics(Long repositoryId) { + + return gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_MY_REPOSITORY_STATISTICS(repositoryId)); + } + + private void fillSprintStatisticsData(Long pmProjectId, JSONObject data) { + PmsProjectSprintStatisticsVo pmsProjectSprintStatisticsVo = pmsProjectSprintMapper.selectPmsProjectSprintStatisticsByProjectId(pmProjectId); + data.put("all_sprint_count", pmsProjectSprintStatisticsVo.getAll_sprint_count()); + data.put("todo_sprint_count", pmsProjectSprintStatisticsVo.getTodo_sprint_count()); + data.put("doing_sprint_count", pmsProjectSprintStatisticsVo.getDoing_sprint_count()); + data.put("closed_sprint_count", pmsProjectSprintStatisticsVo.getClosed_sprint_count()); + } + private PmsProjectDetailVo buildPmsProjectDetailVo(PmsProject pmsProject, JSONObject projectTotalCount) { PmsProjectDetailVo pmsProjectDetailVo = new PmsProjectDetailVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index 3778ef410..14c805ba6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -371,4 +371,19 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { return getGitLinkRequestUrl( buildUri("/api/pm/dashboards/my_issues", params)); } + + public static GitLinkRequestUrl GET_MY_TODO_ISSUE_LIST(JSONObject params) throws URISyntaxException { + return getGitLinkRequestUrl( + buildUri("/api/pm/dashboards/todo", params)); + } + + public static GitLinkRequestUrl GET_MY_PROJECT_STATISTICS(Long pmProjectId){ + return getGitLinkRequestUrl( + String.format("/api/pm/dashboards/my_pm_projects?pm_project_id=%d", pmProjectId)); + } + + public static GitLinkRequestUrl GET_MY_REPOSITORY_STATISTICS(Long repositoryId) { + return getGitLinkRequestUrl( + String.format("/api/pm/dashboards/my_projects?project_id=%d", repositoryId)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml index 58d09ba99..3cd922737 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml @@ -197,4 +197,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and status IN ('0', '1') and start_time >= DATE_SUB(NOW(), INTERVAL 1 WEEK) + \ No newline at end of file From be55a0d4e5de99b493c3c50e28ab993672a03079 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 14:45:35 +0800 Subject: [PATCH 068/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E9=9C=80=E8=A7=84=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E8=AE=A1=E5=88=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化Forge异常时错误提示 Signed-off-by: OTTO <731554297@qq.com> --- .../common/httpClient/service/HttpAPIService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java index 607bc6887..53fd61202 100644 --- a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java +++ b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.Constants; import com.microservices.common.core.constant.HttpStatus; +import com.microservices.common.core.exception.ServiceException; import com.microservices.common.httpClient.domain.CustomHttpDelete; import com.microservices.system.api.domain.SysFileBytes; import org.apache.commons.collections4.MapUtils; @@ -281,6 +282,9 @@ public class HttpAPIService { long length = httpEntity.getContentLength(); if (length != 0L) { String result = EntityUtils.toString(httpEntity); + if (!JSON.isValid(result)) { + throw new ServiceException("平台接口响应格式异常"); + } Object resultObj = JSON.parse(result); if (resultObj instanceof JSONArray) { JSONObject jsonObject = new JSONObject(); From 7efd45c462dd2ca488d33367d01428cc2f4b0f33 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 15:20:05 +0800 Subject: [PATCH 069/270] =?UTF-8?q?fix(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复需规拒绝变更时操作记录异常的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../product/service/impl/PmsProductRequirementServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 95396163a..814bbf8ac 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -359,7 +359,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 原需规记录评审意见 PmsProductReqOperationRecord oldReqSpecsRecord = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername()); - oldReqSpecsRecord.setId(fromReqSpecs.getId()); + oldReqSpecsRecord.setProductRequirementId(fromReqSpecs.getId()); pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(oldReqSpecsRecord); } else { reqSpecs.setStatus(ProductReqStatus.REJECTED_REQ_SPECS.getKey()); From fe8ce596291a8bdd3708ffb1cfd296ac44dcba39 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 15:22:38 +0800 Subject: [PATCH 070/270] =?UTF-8?q?fix(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需规操作记录应该根据创建时间排序 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/pms/PmsProductReqOperationRecordMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml index 991a38563..0b9b5ae6a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -57,7 +57,7 @@ and reserved_field_2 = #{reservedField2} and reserved_field_3 = #{reservedField3} and reserved_field_4 = #{reservedField4} - order by operating_time desc + order by create_time desc @@ -71,7 +71,7 @@ where type = 'reviewUserReq' and product_requirement_id=#{reqId} - order by operating_time desc + order by create_time desc limit 1 where type = 'reviewReqSpecs' and product_requirement_id=#{reqId} - order by operating_time desc + order by create_time desc limit 1 From 3f9fd173c679c5f2fc6d3306ee1e65d1122118a8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 15:31:19 +0800 Subject: [PATCH 071/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户和需规评审时将评审时间记录到操作内容中(Content),防止用户填写了一个过早的时间导致操作记录列表混乱 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/enums/ProductReqOperationType.java | 2 +- .../microservices/pms/product/domain/vo/ProductReqReviewVo.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index f77e5a620..5786e130d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -32,7 +32,7 @@ public enum ProductReqOperationType { throw new ServiceException("需求操作记录类型错误"); } SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String operationTimeStr = formatter.format(record.getOperatingTime()); + String operationTimeStr = formatter.format(record.getCreateTime()); switch (type) { case CONTENT_MODIFY: return String.format("%s,由【%s】%s", diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 485eeee3a..47ca3856f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -64,6 +64,7 @@ public class ProductReqReviewVo { JSONObject contentJson = new JSONObject(); contentJson.put("reviewUser", reviewUser); contentJson.put("reviewContent", reviewContent); + contentJson.put("reviewTime", reviewTime); record.setContent(contentJson.toJSONString()); return record; } From 87de8b7f90407462af3dfc32c2ed13564b3dce85 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 15:37:28 +0800 Subject: [PATCH 072/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 查询用户需求和需规评审人以及评审时间时应查询最新一条已通过评审的记录 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/pms/PmsProductReqOperationRecordMapper.xml | 4 ++-- .../main/resources/mapper/pms/PmsProductRequirementMapper.xml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml index 0b9b5ae6a..2a8a99d3e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductReqOperationRecordMapper.xml @@ -69,7 +69,7 @@ - where type = 'reviewReqSpecs' + where type = 'reviewReqSpecs' and operation = 'pass' and product_requirement_id=#{reqId} order by create_time desc limit 1 diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index d911cef96..617cdf7cd 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -99,9 +99,10 @@ record.review_time, record.content as review_content from pms_product_requirement as ppr - left join (select product_requirement_id, MAX(operating_time) as review_time, content + left join (select product_requirement_id, MAX(create_time) as review_time, content from pms_product_req_operation_record where type = 'reviewUserReq' + and operation = 'pass' group by product_requirement_id, content) as record on record.product_requirement_id = ppr.id From 421b0f7e40a55c0a72476d491c0d817cbf624aad Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 11 Dec 2024 15:44:45 +0800 Subject: [PATCH 073/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E6=A6=82?= =?UTF-8?q?=E8=A7=88):=E5=8A=A8=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/project/controller/PmsProjectController.java | 10 ++++++++++ .../project/service/impl/PmsProjectServiceImpl.java | 8 ++++++++ .../microservices/pms/utils/PmsGitLinkRequestUrl.java | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectController.java index 786970e3f..5c49d7d94 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectController.java @@ -165,4 +165,14 @@ public class PmsProjectController extends BaseController return success(pmsProjectService.getPmsProjectPolyline(pmProjectId)); } + /** + * 获取项目概览-动态 + */ + @RequiresPermissions(value = {"pms:pmsProject:show", "pms:pmsProject:showMe"}, logical = Logical.OR) + @GetMapping(value = "/statistics/dynamics") + @ApiOperation(value = "项目概览-动态") + public AjaxResult getDynamics(@ApiParam("项目id") @RequestParam Long pmProjectId) { + return success(pmsProjectService.getPmsProjectDynamics(pmProjectId)); + } + } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index 3715af59b..ed1764326 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -455,6 +455,14 @@ public class PmsProjectServiceImpl implements IPmsProjectService } } + @Override + public JSONObject getPmsProjectDynamics(Long pmProjectId) { + // 校验数据权限 + selectAndCheckPmsProjectById(pmProjectId); + JSONObject result = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_OPERATE_JOURNALS(pmProjectId)); + //todo 获取项目其他模块操作记录,和项目动态合并,取top10 + return result.getJSONObject(DATA_KEY); + } @Override public JSONObject getPmsProjectStatistics(Long pmProjectId) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index 14c805ba6..d9b37d278 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -386,4 +386,9 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { return getGitLinkRequestUrl( String.format("/api/pm/dashboards/my_projects?project_id=%d", repositoryId)); } + + public static GitLinkRequestUrl GET_OPERATE_JOURNALS(Long pmProjectId) { + return getGitLinkRequestUrl( + String.format("/api/pm/dashboards/my_operate_journals?pm_project_id=%d&page=1&limit=10", pmProjectId)); + } } From cd688269443fdd3980e663547251faf20987a1ca Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 11 Dec 2024 16:04:42 +0800 Subject: [PATCH 074/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需规变更评审通过时应取消项目计划不允许修改的限制条件 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 1 + .../pms/project/domain/vo/PmsProjectIssuesInputVo.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 814bbf8ac..28f729fe6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -335,6 +335,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS issue.setDescription(reqSpecs.getContent()); issue.setAttachmentIds(forgeFileIdentifierList); issue.setPmProjectId(fromReqSpecs.getPmsProjectId()); + issue.setIsProductReqSpecsChange(true); pmsProjectIssuesService.updatePmsProjectIssues(fromReqSpecs.getProjectReqId(), issue); } // 变更中的需求规格通过评审后设置状态为原需规状态 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java index e77fa6172..4095d75c7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectIssuesInputVo.java @@ -73,7 +73,13 @@ public class PmsProjectIssuesInputVo { @ApiModelProperty(value = "关联工作项id") private Long linkAbleId; + @ApiModelProperty(value = "是否为需规调整", hidden = true) + private Boolean isProductReqSpecsChange = false; + public boolean isChangeContent(JSONObject issueJson) { + if (isProductReqSpecsChange) { + return false; + } if (StringUtils.isNotEmpty(subject) && !issueJson.getString("subject").equals(subject)) { return true; } From ee9fbf2328bc126f198d6ddd4996cdde885c6094 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 11 Dec 2024 16:10:44 +0800 Subject: [PATCH 075/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E6=A6=82?= =?UTF-8?q?=E8=A7=88):=E9=A1=B9=E7=9B=AE=E6=80=BB=E8=A7=88-=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E4=B8=AD=E7=9A=84=E8=BF=AD=E4=BB=A3=E6=95=B0=E5=92=8C?= =?UTF-8?q?=E8=BF=91=E4=B8=80=E5=91=A8=E6=96=B0=E5=A2=9E=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/project/service/impl/PmsProjectServiceImpl.java | 8 ++++++-- .../main/resources/mapper/pms/PmsProjectSprintMapper.xml | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index ed1764326..d4a96f4d1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -474,12 +474,16 @@ public class PmsProjectServiceImpl implements IPmsProjectService // 获取 open_data 对象 JSONObject openData = dataObj.getJSONObject("open_data"); Integer openSprintCount = pmsProjectSprintMapper.selectOpeningSprintCount(pmProjectId); - Integer openLastWeekIterationCount = pmsProjectSprintMapper.selectOpeningSprintLastWeekIterationCount(pmProjectId); // 添加新的键值对 openData.put("0", openSprintCount); // 新增开启中的迭代 - openData.put("0_lastWeekIteration", openLastWeekIterationCount); //近一周新增 dataObj.put("open_data", openData); } + if (dataObj.containsKey("last_week_close_data")) { + JSONObject lastWeekCloseData = dataObj.getJSONObject("last_week_close_data"); + Integer openLastWeekIterationCount = pmsProjectSprintMapper.selectOpeningSprintLastWeekIterationCount(pmProjectId); + lastWeekCloseData.put("0", openLastWeekIterationCount); //近一周新增 + dataObj.put("last_week_close_data", lastWeekCloseData); + } return dataObj; } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml index 3cd922737..cc528b3bd 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectSprintMapper.xml @@ -187,13 +187,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" From dd05fb00cff9920453c0d83f452261f4147f7300 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 11 Dec 2024 16:22:20 +0800 Subject: [PATCH 076/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E6=A6=82?= =?UTF-8?q?=E8=A7=88):=E8=BF=AD=E4=BB=A3=E5=85=B3=E8=81=94=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=8D=95=E6=95=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/project/domain/vo/PmsProjectSprintDetailVo.java | 2 +- .../pms/project/service/impl/PmsProjectSprintServiceImpl.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java index 05f692de2..34b7f2586 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectSprintDetailVo.java @@ -34,7 +34,7 @@ public class PmsProjectSprintDetailVo { private Long timeScale; @ApiModelProperty(value = "关联测试用例数") - private Integer linkedTestCaseCount; + private Integer linkedTestsheetCount; @ApiModelProperty(value = "状态 0待开始 1进行中 2已关闭") private String status; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java index 4b3aae5ba..30fdf5fdd 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectSprintServiceImpl.java @@ -11,7 +11,6 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.project.domain.PmsProjectSprint; import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.mapper.PmsProjectSprintMapper; -import com.microservices.pms.project.mapper.PmsProjectTestcaseMapper; import com.microservices.pms.project.mapper.PmsProjectTestsheetMapper; import com.microservices.pms.project.service.IPmsProjectService; import com.microservices.pms.project.service.IPmsProjectSprintService; @@ -143,7 +142,7 @@ public class PmsProjectSprintServiceImpl implements IPmsProjectSprintService BeanUtils.copyProperties(pmsProjectSprint, pmsProjectSprintDetailVo); pmsProjectSprintDetailVo.setSprintAssignee(pmsCommonService.getSimpleSysUserByGitlinkUserId(pmsProjectSprint.getSprintAssigneeId())); pmsProjectSprintDetailVo.setSprintIssuesStatistics(sprintIssuesStatistics.getJSONObject(String.valueOf(pmsProjectSprint.getId()))); - pmsProjectSprintDetailVo.setLinkedTestCaseCount(pmsProjectTestsheetMapper.selectCountBySprintId(pmsProjectSprint.getId())); + pmsProjectSprintDetailVo.setLinkedTestsheetCount(pmsProjectTestsheetMapper.selectCountBySprintId(pmsProjectSprint.getId())); return pmsProjectSprintDetailVo; } From ffc71ba7b635bf5ee8b6682aa18284d220ddd5ce Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Wed, 11 Dec 2024 16:35:34 +0800 Subject: [PATCH 077/270] =?UTF-8?q?feat(=E5=B7=A5=E4=BD=9C=E5=8F=B0?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1):=20=E6=88=91=E7=9A=84=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E3=80=81=E6=88=91=E7=9A=84=E4=BA=A7=E5=93=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsDashboardController.java | 153 +++++++++++++++++- .../product/domain/vo/PmsProductStatVo.java | 18 +++ .../domain/vo/PmsRequirementStatResVo.java | 15 ++ .../product/domain/vo/ReqStatusStatVo.java | 15 ++ .../product/mapper/PmsProductPlanMapper.java | 9 ++ .../mapper/PmsProductRequirementMapper.java | 6 + .../service/IPmsProductPlanService.java | 10 ++ .../IPmsProductRequirementService.java | 9 ++ .../impl/PmsProductPlanServiceImpl.java | 8 + .../PmsProductRequirementServiceImpl.java | 26 ++- .../mapper/pms/PmsProductPlanMapper.xml | 10 ++ .../pms/PmsProductRequirementMapper.xml | 17 ++ 12 files changed, 293 insertions(+), 3 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 38debc5d0..455305287 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -1,6 +1,7 @@ package com.microservices.pms.dashboard.controller; import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.domain.R; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.common.core.web.controller.BaseController; @@ -11,9 +12,13 @@ import com.microservices.pms.dashboard.domain.vo.MyDashboardVo; import com.microservices.pms.dashboard.domain.vo.MyProjectIssuesSearchVo; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.domain.PmsProductRequirement; -import com.microservices.pms.product.domain.vo.PmsProductSearchVo; +import com.microservices.pms.product.domain.PmsProductStatus; +import com.microservices.pms.product.domain.enums.ProductReqStatus; +import com.microservices.pms.product.domain.vo.*; +import com.microservices.pms.product.service.IPmsProductPlanService; import com.microservices.pms.product.service.IPmsProductRequirementService; import com.microservices.pms.product.service.IPmsProductService; +import com.microservices.pms.product.service.IPmsProductStatusService; import com.microservices.pms.project.domain.PmsProject; import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.service.IPmsProjectService; @@ -24,13 +29,16 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; @RestController @RequestMapping("/{enterpriseIdentifier}/dashboard") @@ -53,6 +61,12 @@ public class PmsDashboardController extends BaseController { @Autowired private IPmsProductService pmsProductService; + @Autowired + private IPmsProductPlanService pmsProductPlanService; + + @Autowired + private IPmsProductStatusService pmsProductStatusService; + /** * 我的工作台统计信息 @@ -128,4 +142,141 @@ public class PmsDashboardController extends BaseController { pmsProjectSprintSearchVo.setPmsProjectIds(StringUtils.join(projectList.stream().map(PmsProject::getId).toArray(), ",")); return pmsProjectSprintService.selectAllPmsProjectSprintList(pmsProjectSprintSearchVo); } + + /** + * 我的产品 + */ + @ApiOperation(value = "我的产品") + @GetMapping("/myProduct") + public GenericsTableDataInfo myProduct(@PathVariable String enterpriseIdentifier, + @Validated PmsProductSearchVo pmsProductSearchVo) { + startPage(); + pmsProductSearchVo.setPmsEnterpriseIdentifier(enterpriseIdentifier); + //获取组织下所有的产品信息 + GenericsTableDataInfo productsInfo = pmsProductService.selectPmsProductPageList(pmsProductSearchVo); + List rows = productsInfo.getRows(); + + // 统计需求数量 + List statVos = rows.stream().map(e -> { + PmsProductStatVo statVo = new PmsProductStatVo(); + String pmsProductIdentifier = e.getProductIdentifier(); + Integer requirementCount = pmsProductRequirementService.countByIdentifierAndStatus(pmsProductIdentifier, getUserReqList()); + Integer reqSpecsCount = pmsProductRequirementService.countByIdentifierAndStatus(pmsProductIdentifier, getReqSpecsList()); + BeanUtils.copyProperties(e, statVo); + statVo.setReqSpecsCount(reqSpecsCount); + statVo.setUserReqCount(requirementCount); + return statVo; + }).collect(Collectors.toList()); + + GenericsTableDataInfo result = new GenericsTableDataInfo<>(); + result.setRows(statVos); + result.setTotal(productsInfo.getTotal()); + return result; + } + + @ApiOperation(value = "我的产品数据统计-用户需求统计") + @ApiImplicitParam(name = "productIdentifier", value = "产品标识", paramType = "query", dataType = "String") + @GetMapping("/userRequirementStat") + public R UserRequirementStat(String productIdentifier){ + PmsRequirementStatResVo pmsRequirementStatResVo = buildPmsRequirementStatResVo( + productIdentifier, + getUserReqList(), + ProductReqStatus.REVIEWED_USER_REQ); + + return R.ok(pmsRequirementStatResVo); + } + + + @ApiOperation(value = "我的产品数据统计-需求规格统计") + @ApiImplicitParam(name = "productIdentifier", value = "产品标识", paramType = "query", dataType = "String") + @GetMapping("/productRequirementSpecsStat") + public R ProductRequirementSpecsStat(String productIdentifier){ + PmsRequirementStatResVo pmsRequirementStatResVo = buildPmsRequirementStatResVo( + productIdentifier, + getReqSpecsList(), + ProductReqStatus.REVIEWED_REQ_SPECS); + + return R.ok(pmsRequirementStatResVo); + } + + @ApiOperation(value = "我的产品数据统计-里程碑状态分布统计") + @ApiImplicitParam(name = "productIdentifier", value = "产品标识", paramType = "query", dataType = "String") + @GetMapping("/milestoneStatusStat") + public R milestoneStatusStat(String productIdentifier){ + Map status2NumMap = pmsProductPlanService.countPmsProductPlanGroupByStatus(productIdentifier) + .stream().collect(Collectors.toMap(EnumCommonVo::getKey, ReqStatusStatVo::getNum)); + PmsProductStatus pmsProductStatus = new PmsProductStatus(); + pmsProductStatus.setType(1); + List pmsTypeDataVos = pmsProductStatusService.selectPmsProductStatusList(pmsProductStatus); + List statusStatVos = pmsTypeDataVos.stream().map(e -> { + ReqStatusStatVo vo = new ReqStatusStatVo(); + vo.setKey(String.valueOf(e.getId())); + vo.setNum(status2NumMap.getOrDefault(String.valueOf(e.getId()), 0)); + vo.setName(e.getName()); + return vo; + }).collect(Collectors.toList()); + PmsRequirementStatResVo resVo = new PmsRequirementStatResVo(); + resVo.setPmsProductStatVos(statusStatVos); + resVo.setRatio(0); + return R.ok(resVo); + } + + + /** + * 获取 需求规格状态list + * @return 需求规格状态list + */ + private List getReqSpecsList() { + return Stream.of(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey(), + ProductReqStatus.PLANNED_REQ_SPECS.getKey(), + ProductReqStatus.REJECTED_CHANGE_REQ_SPECS.getKey(), + ProductReqStatus.REVIEWED_REQ_SPECS.getKey(), + ProductReqStatus.COMPLETED_REQ_SPECS.getKey(), + ProductReqStatus.CHANGED_REQ_SPECS.getKey()) + .collect(Collectors.toList()); + } + + /** + * 获取 用户需求状态list + * @return 用户需求状态list + */ + private List getUserReqList() { + return Stream.of(ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey(), + ProductReqStatus.REJECTED_USER_REQ.getKey(), + ProductReqStatus.REVIEWED_USER_REQ.getKey()) + .collect(Collectors.toList()); + } + + /** + * 拼接统计返回结果 + * @param productIdentifier 产品标识 + * @param statusList 状态列表 + * @param productReqStatus x + * @return + */ + private PmsRequirementStatResVo buildPmsRequirementStatResVo(String productIdentifier,List statusList, ProductReqStatus productReqStatus) { + Map status2NumMap = pmsProductRequirementService + .selectReqCountGroupByStatus(productIdentifier, statusList) + .stream().collect(Collectors.toMap(EnumCommonVo::getKey, ReqStatusStatVo::getNum)); + + //组装各个状态的数量 + List statusStatVos = statusList.stream().map(e -> { + ReqStatusStatVo vo = new ReqStatusStatVo(); + vo.setKey(e); + vo.setNum(status2NumMap.getOrDefault(e, 0)); + vo.setName(ProductReqStatus.getByKey(e).getName()); + return vo; + }).collect(Collectors.toList()); + + PmsRequirementStatResVo resVo = new PmsRequirementStatResVo(); + resVo.setPmsProductStatVos(statusStatVos); + resVo.setRatio(0); + //计算 各自的比率 + int sum = statusStatVos.stream().mapToInt(ReqStatusStatVo::getNum).sum(); + if (sum > 0){ + Integer reviewedUserReqCount = status2NumMap.getOrDefault(productReqStatus.getName(), 0); + resVo.setRatio(reviewedUserReqCount/sum * 100); + } + return resVo; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java new file mode 100644 index 000000000..b551de243 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java @@ -0,0 +1,18 @@ +package com.microservices.pms.product.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@ApiModel("我的产品统计对象") +public class PmsProductStatVo extends PmsProductDataVo{ + + @ApiModelProperty(value = "用户需求数量") + private Integer userReqCount; + + @ApiModelProperty(value = "规格需求数量") + private Integer ReqSpecsCount; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java new file mode 100644 index 000000000..16ac4b544 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java @@ -0,0 +1,15 @@ +package com.microservices.pms.product.domain.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class PmsRequirementStatResVo { + @ApiModelProperty(value = "数据统计列表") + private List pmsProductStatVos; + + @ApiModelProperty(value = "统计的比率") + private Integer ratio; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java new file mode 100644 index 000000000..2ab6bf0eb --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java @@ -0,0 +1,15 @@ +package com.microservices.pms.product.domain.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * @author OTTO + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +public class ReqStatusStatVo extends EnumCommonVo { + private Integer num; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java index b9068ba7d..d129892e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java @@ -1,7 +1,9 @@ package com.microservices.pms.product.mapper; import com.microservices.pms.product.domain.PmsProductPlan; +import com.microservices.pms.product.domain.vo.ReqStatusStatVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; @@ -83,4 +85,11 @@ public interface PmsProductPlanMapper * @param productIdentifier 产品标识 */ void deletePmsProductPlanByProductIdentifier(String productIdentifier); + + /** + * 根据状态分组统计 + * @param productIdentifier 产品标识 + * @return 分组统计结果列表 + */ + List countPmsProductPlanGroupByStatus(@Param("productIdentifier") String productIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index 4e30160ae..3a06eab1f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -4,10 +4,12 @@ import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo; import com.microservices.pms.product.domain.vo.ProductReqSpecsSearchVo; import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo; +import com.microservices.pms.product.domain.vo.ReqStatusStatVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 产品需求Mapper接口 @@ -110,4 +112,8 @@ public interface PmsProductRequirementMapper List selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo); Integer selectReqSpecsCountByIdentifier(@Param("identifier") String identifier); + + Integer countByIdentifierAndStatus(@Param("pmsProductIdentifier") String pmsProductIdentifier, @Param("statusList") List statusList); + + List selectReqCountGroupByStatus(@Param("pmsProductIdentifier") String pmsProductIdentifier, @Param("statusList") List statusList); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java index c1e130868..f6aad6fcf 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java @@ -3,6 +3,9 @@ package com.microservices.pms.product.service; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductPlan; import com.microservices.pms.product.domain.vo.PmsProductPlanDataVo; +import com.microservices.pms.product.domain.vo.ReqStatusStatVo; + +import java.util.List; /** * 产品计划Service接口 @@ -89,4 +92,11 @@ public interface IPmsProductPlanService * @param productIdentifier 产品标识 */ void deletePmsProductPlanByProductIdentifier(String productIdentifier); + + /** + * 根据状态分组统计 + * @param productIdentifier 产品标识 + * @return 分组统计结果列表 + */ + List countPmsProductPlanGroupByStatus(String productIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index c92053682..cafa329db 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -125,4 +125,13 @@ public interface IPmsProductRequirementService List selectReqSpecsTypeList(); JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId); + + Integer countByIdentifierAndStatus(String pmsProductIdentifier, List statusList); + /** + * + * @param pmsProductIdentifier 项目标识 + * @param statusList 项目对应的类型 + * @return List + */ + List selectReqCountGroupByStatus(String pmsProductIdentifier, List statusList); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java index 3636e6ec7..ba5024e71 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java @@ -8,6 +8,7 @@ import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.domain.PmsProductPlan; import com.microservices.pms.product.domain.vo.PmsProductPlanDataVo; +import com.microservices.pms.product.domain.vo.ReqStatusStatVo; import com.microservices.pms.product.mapper.PmsProductPlanMapper; import com.microservices.pms.product.service.*; import com.microservices.pms.utils.PmsConstants; @@ -19,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.HashMap; +import java.util.List; /** * 产品计划Service业务层处理 @@ -236,4 +238,10 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { , pmsProductPlan.getPmsProductIdentifier())); return pmsProductPlanDataVo; } + + + @Override + public List countPmsProductPlanGroupByStatus(String productIdentifier) { + return pmsProductPlanMapper.countPmsProductPlanGroupByStatus(productIdentifier); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index c19bd9d74..37b08146f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -36,8 +36,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.regex.Pattern; import static com.microservices.common.core.utils.PageUtils.startPage; @@ -947,4 +946,27 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS throw new ServiceException("该模块不属于当前产品(模块名称[%s],产品名称[%s])", pmsProductModule.getModuleName(), pmsProduct.getProductName()); } } + + @Override + public Integer countByIdentifierAndStatus(String pmsProductIdentifier, List statusList) { + if (StringUtils.isEmpty(pmsProductIdentifier)) { + throw new ServiceException("产品标识不能为空"); + } + if (StringUtils.isEmpty(statusList)) { + return 0; + } + return pmsProductRequirementMapper.countByIdentifierAndStatus(pmsProductIdentifier, statusList); + } + + @Override + public List selectReqCountGroupByStatus(String pmsProductIdentifier, List statusList) { + if (StringUtils.isEmpty(pmsProductIdentifier)) { + throw new ServiceException("产品标识不能为空"); + } + + if (StringUtils.isEmpty(statusList)) { + return new ArrayList<>(); + } + return pmsProductRequirementMapper.selectReqCountGroupByStatus(pmsProductIdentifier, statusList); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductPlanMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductPlanMapper.xml index 16e948399..96d64f305 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductPlanMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductPlanMapper.xml @@ -161,4 +161,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" from pms_product_plan where pms_product_identifier = #{productIdentifier} + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 7afb4aad4..6f01550e0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -359,4 +359,21 @@ #{id} + + + + \ No newline at end of file From f93f802671633f0618c27f5d8507cc33ecbacae5 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 12 Dec 2024 09:10:58 +0800 Subject: [PATCH 078/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求规格纳入计划可选的项目 必须是关联了该产品的项目 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/bug/123983 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 11 +++++++++++ .../service/IPmsProductRequirementService.java | 3 +++ .../impl/PmsProductRequirementServiceImpl.java | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index e15776ed1..05887ff69 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -9,6 +9,7 @@ import com.microservices.common.log.enums.BusinessType; import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.product.domain.vo.*; import com.microservices.pms.product.service.IPmsProductRequirementService; +import com.microservices.pms.project.domain.PmsProject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -123,6 +124,16 @@ public class ProductReqSpecsController extends BaseController { return toAjax(pmsProductRequirementService.activePlan(productReqSpecsActivePlanVo)); } + /** + * 纳入计划时可选择项目列表 + */ + @ApiOperation(value = "纳入计划时可选择项目列表") + @RequiresPermissions("pms:pmsProduct:show") + @GetMapping("/{productIdentifier}/projectList") + public List projectList(@PathVariable("productIdentifier") String productIdentifier) { + return pmsProductRequirementService.selectReqSpecsProjectList(productIdentifier); + } + /** * 查询需求规格状态列表 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 4c5d17f7b..d2265cc79 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -5,6 +5,7 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.enums.ProductReqStatus; import com.microservices.pms.product.domain.vo.*; +import com.microservices.pms.project.domain.PmsProject; import java.util.List; @@ -128,4 +129,6 @@ public interface IPmsProductRequirementService JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId); void updateReqSpecsStatusByProjectReqId(Long projectReqId, ProductReqStatus productReqStatus); + + List selectReqSpecsProjectList(String productIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 28f729fe6..033de6b46 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -539,7 +539,11 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (!ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { throw new ServiceException("仅已评审状态的需求规格才能纳入计划"); } - PmsProject project = pmsProjectService.selectAndCheckPmsProjectById(productReqSpecsActivePlanVo.getProjectId()); + List pmsProjectList = selectReqSpecsProjectList(reqSpecs.getPmsProductIdentifier()); + if (pmsProjectList == null + || pmsProjectList.stream().noneMatch(x -> x.getId().equals(productReqSpecsActivePlanVo.getProjectId()))) { + throw new ServiceException("需求规格纳入计划时请选择关联了当前产品的项目"); + } List forgeFileIdentifierList = null; if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { // 需求规格文件上传至forge @@ -550,7 +554,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProjectIssuesInputVo pmsProjectIssuesInputVo = productReqSpecsActivePlanVo.toPmsProjectIssuesInputVo(reqSpecs, forgeFileIdentifierList); JSONObject projectIssue = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); - reqSpecs.setPmsProjectId(project.getId()); + reqSpecs.setPmsProjectId(productReqSpecsActivePlanVo.getId()); reqSpecs.setProjectReqId(projectIssue.getLong("id")); reqSpecs.setStatus(ProductReqStatus.PLANNED_REQ_SPECS.getKey()); int success = updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier()); @@ -604,6 +608,14 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS updateRequirement(pmsProductRequirement, pmsProductRequirement.getPmsProductIdentifier()); } + @Override + public List selectReqSpecsProjectList(String productIdentifier) { + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productIdentifier); + PmsProject pmsProjectSearch = new PmsProject(); + pmsProjectSearch.setPmsProductId(pmsProduct.getId()); + return pmsProjectService.selectPmsProjectList(pmsProjectSearch); + } + private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) { ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null); ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo(); From e2a592a7993f3cce94574caf7dc83fa30de6a494 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 12 Dec 2024 09:43:29 +0800 Subject: [PATCH 079/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需规和用户需求标题长度最大调整为200 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/ProductReqSpecsChangeVo.java | 2 +- .../pms/product/domain/vo/ProductUserReqUpdateVo.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java index b008642a9..a693007ba 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -26,7 +26,7 @@ public class ProductReqSpecsChangeVo { private Long id; @ApiModelProperty(value = "标题") - @Size(max = 50, message = "长度需要小于50") + @Size(max = 200, message = "长度需要小于200") private String title; @ApiModelProperty(value = "正文") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java index a4bb4dce0..7b6006cd5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java @@ -31,7 +31,7 @@ public class ProductUserReqUpdateVo { * 标题 */ @ApiModelProperty(value = "标题") - @Size(max = 50, message = "长度需要小于50") + @Size(max = 200, message = "长度需要小于200") private String title; /** From 16c14e9c440f6247e601cb01cbceb31ee51a7cd8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 12 Dec 2024 10:25:52 +0800 Subject: [PATCH 080/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复:更新需求规格时,无法正确更新模块 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/bug/124019 Signed-off-by: OTTO <731554297@qq.com> --- .../product/domain/vo/ProductReqSpecsChangeVo.java | 7 +++++++ .../product/domain/vo/ProductReqSpecsUpdateVo.java | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java index a693007ba..3bfccf97a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.product.domain.vo; import com.microservices.common.core.utils.StringUtils; +import com.microservices.common.core.utils.bean.BeanUtils; import com.microservices.pms.product.domain.PmsProductReqOperationRecord; import com.microservices.pms.product.domain.PmsProductRequirement; import com.microservices.pms.product.domain.enums.ProductContentModifyOperation; @@ -56,4 +57,10 @@ public class ProductReqSpecsChangeVo { } return this.getFileIdentifiers() != null && !this.getFileIdentifiers().equals(oldPmsProductRequirement.getFileIdentifiers()); } + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = new PmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java index 0ffcc3461..de92f026b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java @@ -28,11 +28,6 @@ public class ProductReqSpecsUpdateVo extends ProductReqSpecsChangeVo { @ApiModelProperty(value = "关联产品计划ID") private Long pmsProductPlanId; - public PmsProductRequirement toPmsProductRequirement() { - PmsProductRequirement target = new PmsProductRequirement(); - BeanUtils.copyProperties(this, target); - return target; - } public PmsProductReqOperationRecord toPmsProductReqOperationRecord(PmsProductRequirement pmsProductRequirement) { PmsProductReqOperationRecord record = new PmsProductReqOperationRecord(); @@ -43,4 +38,10 @@ public class ProductReqSpecsUpdateVo extends ProductReqSpecsChangeVo { record.setOperatingTime(pmsProductRequirement.getUpdateTime()); return record; } + + public PmsProductRequirement toPmsProductRequirement() { + PmsProductRequirement target = super.toPmsProductRequirement(); + BeanUtils.copyProperties(this, target); + return target; + } } From 81234a1d232ff7d681e4cee6973c94dfc49047ad Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 12 Dec 2024 11:13:20 +0800 Subject: [PATCH 081/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复查看需规关联计划数据没有权限 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 033de6b46..c96bc8982 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -581,7 +581,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override public JSONObject selectReqSpecsAssociatedPlanData(Long reqSpecsId) { - PmsProductRequirement reqSpecs = selectPmsProductRequirementById(reqSpecsId, true); + PmsProductRequirement reqSpecs = selectPmsProductRequirementById(reqSpecsId, false); if (reqSpecs.getPmsProjectId() == null) { return null; } @@ -656,7 +656,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (record != null) { break; } - fromReq = fromReq.getFromId() != null ? selectPmsProductRequirementById(fromReq.getFromId(), true) : null; + fromReq = fromReq.getFromId() != null ? selectPmsProductRequirementById(fromReq.getFromId(), false) : null; } if (record != null) { productReqSpecsDetailVo.setReviewTime(record.getOperatingTime()); From 156a32c6acfc5a63ec98aedc9ddaeb642cefde98 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 12 Dec 2024 11:41:12 +0800 Subject: [PATCH 082/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 查看需规详情时通过非鉴权接口获取关联项目信息 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductRequirementServiceImpl.java | 2 +- .../pms/project/mapper/PmsProjectMapper.java | 2 ++ .../pms/project/service/IPmsProjectService.java | 4 +++- .../pms/project/service/impl/PmsProjectServiceImpl.java | 9 ++++++++- .../src/main/resources/mapper/pms/PmsProjectMapper.xml | 5 +++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index c96bc8982..448ab0677 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -624,7 +624,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS productReqSpecsDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers()) ); if (pmsProductRequirement.getPmsProjectId() != null) { - productReqSpecsDetailVo.setProject(pmsProjectService.selectAndCheckPmsProjectById(pmsProductRequirement.getPmsProjectId())); + productReqSpecsDetailVo.setProject(pmsProjectService.selectPmsProjectByIdNoCheckRole(pmsProductRequirement.getPmsProjectId())); if (pmsProductRequirement.getProjectReqId() != null) { productReqSpecsDetailVo.setProjectIssue( pmsProjectIssuesService.selectPmsProjectIssueById(pmsProductRequirement.getProjectReqId(), pmsProductRequirement.getPmsProjectId())); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectMapper.java index d94b89f8f..068b1c6df 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/mapper/PmsProjectMapper.java @@ -87,4 +87,6 @@ public interface PmsProjectMapper * @param projectIdList 项目Id列表 */ void updatePmsProjectNoProduct(@Param("projectIdList") List projectIdList); + + PmsProject selectPmsProjectById(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java index dbf9703df..252392b4b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/IPmsProjectService.java @@ -18,7 +18,7 @@ public interface IPmsProjectService { /** * 查询项目 - * + * * @param id 项目主键 * @return 项目 */ @@ -92,4 +92,6 @@ public interface IPmsProjectService * @param productId 产品Id */ void clearPmsProjectAndProductAssociations(Long productId); + + PmsProject selectPmsProjectByIdNoCheckRole(Long pmsProjectId); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index de1f13385..e942ec4b7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -100,7 +100,7 @@ public class PmsProjectServiceImpl implements IPmsProjectService /** * 查询项目 - * + * * @param id 项目主键 * @return 项目 */ @@ -361,6 +361,13 @@ public class PmsProjectServiceImpl implements IPmsProjectService return pmsProject; } + @Override + public PmsProject selectPmsProjectByIdNoCheckRole(Long pmsProjectId) { + PmsProject pmsProject = pmsProjectMapper.selectPmsProjectById(pmsProjectId); + pmsEnterpriseService.selectPmsEnterpriseById(pmsProject.getPmsEnterpriseId()); + return pmsProject; + } + @Override public PmsProject selectAndCheckPmsProjectById(String idStr) { if (StringUtils.isEmpty(idStr)) { diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectMapper.xml index f3381a768..853b22e3c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProjectMapper.xml @@ -103,6 +103,11 @@ + + From 9a4e79098c343e234967c0ed3ea71eadd0ca4d01 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 20 Dec 2024 11:53:01 +0800 Subject: [PATCH 114/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84?= =?UTF-8?q?):=20=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全部模块和无所属模块需求数量统计错误 Signed-off-by: OTTO <731554297@qq.com> --- .../dashboard/controller/PmsDashboardController.java | 8 ++------ .../product/mapper/PmsProductRequirementMapper.java | 3 +-- .../service/IPmsProductRequirementService.java | 2 +- .../service/impl/PmsProductModuleServiceImpl.java | 4 ++-- .../impl/PmsProductRequirementServiceImpl.java | 4 ++-- .../mapper/pms/PmsProductRequirementMapper.xml | 12 ++++++++---- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 9645e37b5..40a25a3e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -27,12 +27,8 @@ import com.microservices.pms.project.service.IPmsProjectSprintService; import com.microservices.pms.project.service.PmsProjectIssuesService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @@ -86,7 +82,7 @@ public class PmsDashboardController extends BaseController { PmsProductRequirement pmsProductRequirement = new PmsProductRequirement(); pmsProductRequirement.setProductIdentifierList(pmsProductList.stream().map(PmsProduct::getProductIdentifier).collect(Collectors.toList())); pmsProductRequirement.setCreateBy(SecurityUtils.getUsername()); - Integer requirementCount = pmsProductRequirementService.selectPmsProductRequirementCount(pmsProductRequirement); + Integer requirementCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirement); myDashboardVo.setProductRequirementCount(requirementCount); } return success(myDashboardVo); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index 13b332c64..e480e6a76 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -9,7 +9,6 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; -import java.util.Map; /** * 产品需求Mapper接口 @@ -74,7 +73,7 @@ public interface PmsProductRequirementMapper * @param pmsProductRequirementSearch * @return */ - Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirementSearch); + Integer selectProductReqSpecsCount(PmsProductRequirement pmsProductRequirementSearch); /** * 获取当前产品下需求的最大索引值 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 42093dc2b..15ad4c0d0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -55,7 +55,7 @@ public interface IPmsProductRequirementService * @param pmsProductRequirement 产品需求查询字段 * @return 数量 */ - Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirement); + Integer selectProductReqSpecsCount(PmsProductRequirement pmsProductRequirement); /** * 删除产品下所有需求 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 433757849..0a8a03eea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -286,11 +286,11 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService // 计算全部需求数量 PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); pmsProductRequirementSearch.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); - allNodeDataCount = pmsProductRequirementService.selectPmsProductRequirementCount(pmsProductRequirementSearch); + allNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); // 计算无所属模块的需求数量 pmsProductRequirementSearch.setPmsProductModuleId(0L); - noModuleNodeDataCount = pmsProductRequirementService.selectPmsProductRequirementCount(pmsProductRequirementSearch); + noModuleNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); } else if (type == PmsConstants.TESTSHEET_TAG_AND_MODULE_TYPE) { // 设置各节点数量为测试单执行用例数量 moduleList.forEach(x -> x.setNodeDataCount(x.getTestsheetCasesCount())); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 9050d67b2..3e718ca36 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -815,8 +815,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } @Override - public Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirementSearch) { - return pmsProductRequirementMapper.selectPmsProductRequirementCount(pmsProductRequirementSearch); + public Integer selectProductReqSpecsCount(PmsProductRequirement pmsProductRequirementSearch) { + return pmsProductRequirementMapper.selectProductReqSpecsCount(pmsProductRequirementSearch); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 5ad5f6bbb..a704a6c06 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -114,9 +114,9 @@ order by update_time desc - select count(0) from pms_product_requirement - + @@ -202,6 +202,11 @@ + + and title like concat('%', #{title}, '%') and create_by = #{createBy} @@ -232,8 +237,7 @@ and (`status`= 'pendingReviewReqSpecs' or `status`= 'plannedReqSpecs' or `status` = 'rejectedReqSpecs' or `status` = 'reviewedReqSpecs' or `status` = 'completedReqSpecs' or `status` = 'changingReqSpecs') - order by update_time desc - + + and pplr.product_identifier = + #{productIdentifier} + and pplr.name like concat('%', #{name}, '%') + and pplr.alias like concat('%', #{alias}, '%') and pe.enterprise_identifier = #{pmsEnterpriseIdentifier} and pplr.format = 'product' @@ -176,6 +187,8 @@ snapshot_name, packaged_file_identifier, format, + product_identifier, + version, #{name}, @@ -193,6 +206,8 @@ #{snapshotName}, #{packagedFileIdentifier}, #{format}, + #{productIdentifier}, + #{version}, @@ -214,6 +229,8 @@ snapshot_name = #{snapshotName}, packaged_file_identifier = #{packagedFileIdentifier}, format = #{format}, + product_identifier = #{productIdentifier}, + version = #{version}, where id = #{id} From 5a20b86f8bdc3f1cc9ebf30b3e6f6bb3de9c2fff Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 25 Dec 2024 13:47:27 +0800 Subject: [PATCH 117/270] =?UTF-8?q?feat(=E8=BD=AF=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E5=B1=95=E6=96=B0=E6=8A=80=E6=9C=AF=E8=AF=BE=E9=A2=98=E8=81=94?= =?UTF-8?q?=E8=B0=83):=20=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品版本列表返回关联产品详情 Signed-off-by: OTTO <731554297@qq.com> --- .../domain/vo/PmsProductLibraryDataVo.java | 5 +++-- .../domain/vo/PmsProductLibrarySimpleVo.java | 5 +++-- .../impl/PmsProductLibraryServiceImpl.java | 22 ++++++++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java index 9281131b7..5e2e5856c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.alibaba.fastjson2.JSONObject; +import com.microservices.pms.product.domain.PmsProduct; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -49,8 +50,8 @@ public class PmsProductLibraryDataVo { private JSONObject attributes; - @ApiModelProperty(value = "关联产品标识") - private String productIdentifier; + @ApiModelProperty(value = "关联产品") + private PmsProduct product; @ApiModelProperty(value = "产品版本号") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java index 253d11fed..1da2cb830 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.alibaba.fastjson2.JSONObject; +import com.microservices.pms.product.domain.PmsProduct; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,8 +21,8 @@ public class PmsProductLibrarySimpleVo extends PmsProductLibraryRepositoriesSimp @ApiModelProperty(value = "其他属性") private JSONObject attributes; - @ApiModelProperty(value = "关联产品标识") - private String productIdentifier; + @ApiModelProperty(value = "关联产品") + private PmsProduct product; @ApiModelProperty(value = "产品版本号") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index e2151bb74..77bda905f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,6 +15,7 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; @@ -43,6 +44,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -76,6 +78,8 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { private IPmsDocumentService pmsDocumentService; @Autowired private IPmsCommonService pmsCommonService; + @Autowired + private IPmsProductService pmsProductService; @Override public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { @@ -107,7 +111,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Override public PmsProductLibraryDataVo selectPmsProductLibraryDataByName(String enterpriseIdentifier, String repoName) { PmsProductLibraryRepositories pmsProductLibraryRepositories = selectPmsProductLibraryByName(enterpriseIdentifier, repoName); - return pmsProductLibraryRepositories.toPmsProductLibraryDataVo(); + PmsProductLibraryDataVo pmsProductLibraryDataVo = pmsProductLibraryRepositories.toPmsProductLibraryDataVo(); + pmsProductLibraryDataVo.setProduct(pmsProductService.selectPmsProductByIdentifier(pmsProductLibraryRepositories.getProductIdentifier())); + return pmsProductLibraryDataVo; } @@ -122,12 +128,22 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Override public GenericsTableDataInfo selectPmsProductLibraryPageList(PmsProductLibrarySearchVo searchVo) { - return PageUtils.toPage(pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryList(searchVo), this::toPmsProductLibrarySimpleVo); + HashMap hashMap = new HashMap<>(); + return PageUtils.toPage(pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryList(searchVo), x -> toPmsProductLibrarySimpleVo(x, hashMap)); } - private PmsProductLibrarySimpleVo toPmsProductLibrarySimpleVo(PmsProductLibraryRepositories pmsProductLibraryRepositories) { + private PmsProductLibrarySimpleVo toPmsProductLibrarySimpleVo(PmsProductLibraryRepositories pmsProductLibraryRepositories, HashMap hashMap) { PmsProductLibrarySimpleVo pmsProductLibrarySimpleVo = pmsProductLibraryRepositories.toPmsProductLibrarySimpleVo(); pmsCommonService.setBaseEntityVo(pmsProductLibrarySimpleVo, pmsProductLibraryRepositories); + if (StringUtils.isNotEmpty(pmsProductLibraryRepositories.getProductIdentifier())) { + pmsProductLibrarySimpleVo.setProduct( + PmsUtils.getSelectObjectInCache( + hashMap + , x -> pmsProductService.selectPmsProductByIdentifier(x) + , pmsProductLibraryRepositories.getProductIdentifier() + ) + ); + } return pmsProductLibrarySimpleVo; } From 0d27d829642951062f7890107de56dabbdaaaa2a Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 25 Dec 2024 15:50:07 +0800 Subject: [PATCH 118/270] =?UTF-8?q?feat(=E8=BD=AF=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E5=B1=95=E6=96=B0=E6=8A=80=E6=9C=AF=E8=AF=BE=E9=A2=98=E8=81=94?= =?UTF-8?q?=E8=B0=83):=20=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品版本列表返回关联产品详情 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductLibraryServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 77bda905f..55bd7b474 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -112,7 +112,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { public PmsProductLibraryDataVo selectPmsProductLibraryDataByName(String enterpriseIdentifier, String repoName) { PmsProductLibraryRepositories pmsProductLibraryRepositories = selectPmsProductLibraryByName(enterpriseIdentifier, repoName); PmsProductLibraryDataVo pmsProductLibraryDataVo = pmsProductLibraryRepositories.toPmsProductLibraryDataVo(); - pmsProductLibraryDataVo.setProduct(pmsProductService.selectPmsProductByIdentifier(pmsProductLibraryRepositories.getProductIdentifier())); + if (StringUtils.isNotEmpty(pmsProductLibraryRepositories.getProductIdentifier())) { + pmsProductLibraryDataVo.setProduct(pmsProductService.selectPmsProductByIdentifier(pmsProductLibraryRepositories.getProductIdentifier())); + } return pmsProductLibraryDataVo; } From f695700777a5389cd333a94708006e40d8ac5f51 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 27 Dec 2024 16:14:45 +0800 Subject: [PATCH 119/270] =?UTF-8?q?feat(=E8=BD=AF=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E5=B1=95=E6=96=B0=E6=8A=80=E6=9C=AF=E8=AF=BE=E9=A2=98=E8=81=94?= =?UTF-8?q?=E8=B0=83):=20=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品库不限制名称是否重复 Signed-off-by: OTTO <731554297@qq.com> --- .../impl/PmsProductLibraryServiceImpl.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 55bd7b474..1ecdddf58 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -154,10 +154,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { PmsProductLibraryRepositories oldRepo = selectPmsProductLibraryByName(productRepositoriesOperateVo.getEnterpriseIdentifier(), productRepositoriesOperateVo.getName()); // 校验制品库别名 - PmsProductLibraryRepositories aliasRepo = pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryByAlias(productRepositoriesOperateVo.getAlias(), productRepositoriesOperateVo.getEnterpriseIdentifier()); - if (aliasRepo != null && !aliasRepo.getId().equals(oldRepo.getId())) { - throw new ServiceException("该产品库名称在当前组织下已存在(产品库名称[%s])", productRepositoriesOperateVo.getAlias()); - } +// PmsProductLibraryRepositories aliasRepo = pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryByAlias(productRepositoriesOperateVo.getAlias(), productRepositoriesOperateVo.getEnterpriseIdentifier()); +// if (aliasRepo != null && !aliasRepo.getId().equals(oldRepo.getId())) { +// throw new ServiceException("该产品库名称在当前组织下已存在(产品库名称[%s])", productRepositoriesOperateVo.getAlias()); +// } // 构建更新对象 PmsProductLibraryRepositories pmsProductLibraryRepositories = productRepositoriesOperateVo.toPmsProductLibraryRepositories(); pmsProductLibraryRepositories.setId(oldRepo.getId()); @@ -285,14 +285,14 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { if (count > 0) { throw new ServiceException("该产品库标识在当前组织下已存在(产品库标识[%s])", productRepositoriesInputVo.getName()); } - // 校验制品库别名 - PmsProductLibraryRepositories aliasRepo = - pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryByAlias( - productRepositoriesInputVo.getAlias(), - productRepositoriesInputVo.getEnterpriseIdentifier()); - if (aliasRepo != null) { - throw new ServiceException("该产品库名称在当前组织下已存在(产品库名称[%s])", productRepositoriesInputVo.getAlias()); - } +// // 校验制品库别名 +// PmsProductLibraryRepositories aliasRepo = +// pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryByAlias( +// productRepositoriesInputVo.getAlias(), +// productRepositoriesInputVo.getEnterpriseIdentifier()); +// if (aliasRepo != null) { +// throw new ServiceException("该产品库名称在当前组织下已存在(产品库名称[%s])", productRepositoriesInputVo.getAlias()); +// } NexusHostedRepoInputVo requestBody = productRepositoriesInputVo.toNexusRepoDataVo(); // 调用制品库创建接口创建产品库 From 24c1bfedba0dd2b2964fbef87a49ca0dc6a89bde Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 6 Jan 2025 13:56:48 +0800 Subject: [PATCH 120/270] =?UTF-8?q?fix(Bug=E4=BF=AE=E5=A4=8D):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=A1=B9=E7=9B=AE=E7=BB=8F=E7=90=86=E6=97=A0=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=88=9B=E5=BB=BA=E9=A1=B9=E7=9B=AE=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/project/service/impl/PmsProjectMembersServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectMembersServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectMembersServiceImpl.java index 016bf0aa1..33d56a45b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectMembersServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectMembersServiceImpl.java @@ -124,7 +124,7 @@ public class PmsProjectMembersServiceImpl implements IPmsProjectMembersService { if (user != null) { pmsProjectMembers.setUserId(user.getUserId()); } - pmsProjectService.selectAndCheckPmsProjectById(pmsProjectMembers.getPmsProjectId()); + pmsProjectService.selectPmsProjectByIdNoCheckRole(pmsProjectMembers.getPmsProjectId()); boolean exist = pmsProjectMembersMapper.countPmsProjectMembersByProjectIdAndMemberId( pmsProjectMembers.getPmsProjectId(), pmsProjectMembers.getPmsProjectMemberId() From 33ffe1bfb43ef243e59d9dd541663a770b327bcf Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 8 Jan 2025 14:34:37 +0800 Subject: [PATCH 121/270] =?UTF-8?q?fix(Bug=E4=BF=AE=E5=A4=8D):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=A7=E5=93=81=E6=A0=87=E8=AF=86=E7=94=B1=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=87=AA=E5=AE=9A=E4=B9=89=E5=90=8E=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=9C=A8=E4=B8=8D=E5=90=8C=E7=BB=84=E7=BB=87=E4=B8=8B=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9B=B8=E5=90=8C=E4=BA=A7=E5=93=81=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增字段:自定义标识,用户输入的自定义标识填充到该字段中,原产品标识还是自动生成 2. 需求规格标识根据自定义标识来生成 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/PmsProduct.java | 9 +++------ .../product/domain/vo/PmsProductInputVo.java | 4 ++-- .../pms/product/mapper/PmsProductMapper.java | 2 ++ .../PmsProductRequirementServiceImpl.java | 11 ++++++----- .../service/impl/PmsProductServiceImpl.java | 5 +++-- .../resources/mapper/pms/PmsProductMapper.xml | 19 +++++++++++++------ 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProduct.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProduct.java index fbde92818..39600d4af 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProduct.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProduct.java @@ -66,16 +66,13 @@ public class PmsProduct extends BaseEntity /** 删除标志(0代表存在 2代表删除) */ private String delFlag; - /** 预留字段1 */ + @ApiModelProperty(value = "自定义标识") + private String customIdentifier; + @ApiModelProperty(value = "预留字段1") @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField1; - /** 预留字段2 */ - @ApiModelProperty(value = "预留字段2") - @JsonInclude(JsonInclude.Include.NON_EMPTY) - private String reservedField2; - public PmsProductDataVo toPmsProductDataVo() { PmsProductDataVo target = new PmsProductDataVo(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java index 44cb814af..450576ddc 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductInputVo.java @@ -42,10 +42,10 @@ public class PmsProductInputVo @ApiModelProperty(value = "关联企业标识", hidden = true) private String pmsEnterpriseIdentifier; - @ApiModelProperty(value = "产品标识", required = true) + @ApiModelProperty(value = "产品自定义标识", required = true) @NotNull @Size(max = 50, message = "长度需要小于50") - private String productIdentifier; + private String customIdentifier; public PmsProduct toPmsProduct(String pmsEnterpriseIdentifier) { PmsProduct target = new PmsProduct(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java index c5867a77f..5ff4d24b8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductMapper.java @@ -91,4 +91,6 @@ public interface PmsProductMapper Integer selectPmsProductCount(PmsProductSearchVo pmsProductSearchVo); Integer selectPmsProductByIdentifierCount(@Param("identifier") String identifier, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); + + Integer selectPmsProductByCustomIdentifierCount(@Param("customIdentifier") String customIdentifier, @Param("enterpriseIdentifier") String enterpriseIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index abddccf18..2a169c8e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -372,7 +372,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private void userReqToReqSpecs(PmsProductRequirement userReq, PmsProductReqOperationRecord record) { PmsProductRequirement reqSpecs = userReq.userReqToReqSpecs(); - reqSpecs.setIdentifier(genReqSpecsIdentifier(userReq.getPmsProductIdentifier(), userReq.getTitle(), null)); + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(userReq.getPmsProductIdentifier()); + reqSpecs.setIdentifier(genReqSpecsIdentifier(pmsProduct.getCustomIdentifier(), userReq.getTitle(), null)); reqSpecs.setCreateAndUpdate(SecurityUtils.getUsername()); pmsProductRequirementMapper.insertPmsProductRequirement(reqSpecs); record.setProductRequirementId(reqSpecs.getId()); @@ -434,17 +435,17 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS return toProductReqSpecsDetailVo(pmsProductRequirement); } - private String genReqSpecsIdentifier(String productIdentifier, String reqTitle, String oldIdentifier) { + private String genReqSpecsIdentifier(String customIdentifier, String reqTitle, String oldIdentifier) { // 去掉标题中特殊字符 String regEx = "\\pP|\\pS|\\s+"; reqTitle = Pattern.compile(regEx).matcher(reqTitle).replaceAll("").trim(); String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).toUpperCase(); - String identifier = productIdentifier + "-" + reqTitleIdentifier; + String identifier = customIdentifier + "-" + reqTitleIdentifier; if (!identifier.equals(oldIdentifier)) { Integer count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier); int nameCount = 1; while (count > 0) { - identifier = productIdentifier + "-" + reqTitleIdentifier + "-" + nameCount; + identifier = customIdentifier + "-" + reqTitleIdentifier + "-" + nameCount; count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier); nameCount++; } @@ -464,7 +465,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS checkReqSpecsParameter(pmsProductRequirement, pmsProduct, null); // 生成需求唯一标识 - pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsInputVo.getTitle(), null)); + pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getCustomIdentifier(), productReqSpecsInputVo.getTitle(), null)); // 设置默认需求状态 pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey()); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java index 27db70ac1..c5c086cee 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductServiceImpl.java @@ -116,10 +116,11 @@ public class PmsProductServiceImpl implements IPmsProductService @Override public String insertPmsProduct(PmsProduct pmsProduct) { PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProduct.getPmsEnterpriseIdentifier()); + pmsProduct.setProductIdentifier(genProductIdentifier()); checkNameDuplicates(pmsProduct.getProductName(), pmsProduct.getPmsEnterpriseIdentifier()); - Integer count = pmsProductMapper.selectPmsProductByIdentifierCount(pmsProduct.getProductIdentifier(), pmsEnterprise.getEnterpriseIdentifier()); + Integer count = pmsProductMapper.selectPmsProductByCustomIdentifierCount(pmsProduct.getCustomIdentifier(), pmsEnterprise.getEnterpriseIdentifier()); if (count > 0) { - throw new ServiceException("该产品标识在当前企业下已存在(产品标识[%s])", pmsProduct.getProductIdentifier()); + throw new ServiceException("该产品自定义标识在当前企业下已存在(产品自定义标识[%s])", pmsProduct.getCustomIdentifier()); } pmsProduct.setPmsEnterpriseId(pmsEnterprise.getId()); String currentUsername=SecurityUtils.getUsername(); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml index d7b702965..ff95794c7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductMapper.xml @@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -39,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, del_flag, reserved_field_1, - reserved_field_2 + custom_identifier from pms_product @@ -59,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ppd.create_by, ppd.del_flag, ppd.reserved_field_1, - ppd.reserved_field_2 + ppd.custom_identifier from pms_product ppd left join pms_enterprise as pe on ppd.pms_enterprise_id = pe.id @@ -116,6 +116,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where ppd.product_identifier = #{identifier} and pe.enterprise_identifier = #{pmsEnterpriseIdentifier} + insert into pms_product @@ -136,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, del_flag, reserved_field_1, - reserved_field_2, + custom_identifier, #{productName}, @@ -155,7 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createBy}, #{delFlag}, #{reservedField1}, - #{reservedField2}, + #{customIdentifier}, @@ -178,7 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by = #{createBy}, del_flag = #{delFlag}, reserved_field_1 = #{reservedField1}, - reserved_field_2 = #{reservedField2}, + custom_identifier = #{customIdentifier}, where id = #{id} From 6bb968ec5e031a0521e64a7fb6204bcec4f67a64 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 8 Jan 2025 14:39:00 +0800 Subject: [PATCH 122/270] =?UTF-8?q?fix(Bug=E4=BF=AE=E5=A4=8D):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BA=A7=E5=93=81=E6=A0=87=E8=AF=86=E7=94=B1=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=87=AA=E5=AE=9A=E4=B9=89=E5=90=8E=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=9C=A8=E4=B8=8D=E5=90=8C=E7=BB=84=E7=BB=87=E4=B8=8B=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9B=B8=E5=90=8C=E4=BA=A7=E5=93=81=E6=A0=87=E8=AF=86?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 查询产品列表时返回自定义标识 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/pms/product/domain/vo/PmsProductDataVo.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductDataVo.java index 6efb2202b..5dbbe9b9f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductDataVo.java @@ -48,6 +48,9 @@ public class PmsProductDataVo { @ApiModelProperty(value = "产品标识") private String productIdentifier; + @ApiModelProperty(value = "产品自定义标识") + private String customIdentifier; + /** * 是否置顶(0否,1是) */ From a71d14b57028c8c2b34bb31848ab6d57787a2115 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 14 Jan 2025 15:47:38 +0800 Subject: [PATCH 123/270] =?UTF-8?q?feat(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E8=B0=83=E6=95=B4):=20=E4=BA=A7=E5=93=81=E5=BA=93=E7=9A=84?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E7=89=88=E6=9C=AC=E8=B0=83=E6=95=B4=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=89=88=E6=9C=AC=E6=A0=87=E8=AF=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 版本标识生成规则调整为(产品标识-产品版本号-产品版本标签) Signed-off-by: OTTO <731554297@qq.com> --- .../domain/PmsProductLibraryRepositories.java | 4 ++++ .../domain/vo/PmsProductLibraryDataVo.java | 4 ++++ .../domain/vo/PmsProductLibrarySimpleVo.java | 4 ++++ .../domain/vo/ProductRepositoriesInputVo.java | 9 +++++---- .../domain/vo/ProductRepositoriesOperateVo.java | 2 +- .../service/impl/PmsProductLibraryServiceImpl.java | 7 +++++++ .../mapper/pms/PmsProductLibraryRepositoriesMapper.xml | 5 +++++ 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java index 67f01027e..059701390 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java @@ -99,6 +99,10 @@ public class PmsProductLibraryRepositories extends BaseEntity { @ApiModelProperty(value = "产品版本号") private String version; + + @ApiModelProperty(value = "产品版本标记") + private String tag; + public RepoAttributesVo getRepoAttributes() { return JSONObject.parseObject(this.attributes, RepoAttributesVo.class); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java index 5e2e5856c..89fc55237 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java @@ -56,4 +56,8 @@ public class PmsProductLibraryDataVo { @ApiModelProperty(value = "产品版本号") private String version; + + + @ApiModelProperty(value = "产品版本标记") + private String tag; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java index 1da2cb830..b96f3f7f0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java @@ -27,4 +27,8 @@ public class PmsProductLibrarySimpleVo extends PmsProductLibraryRepositoriesSimp @ApiModelProperty(value = "产品版本号") private String version; + + + @ApiModelProperty(value = "产品版本标记") + private String tag; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java index 6414f21c1..f04a3a084 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java @@ -17,10 +17,10 @@ import javax.validation.constraints.Pattern; @Data @ApiModel("产品库输入对象") public class ProductRepositoriesInputVo extends ProductRepositoriesOperateVo { - @ApiModelProperty(value = "产品库标识", required = true) - @NotBlank(message = "产品库标识不能为空") - @Pattern(regexp = "^[A-Za-z0-9](?!_)(?!\\.)[A-Za-z0-9_\\-.]*$", message = "产品库标识不符合规范") - private String name; + @ApiModelProperty(value = "产品版本标记", required = true) + @NotBlank(message = "产品版本标记不能为空") + @Pattern(regexp = "^[A-Za-z0-9](?!_)(?!\\.)[A-Za-z0-9_\\-.]*$", message = "产品版本标记不符合规范") + private String tag; @ApiModelProperty(value = "产品库名称", required = true) @NotBlank(message = "产品库名称不能为空") @@ -45,6 +45,7 @@ public class ProductRepositoriesInputVo extends ProductRepositoriesOperateVo { @Override public PmsProductLibraryRepositories toPmsProductLibraryRepositories() { PmsProductLibraryRepositories target = super.toPmsProductLibraryRepositories(); + target.setTag(tag); target.setName(name); target.setAlias(alias); target.setProductIdentifier(productIdentifier); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesOperateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesOperateVo.java index 38bdc188d..e26058755 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesOperateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesOperateVo.java @@ -23,7 +23,7 @@ public class ProductRepositoriesOperateVo { @ApiModelProperty(value = "产品库名称") private String alias; @ApiModelProperty(value = "产品库标识", hidden = true) - private String name; + protected String name; @ApiModelProperty(value = "组织标识", hidden = true) private String enterpriseIdentifier; @ApiModelProperty(value = "制品库类型", hidden = true) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 1ecdddf58..f3da13059 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,6 +15,7 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; @@ -280,6 +281,12 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Override public int insertPmsProductLibrary(ProductRepositoriesInputVo productRepositoriesInputVo) { PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productRepositoriesInputVo.getEnterpriseIdentifier()); + PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(productRepositoriesInputVo.getProductIdentifier()); + String repoName = String.format("%s-%s-%s" + , pmsProduct.getCustomIdentifier() + , productRepositoriesInputVo.getVersion() + , productRepositoriesInputVo.getTag()); + productRepositoriesInputVo.setName(repoName); // 校验制品库标识 Integer count = pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesByNameCount(productRepositoriesInputVo.getName(), productRepositoriesInputVo.getEnterpriseIdentifier(), productRepositoriesInputVo.getFormat()); if (count > 0) { diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml index 1ddf7b805..28deedaf8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml @@ -24,6 +24,7 @@ + @@ -45,6 +46,7 @@ pplr.packaged_file_identifier, pplr.product_identifier, pplr.version, + pplr.tag, pe.enterprise_identifier from pms_product_library_repositories pplr left join pms_enterprise as pe on pplr.pms_enterprise_id = pe.id @@ -189,6 +191,7 @@ format, product_identifier, version, + tag, #{name}, @@ -208,6 +211,7 @@ #{format}, #{productIdentifier}, #{version}, + #{tag}, @@ -231,6 +235,7 @@ format = #{format}, product_identifier = #{productIdentifier}, version = #{version}, + tag = #{tag}, where id = #{id} From a9a75dc100bf0da6a36748cb71d0d021ad6fd168 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Thu, 26 Dec 2024 11:40:03 +0800 Subject: [PATCH 124/270] =?UTF-8?q?feat(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E4=BA=A7=E5=93=81=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/controller/PmsDashboardController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 9645e37b5..a331f1e42 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -39,6 +39,8 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.microservices.pms.utils.PmsConstants.PRODUCT_PLAN_CLOSED_STATUS_NAME; + @RestController @RequestMapping("/{enterpriseIdentifier}/dashboard") @Api(tags = "项目管理-工作台") @@ -223,8 +225,7 @@ public class PmsDashboardController extends BaseController { PmsRequirementStatResVo pmsRequirementStatResVo = buildPmsRequirementStatResVo( productIdentifier, getReqSpecsList(), - ProductReqStatus.REVIEWED_REQ_SPECS); - + ProductReqStatus.COMPLETED_REQ_SPECS); return R.ok(pmsRequirementStatResVo); } @@ -237,7 +238,7 @@ public class PmsDashboardController extends BaseController { PmsProductStatus pmsProductStatus = new PmsProductStatus(); pmsProductStatus.setType(1); List pmsTypeDataVos = pmsProductStatusService.selectPmsProductStatusList(pmsProductStatus); - List statusStatVos = pmsTypeDataVos.stream().map(e -> { + List statusStatVos = pmsTypeDataVos.stream().filter(e -> !PRODUCT_PLAN_CLOSED_STATUS_NAME.equals(e.getName())).map(e -> { ReqStatusStatVo vo = new ReqStatusStatVo(); vo.setKey(String.valueOf(e.getId())); vo.setNum(status2NumMap.getOrDefault(String.valueOf(e.getId()), 0)); @@ -258,10 +259,9 @@ public class PmsDashboardController extends BaseController { private List getReqSpecsList() { return Stream.of(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey(), ProductReqStatus.PLANNED_REQ_SPECS.getKey(), - ProductReqStatus.REJECTED_CHANGE_REQ_SPECS.getKey(), + ProductReqStatus.REJECTED_REQ_SPECS.getKey(), ProductReqStatus.REVIEWED_REQ_SPECS.getKey(), - ProductReqStatus.COMPLETED_REQ_SPECS.getKey(), - ProductReqStatus.CHANGED_REQ_SPECS.getKey()) + ProductReqStatus.COMPLETED_REQ_SPECS.getKey()) .collect(Collectors.toList()); } From 182db3e87220143025932bf5cfea63a0084a842a Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Wed, 15 Jan 2025 09:27:31 +0800 Subject: [PATCH 125/270] =?UTF-8?q?feat(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):#124149=20=E6=88=91=E7=9A=84=E4=BA=A7?= =?UTF-8?q?=E5=93=81=20=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsDashboardController.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index a331f1e42..9b87e0868 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -192,7 +192,7 @@ public class PmsDashboardController extends BaseController { PmsProductStatVo statVo = new PmsProductStatVo(); String pmsProductIdentifier = e.getProductIdentifier(); Integer requirementCount = pmsProductRequirementService.countByIdentifierAndStatus(pmsProductIdentifier, getUserReqList()); - Integer reqSpecsCount = pmsProductRequirementService.countByIdentifierAndStatus(pmsProductIdentifier, getReqSpecsList()); + Integer reqSpecsCount = pmsProductRequirementService.countByIdentifierAndStatus(pmsProductIdentifier, getTotalReqSpecsList()); BeanUtils.copyProperties(e, statVo); statVo.setReqSpecsCount(reqSpecsCount); statVo.setUserReqCount(requirementCount); @@ -253,7 +253,7 @@ public class PmsDashboardController extends BaseController { /** - * 获取 需求规格状态list + * 获取 统计饼图所需的需求规格状态list * @return 需求规格状态list */ private List getReqSpecsList() { @@ -265,6 +265,20 @@ public class PmsDashboardController extends BaseController { .collect(Collectors.toList()); } + /** + * 获取Count总数时,需求规格的状态list + * @return 需求规格状态list + */ + private List getTotalReqSpecsList() { + return Stream.of(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey(), + ProductReqStatus.PLANNED_REQ_SPECS.getKey(), + ProductReqStatus.REJECTED_REQ_SPECS.getKey(), + ProductReqStatus.REVIEWED_REQ_SPECS.getKey(), + ProductReqStatus.COMPLETED_REQ_SPECS.getKey(), + ProductReqStatus.CHANGING_REQ_SPECS.getKey()) + .collect(Collectors.toList()); + } + /** * 获取 用户需求状态list * @return 用户需求状态list From 4ea5406c480ae4a1e69969e78b9b242f7076ac2b Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 16 Jan 2025 09:27:47 +0800 Subject: [PATCH 126/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E9=87=8D=E6=9E=84):=20=E4=BA=A7=E5=93=81=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E4=BF=AE=E6=94=B9=E4=B8=BA=E4=BA=A7=E5=93=81=E9=87=8C?= =?UTF-8?q?=E7=A8=8B=E7=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../controller/ProductReqSpecsController.java | 2 +- .../pms/product/domain/PmsProductPlan.java | 20 ++++--- .../product/domain/PmsProductPriority.java | 6 +- .../product/domain/PmsProductRequirement.java | 4 +- .../pms/product/domain/PmsProductStatus.java | 6 +- .../domain/vo/PmsProductPlanDataVo.java | 8 ++- .../domain/vo/PmsProductPlanInputVo.java | 4 +- .../domain/vo/PmsProductPlanSearchVo.java | 4 +- .../domain/vo/PmsProductPlanUpdateVo.java | 10 ++-- .../PmsProductRequirementBatchUpdateVo.java | 6 +- .../vo/PmsProductRequirementDataVo.java | 4 +- .../vo/PmsProductRequirementDetailVo.java | 4 +- .../vo/PmsProductRequirementInputVo.java | 6 +- .../vo/PmsProductRequirementSearchVo.java | 6 +- .../vo/PmsProductRequirementUpdateVo.java | 6 +- .../pms/product/domain/vo/PmsTypeDataVo.java | 2 +- .../product/domain/vo/PmsTypeSearchVo.java | 2 +- .../product/mapper/PmsProductPlanMapper.java | 48 +++++++-------- .../service/IPmsProductPlanService.java | 58 +++++++++---------- .../impl/PmsProductPlanServiceImpl.java | 44 +++++++------- .../PmsProductRequirementServiceImpl.java | 10 ++-- .../impl/PmsProductStatusServiceImpl.java | 4 +- .../com/microservices/pms/task/PmsJob.java | 10 ++-- .../microservices/pms/utils/PmsConstants.java | 12 ++-- 24 files changed, 155 insertions(+), 131 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 8de70de21..2a3342eb0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -164,7 +164,7 @@ public class ProductReqSpecsController extends BaseController { value = "【字段说明】(非必填字段不传递则代表不更新,传null则代表置空):\n" + "idList:需求Id列表(必填),示例:[1,2,3];\n" + "pmsProductModuleId:关联产品模块ID;\n" + - "pmsProductPlanId:关联产品计划ID;\n") + "pmsProductPlanId:关联产品里程碑ID;\n") @RequestBody JSONObject pmsProductRequirementBatchUpdateVo) { return toAjax(pmsProductRequirementService.batchUpdatePmsProductRequirement(pmsProductRequirementBatchUpdateVo)); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPlan.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPlan.java index ce260106e..83d178e5e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPlan.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPlan.java @@ -12,22 +12,26 @@ import lombok.Data; import java.util.Date; /** - * 产品计划对象 pms_product_plan + * 产品里程碑对象 pms_product_plan * * @author microservices * @date 2023-10-10 */ @Data -@ApiModel("产品计划对象") +@ApiModel("产品里程碑对象") public class PmsProductPlan extends BaseEntity { private static final long serialVersionUID = 1L; - /** 产品计划ID */ + /** + * 产品里程碑ID + */ private Long id; - /** 计划标题 */ - @ApiModelProperty(value = "计划标题") + /** + * 里程碑标题 + */ + @ApiModelProperty(value = "里程碑标题") private String planTitle; /** 关联产品标识 */ @@ -52,8 +56,10 @@ public class PmsProductPlan extends BaseEntity @ApiModelProperty(value = "结束时间") private Date endTime; - /** 计划描述 */ - @ApiModelProperty(value = "计划描述") + /** + * 里程碑描述 + */ + @ApiModelProperty(value = "里程碑描述") private String planDescription; /** 工作量 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPriority.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPriority.java index ac638d511..8e8f8d395 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPriority.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductPriority.java @@ -26,8 +26,10 @@ public class PmsProductPriority extends BaseEntity @ApiModelProperty(value = "优先级名称") private String name; - /** 优先级类型(1产品计划 2产品需求) */ - @ApiModelProperty(value = "优先级类型(1=产品计划,2=产品需求)") + /** + * 优先级类型(1产品里程碑 2产品需求) + */ + @ApiModelProperty(value = "优先级类型(1=产品里程碑,2=产品需求)") private Integer type; /** 删除标志(0代表存在 2代表删除) */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index 495f88bde..ef4480318 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -51,7 +51,9 @@ public class PmsProductRequirement extends BaseEntity @ApiModelProperty(value = "关联产品模块ID") private Long pmsProductModuleId; - /** 关联产品计划ID */ + /** + * 关联产品里程碑ID + */ @ApiModelProperty(value = "关联产品里程碑ID") private Long pmsProductPlanId; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductStatus.java index cd25a99ea..20cd57536 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductStatus.java @@ -26,8 +26,10 @@ public class PmsProductStatus extends BaseEntity @ApiModelProperty(value = "状态名称") private String name; - /** 状态类型(1产品计划 2产品需求) */ - @ApiModelProperty(value = "状态类型(1=产品计划,2=产品需求)") + /** + * 状态类型(1产品里程碑 2产品需求) + */ + @ApiModelProperty(value = "状态类型(1=产品里程碑,2=产品需求)") private Integer type; /** 删除标志(0代表存在 2代表删除) */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanDataVo.java index bd02fc050..d3e808b9c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanDataVo.java @@ -9,16 +9,18 @@ import lombok.Data; import java.util.Date; /** - * 产品计划对象 pms_product_plan + * 产品里程碑对象 pms_product_plan * * @author microservices * @date 2023-10-10 */ @Data -@ApiModel("产品计划数据对象") +@ApiModel("产品里程碑数据对象") public class PmsProductPlanDataVo { - /** 产品计划ID */ + /** + * 产品里程碑ID + */ private Long id; /** 计划标题 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanInputVo.java index ac8779c20..4fb487ee8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanInputVo.java @@ -13,13 +13,13 @@ import javax.validation.constraints.Size; import java.util.Date; /** - * 产品计划对象 pms_product_plan + * 产品里程碑对象 pms_product_plan * * @author microservices * @date 2023-10-10 */ @Data -@ApiModel("产品计划输入对象") +@ApiModel("产品里程碑输入对象") public class PmsProductPlanInputVo { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java index 4f6bf8b7e..c4dbd7ca5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanSearchVo.java @@ -9,13 +9,13 @@ import lombok.Data; import javax.validation.constraints.NotBlank; /** - * 产品计划对象 pms_product_plan + * 产品里程碑对象 pms_product_plan * * @author microservices * @date 2023-10-10 */ @Data -@ApiModel("产品计划搜索对象") +@ApiModel("产品里程碑搜索对象") public class PmsProductPlanSearchVo { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanUpdateVo.java index f02df7886..352ce6d25 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductPlanUpdateVo.java @@ -12,18 +12,20 @@ import javax.validation.constraints.Size; import java.util.Date; /** - * 产品计划对象 pms_product_plan + * 产品里程碑对象 pms_product_plan * * @author microservices * @date 2023-10-10 */ @Data -@ApiModel("产品计划更新对象") +@ApiModel("产品里程碑更新对象") public class PmsProductPlanUpdateVo { - /** 产品计划ID */ + /** + * 产品里程碑ID + */ @NotNull - @ApiModelProperty(value = "产品计划ID") + @ApiModelProperty(value = "产品里程碑ID") private Long id; /** 计划标题 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java index c3e35cde8..ddab1e6ef 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementBatchUpdateVo.java @@ -34,8 +34,10 @@ public class PmsProductRequirementBatchUpdateVo private Long pmsProductModuleId; private Boolean pmsProductModuleIdIsChange = false; - /** 关联产品计划ID */ - @ApiModelProperty(value = "关联产品计划ID") + /** + * 关联产品里程碑ID + */ + @ApiModelProperty(value = "关联产品里程碑ID") private Long pmsProductPlanId; private Boolean pmsProductPlanIdIsChange = false; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java index 1fc4b0d17..7cc9777c2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDataVo.java @@ -54,9 +54,9 @@ public class PmsProductRequirementDataVo extends BaseEntityVo private PmsProduct pmsProduct; /** - * 关联产品计划 + * 关联产品里程碑 */ - @ApiModelProperty(value = "关联产品计划") + @ApiModelProperty(value = "关联产品里程碑") private PmsProductPlan pmsProductPlan; /** 标记名称,使用逗号分割的字符 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDetailVo.java index fb7f0052d..9e1b68417 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementDetailVo.java @@ -29,8 +29,8 @@ public class PmsProductRequirementDetailVo extends PmsProductRequirementDataVo private List fileList; /** - * 关联产品计划 + * 关联产品里程碑 */ - @ApiModelProperty(value = "关联产品计划") + @ApiModelProperty(value = "关联产品里程碑") private PmsProductPlan pmsProductPlan; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java index f21d336f7..ab5575af2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementInputVo.java @@ -78,8 +78,10 @@ public class PmsProductRequirementInputVo @ApiModelProperty(value = "关联项目ID") private Long pmsProjectId; - /** 关联产品计划ID */ - @ApiModelProperty(value = "关联产品计划ID") + /** + * 关联产品里程碑ID + */ + @ApiModelProperty(value = "关联产品里程碑ID") private Long pmsProductPlanId; public PmsProductRequirement toPmsProductRequirement(){ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java index 42e73a604..22ac43f99 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementSearchVo.java @@ -26,8 +26,10 @@ public class PmsProductRequirementSearchVo @ApiModelProperty(value = "关联产品模块ID(传0查询不属于任何模块的需求)") private Long pmsProductModuleId; - /** 关联产品计划ID */ - @ApiModelProperty(value = "关联产品计划ID") + /** + * 关联产品里程碑ID + */ + @ApiModelProperty(value = "关联产品里程碑ID") private Long pmsProductPlanId; /** 关联产品模块标识 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java index af64ff0e8..fdca469a6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductRequirementUpdateVo.java @@ -38,8 +38,10 @@ public class PmsProductRequirementUpdateVo @ApiModelProperty(value = "关联产品模块ID") private Long pmsProductModuleId; - /** 关联产品计划ID */ - @ApiModelProperty(value = "关联产品计划ID") + /** + * 关联产品里程碑ID + */ + @ApiModelProperty(value = "关联产品里程碑ID") private Long pmsProductPlanId; /** 正文 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeDataVo.java index 12693414d..b25a16e19 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeDataVo.java @@ -18,7 +18,7 @@ public class PmsTypeDataVo @ApiModelProperty(value = "名称") private String name; /** 类型 */ - @ApiModelProperty(value = "类型(1=产品计划,2=产品需求)") + @ApiModelProperty(value = "类型(1=产品里程碑,2=产品需求)") private Integer type; /** 颜色 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeSearchVo.java index 48b1687ad..fa3cbc8f5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsTypeSearchVo.java @@ -20,7 +20,7 @@ import javax.validation.constraints.NotNull; public class PmsTypeSearchVo { /** 类型 */ - @ApiModelProperty(value = "类型(1=产品计划,2=产品需求)") + @ApiModelProperty(value = "类型(1=产品里程碑,2=产品需求)") @NotNull private Integer type; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java index d129892e7..58c2250e0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductPlanMapper.java @@ -9,7 +9,7 @@ import java.util.Date; import java.util.List; /** - * 产品计划Mapper接口 + * 产品里程碑Mapper接口 * * @author microservices * @date 2023-10-10 @@ -18,47 +18,47 @@ import java.util.List; public interface PmsProductPlanMapper { /** - * 查询产品计划 - * - * @param id 产品计划主键 - * @return 产品计划 + * 查询产品里程碑 + * + * @param id 产品里程碑主键 + * @return 产品里程碑 */ public PmsProductPlan selectPmsProductPlanById(Long id); /** - * 查询产品计划列表 - * - * @param pmsProductPlan 产品计划 - * @return 产品计划集合 + * 查询产品里程碑列表 + * + * @param pmsProductPlan 产品里程碑 + * @return 产品里程碑集合 */ public List selectPmsProductPlanList(PmsProductPlan pmsProductPlan); /** - * 新增产品计划 - * - * @param pmsProductPlan 产品计划 + * 新增产品里程碑 + * + * @param pmsProductPlan 产品里程碑 * @return 结果 */ public int insertPmsProductPlan(PmsProductPlan pmsProductPlan); /** - * 修改产品计划 - * - * @param pmsProductPlan 产品计划 + * 修改产品里程碑 + * + * @param pmsProductPlan 产品里程碑 * @return 结果 */ public int updatePmsProductPlan(PmsProductPlan pmsProductPlan); /** - * 删除产品计划 - * - * @param id 产品计划主键 + * 删除产品里程碑 + * + * @param id 产品里程碑主键 * @return 结果 */ public int deletePmsProductPlanById(Long id); /** - * 批量删除产品计划 + * 批量删除产品里程碑 * * @param ids 需要删除的数据主键集合 * @return 结果 @@ -66,16 +66,16 @@ public interface PmsProductPlanMapper public int deletePmsProductPlanByIds(Long[] ids); /** - * 查询即将过期的产品计划 + * 查询即将过期的产品里程碑 * @param date 时间 - * @return 产品计划列表 + * @return 产品里程碑列表 */ List selectExpiringPmsProductPlanList(Date date); /** - * 查询产品计划数量 - * @param pmsProductPlan 产品计划查询条件 - * @return 产品计划总数 + * 查询产品里程碑数量 + * @param pmsProductPlan 产品里程碑查询条件 + * @return 产品里程碑总数 */ Integer selectPmsProductPlanCount(PmsProductPlan pmsProductPlan); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java index f6aad6fcf..3012059ce 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductPlanService.java @@ -8,7 +8,7 @@ import com.microservices.pms.product.domain.vo.ReqStatusStatVo; import java.util.List; /** - * 产品计划Service接口 + * 产品里程碑Service接口 * * @author microservices * @date 2023-10-10 @@ -16,78 +16,78 @@ import java.util.List; public interface IPmsProductPlanService { /** - * 查询产品计划 + * 查询产品里程碑 * - * @param id 产品计划主键 + * @param id 产品里程碑主键 * @param checkRole - * @return 产品计划 + * @return 产品里程碑 */ public PmsProductPlan selectPmsProductPlanById(Long id, boolean checkRole); /** - * 查询产品计划列表 - * - * @param pmsProductPlan 产品计划 - * @return 产品计划集合 + * 查询产品里程碑列表 + * + * @param pmsProductPlan 产品里程碑 + * @return 产品里程碑集合 */ public GenericsTableDataInfo selectPmsProductPlanList(PmsProductPlan pmsProductPlan); /** - * 新增产品计划 - * - * @param pmsProductPlan 产品计划 + * 新增产品里程碑 + * + * @param pmsProductPlan 产品里程碑 * @return 结果 */ public Long insertPmsProductPlan(PmsProductPlan pmsProductPlan); /** - * 修改产品计划 - * - * @param pmsProductPlan 产品计划 + * 修改产品里程碑 + * + * @param pmsProductPlan 产品里程碑 * @return 结果 */ public int updatePmsProductPlan(PmsProductPlan pmsProductPlan); /** - * 更新产品计划变更 + * 更新产品里程碑变更 * - * @param id 产品计划Id + * @param id 产品里程碑Id * @return 结果 */ public int updatePmsProductPlanChange(Long id); /** - * 批量删除产品计划 - * - * @param ids 需要删除的产品计划主键集合 + * 批量删除产品里程碑 + * + * @param ids 需要删除的产品里程碑主键集合 * @return 结果 */ public int deletePmsProductPlanByIds(Long[] ids); /** - * 删除产品计划信息 - * - * @param id 产品计划主键 + * 删除产品里程碑信息 + * + * @param id 产品里程碑主键 * @return 结果 */ public int deletePmsProductPlanById(Long id); /** - * 查询产品计划详情 - * @param id 产品计划id - * @return 产品计划详情 + * 查询产品里程碑详情 + * @param id 产品里程碑id + * @return 产品里程碑详情 */ PmsProductPlanDataVo selectPmsProductPlanDataById(Long id); /** - * 查询产品计划数量 - * @param pmsProductPlan 产品计划查询条件 - * @return 产品计划总数 + * 查询产品里程碑数量 + * @param pmsProductPlan 产品里程碑查询条件 + * @return 产品里程碑总数 */ Integer selectPmsProductPlanCount(PmsProductPlan pmsProductPlan); /** - * 删除产品下所有产品计划 + * 删除产品下所有产品里程碑 * * @param productIdentifier 产品标识 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java index ba5024e71..3f9bdbdfd 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductPlanServiceImpl.java @@ -23,7 +23,7 @@ import java.util.HashMap; import java.util.List; /** - * 产品计划Service业务层处理 + * 产品里程碑Service业务层处理 * * @author microservices * @date 2023-10-10 @@ -43,17 +43,17 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { private IPmsProductRequirementService pmsProductRequirementService; /** - * 查询产品计划 + * 查询产品里程碑 * - * @param id 产品计划主键 + * @param id 产品里程碑主键 * @param checkRole 是否校验角色(仅允许组织管理员和产品负责人操作当前产品) - * @return 产品计划 + * @return 产品里程碑 */ @Override public PmsProductPlan selectPmsProductPlanById(Long id, boolean checkRole) { PmsProductPlan pmsProductPlan = pmsProductPlanMapper.selectPmsProductPlanById(id); if (pmsProductPlan == null) { - throw new ServiceException("该产品计划不存在(产品计划Id[%d])", id); + throw new ServiceException("该产品里程碑不存在(产品里程碑Id[%d])", id); } PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductPlan.getPmsProductIdentifier()); if (checkRole) { @@ -63,10 +63,10 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { } /** - * 查询产品计划列表 + * 查询产品里程碑列表 * - * @param pmsProductPlan 产品计划 - * @return 产品计划 + * @param pmsProductPlan 产品里程碑 + * @return 产品里程碑 */ @Override public GenericsTableDataInfo selectPmsProductPlanList(PmsProductPlan pmsProductPlan) { @@ -78,9 +78,9 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { } /** - * 新增产品计划 + * 新增产品里程碑 * - * @param pmsProductPlan 产品计划 + * @param pmsProductPlan 产品里程碑 * @return 结果 */ @Override @@ -88,15 +88,15 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { // 校验产品是否存在 PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductPlan.getPmsProductIdentifier()); pmsProductService.checkManageRole(pmsProduct); - // 设置产品计划优先级,若未传入则设置为默认优先级 + // 设置产品里程碑优先级,若未传入则设置为默认优先级 Long priorityId = pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductPlan.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_PLAN_TYPE); pmsProductPlan.setPriorityId(priorityId); checkProductPlan(pmsProductPlan); if (pmsProductPlan.getStartTime() == null || pmsProductPlan.getEndTime() == null) { - throw new ServiceException("产品计划的开始时间和结束时间不能为空"); + throw new ServiceException("产品里程碑的开始时间和结束时间不能为空"); } - // 设置产品计划状态 + // 设置产品里程碑状态 Long statusId = pmsProductStatusService.selectPmsProductPlanStatusByDateOrStatusId(pmsProductPlan.getStartTime(), pmsProductPlan.getEndTime(), null, null, pmsProductPlan.getStatusId(), null); pmsProductPlan.setStatusId(statusId); @@ -122,17 +122,17 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { } /** - * 修改产品计划 + * 修改产品里程碑 * - * @param pmsProductPlan 产品计划 + * @param pmsProductPlan 产品里程碑 * @return 结果 */ @Override public int updatePmsProductPlan(PmsProductPlan pmsProductPlan) { - // 通过id检查需修改的产品计划是否存在 + // 通过id检查需修改的产品里程碑是否存在 PmsProductPlan oldPmsProductPlan = selectPmsProductPlanById(pmsProductPlan.getId(), true); if (pmsProductPlan.getPriorityId() != null) { - // 设置产品计划优先级 + // 设置产品里程碑优先级 Long priorityId = pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductPlan.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_PLAN_TYPE); pmsProductPlan.setPriorityId(priorityId); @@ -147,7 +147,7 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { throw new ServiceException("结束时间不能早于开始时间"); } } - // 设置产品计划状态 + // 设置产品里程碑状态 Long statusId = pmsProductStatusService.selectPmsProductPlanStatusByDateOrStatusId( pmsProductPlan.getStartTime(), pmsProductPlan.getEndTime(), oldPmsProductPlan.getStartTime(), oldPmsProductPlan.getEndTime(), pmsProductPlan.getStatusId(), oldPmsProductPlan.getStatusId()); @@ -170,9 +170,9 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { } /** - * 批量删除产品计划 + * 批量删除产品里程碑 * - * @param ids 需要删除的产品计划主键 + * @param ids 需要删除的产品里程碑主键 * @return 结果 */ @Override @@ -186,9 +186,9 @@ public class PmsProductPlanServiceImpl implements IPmsProductPlanService { } /** - * 删除产品计划信息 + * 删除产品里程碑信息 * - * @param id 产品计划主键 + * @param id 产品里程碑主键 * @return 结果 */ @Override diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 2a169c8e7..a676870fe 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -167,11 +167,11 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } private void checkReqSpecsParameter(PmsProductRequirement pmsProductRequirement, PmsProduct pmsProduct, PmsProductRequirement oldPmsProductRequirement) { - // 校验产品计划是否存在 + // 校验产品里程碑是否存在 if (pmsProductRequirement.getPmsProductPlanId() != null) { PmsProductPlan pmsProductPlan = pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false); if (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) { - throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); + throw new ServiceException("该产品里程碑不属于当前产品(产品里程碑标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); } if (oldPmsProductRequirement == null || oldPmsProductRequirement.getPmsProductPlanId() == null) { @@ -410,7 +410,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS , pmsProductRequirement.getPmsProductModuleId()) ); } - // 设置产品计划 + // 设置产品里程碑 if (pmsProductRequirement.getPmsProductPlanId() != null) { productReqSpecsDataVo.setPmsProductPlan( PmsUtils.getSelectObjectInCache( @@ -829,7 +829,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS checkGitlinkUserIds(gitlinkUserIdStrList, pmsProduct); } - // 校验产品计划是否存在 + // 校验产品里程碑是否存在 if (pmsProductRequirementBatchUpdateVo.getPmsProductPlanIdIsChange() && pmsProductRequirementBatchUpdateVo.getPmsProductPlanId() != null) { checkProductPlanId(pmsProductRequirementBatchUpdateVo.getPmsProductPlanId(), pmsProduct); @@ -887,7 +887,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS private void checkProductPlanId(Long productPlanId, PmsProduct pmsProduct) { PmsProductPlan pmsProductPlan = pmsProductPlanService.selectPmsProductPlanById(productPlanId, false); if (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) { - throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); + throw new ServiceException("该产品里程碑不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName()); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductStatusServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductStatusServiceImpl.java index d27951951..727c94929 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductStatusServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductStatusServiceImpl.java @@ -135,12 +135,12 @@ public class PmsProductStatusServiceImpl implements IPmsProductStatusService { if(statusId!=null){ if (oldStatusId.equals(notStartedStatusId) || oldStatusId.equals(expiredStatusId) || oldStatusId.equals(inProgressStatusId)) { if (!statusId.equals(completedStatusId) && !statusId.equals(closedStatusId)) { - throw new ServiceException("产品计划状态仅允许手动切换为已完成"); + throw new ServiceException("产品里程碑状态仅允许手动切换为已完成"); } } if (oldStatusId.equals(completedStatusId) || oldStatusId.equals(closedStatusId)) { if (!statusId.equals(inProgressStatusId)) { - throw new ServiceException("产品计划状态在已完成状态下仅允许进行重开计划操作"); + throw new ServiceException("产品里程碑状态在已完成状态下仅允许进行重开计划操作"); } } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/task/PmsJob.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/task/PmsJob.java index 64bdfbb41..449a804d1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/task/PmsJob.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/task/PmsJob.java @@ -27,9 +27,9 @@ public class PmsJob { private IPmsProductStatusService pmsProductStatusService; /** - * 每日凌晨检查产品计划: - * 1、未启动的产品计划是否有已达到开始时间的,若存在则设置为已过期 - * 2、进行中的产品计划是否有已过期,若存在则设置为已过期 + * 每日凌晨检查产品里程碑: + * 1、未启动的产品里程碑是否有已达到开始时间的,若存在则设置为已过期 + * 2、进行中的产品里程碑是否有已过期,若存在则设置为已过期 */ @Scheduled(cron = "0 0 0 * * ?") public void checkProductPlanStatus() { @@ -49,7 +49,7 @@ public class PmsJob { if(!nowZeroTime.before(startZeroTime)){ pmsProductPlan.setStatusId(inProgressStatusId); pmsProductPlanMapper.updatePmsProductPlan(pmsProductPlan); - log.info("产品计划【{}】状态发生变更:由[未启动]变为[进行中]", pmsProductPlan.getPlanTitle()); + log.info("产品里程碑【{}】状态发生变更:由[未启动]变为[进行中]", pmsProductPlan.getPlanTitle()); } }); // 获取进行中计划列表,更新状态 @@ -60,7 +60,7 @@ public class PmsJob { if(nowZeroTime.after(endZeroTime)){ pmsProductPlan.setStatusId(expiredStatusId); pmsProductPlanMapper.updatePmsProductPlan(pmsProductPlan); - log.info("产品计划【{}】状态发生变更:由[进行中]变为[已过期]", pmsProductPlan.getPlanTitle()); + log.info("产品里程碑【{}】状态发生变更:由[进行中]变为[已过期]", pmsProductPlan.getPlanTitle()); } }); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsConstants.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsConstants.java index 2b677b074..b3821bf22 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsConstants.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsConstants.java @@ -14,7 +14,7 @@ public class PmsConstants { public final static String USER_NOT_IN_ORG_MSG = "组织成员不存在"; /** - * (状态/优先级)产品计划类型 + * (状态/优先级)产品里程碑类型 */ public final static Integer PRODUCT_STATUS_OR_PRIORITY_PLAN_TYPE = 1; /** @@ -22,23 +22,23 @@ public class PmsConstants { */ public final static Integer PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE = 2; /** - * 产品计划状态-未启动 + * 产品里程碑状态-未启动 */ public final static String PRODUCT_PLAN_NOT_STARTED_STATUS_NAME = "未启动"; /** - * 产品计划状态-进行中 + * 产品里程碑状态-进行中 */ public final static String PRODUCT_PLAN_IN_PROGRESS_STATUS_NAME = "进行中"; /** - * 产品计划状态-已过期 + * 产品里程碑状态-已过期 */ public final static String PRODUCT_PLAN_EXPIRED_STATUS_NAME = "已过期"; /** - * 产品计划状态-已完成 + * 产品里程碑状态-已完成 */ public final static String PRODUCT_PLAN_COMPLETED_STATUS_NAME = "已完成"; /** - * 产品计划状态-已关闭 + * 产品里程碑状态-已关闭 */ public final static String PRODUCT_PLAN_CLOSED_STATUS_NAME = "已关闭"; /** From 9c89e972878d11869c30200d227857ea96384cfd Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Thu, 16 Jan 2025 10:48:23 +0800 Subject: [PATCH 127/270] =?UTF-8?q?fix(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E3=80=81=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=8E=87=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/dashboard/controller/PmsDashboardController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 60a9b605e..d6231efe0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -312,9 +312,11 @@ public class PmsDashboardController extends BaseController { resVo.setRatio(0); //计算 各自的比率 int sum = statusStatVos.stream().mapToInt(ReqStatusStatVo::getNum).sum(); - if (sum > 0){ - Integer reviewedUserReqCount = status2NumMap.getOrDefault(productReqStatus.getName(), 0); - resVo.setRatio(reviewedUserReqCount/sum * 100); + if (sum > 0) { + Integer completedReqSpecsCount = status2NumMap.getOrDefault(productReqStatus.getKey(), 0); + double ratioDouble = (double) completedReqSpecsCount / sum * 100; + int ratio = (int) Math.round(ratioDouble); + resVo.setRatio(ratio); } return resVo; } From 01bf425689ccd417bc5c2ec35ca3431db575376c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 16 Jan 2025 11:22:03 +0800 Subject: [PATCH 128/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E9=87=8D=E6=9E=84):=20=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E5=85=B3=E8=81=94=E9=A1=B9=E7=9B=AE=E4=B8=8D=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../main/resources/mapper/pms/PmsProductRequirementMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index a704a6c06..748d02800 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -334,7 +334,7 @@ create_by = #{createBy}, del_flag = #{delFlag}, requirement_assignee_gitlink_ids = #{requirementAssigneeGitlinkIds}, - pms_project_id = #{pmsProjectId}, + pms_project_id = #{pmsProjectId}, from_id = #{fromId}, project_req_id = #{projectReqId}, type = #{type}, From 730b8b30eddb8885d1617188b243782d8bdd11c9 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Thu, 16 Jan 2025 11:45:43 +0800 Subject: [PATCH 129/270] =?UTF-8?q?fix(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E6=88=91=E8=B4=9F=E8=B4=A3=E7=9A=84?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=95=B0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/dashboard/controller/PmsDashboardController.java | 5 +++++ .../microservices/pms/dashboard/domain/vo/MyDashboardVo.java | 3 +++ 2 files changed, 8 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index d6231efe0..412788134 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -86,6 +86,11 @@ public class PmsDashboardController extends BaseController { pmsProductRequirement.setCreateBy(SecurityUtils.getUsername()); Integer requirementCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirement); myDashboardVo.setProductRequirementCount(requirementCount); + + long assignedMeProductCount = pmsProductList.stream() + .filter(pmsProduct -> pmsProduct.getProductAssigneeGitlinkIds().contains(String.valueOf(SecurityUtils.getGitlinkUserId()))) + .count(); + myDashboardVo.setAssignedMeProductCount((int) assignedMeProductCount); } return success(myDashboardVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyDashboardVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyDashboardVo.java index 587f2545a..e0cabf57b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyDashboardVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/domain/vo/MyDashboardVo.java @@ -11,4 +11,7 @@ public class MyDashboardVo extends IssueTypeTotalCountVo { @ApiModelProperty(value = "产品需求数") private int productRequirementCount; + + @ApiModelProperty(value = "我负责的产品数") + private int assignedMeProductCount; } From ef476d06a8c0899717795305f8f203fbc3088dd5 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 16 Jan 2025 14:00:24 +0800 Subject: [PATCH 130/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E9=87=8D=E6=9E=84):=20=E9=9C=80=E6=B1=82=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E6=A8=A1=E5=9D=97=E4=B8=AD=E6=97=A0=E6=89=80=E5=B1=9E?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E8=B0=83=E6=95=B4=E4=B8=BA=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124520 Signed-off-by: OTTO <731554297@qq.com> --- .../impl/PmsProductModuleServiceImpl.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 0a8a03eea..505061e18 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -59,7 +59,14 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService @Lazy private IPmsProjectTestsheetCasesService pmsProjectTestsheetCasesService; - private final static String NO_MODULE = "无所属模块"; + private static String NO_MODULE(int type) { + if (PmsConstants.PRODUCT_TAG_AND_MODULE_TYPE.equals(type)) { + return "其他需求"; + } + return "无所属模块"; + } + + ; private final static String ALL_MODULE = "全部模块"; /** @@ -169,10 +176,11 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService @Override public int updatePmsProductModule(PmsProductModule pmsProductModule) { - if (pmsProductModule.getId() == -1L || (pmsProductModule.getParentId() != null && pmsProductModule.getParentId() == -1L)) { - throw new ServiceException("[%s]不允许进行操作", NO_MODULE); - } PmsProductModule oldPmsProductModule = selectPmsProductModuleById(pmsProductModule.getId(), true); + if (pmsProductModule.getId() == -1L || (pmsProductModule.getParentId() != null && pmsProductModule.getParentId() == -1L)) { + throw new ServiceException("[%s]不允许进行操作", NO_MODULE(oldPmsProductModule.getType())); + } + if (oldPmsProductModule.getIsFixedModule()) { throw new ServiceException("固定模块不允许进行操作"); } @@ -335,7 +343,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService PmsProductModule noPmsProductModule = new PmsProductModule(); noPmsProductModule.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); noPmsProductModule.setId(-1L); - noPmsProductModule.setModuleName(NO_MODULE); + noPmsProductModule.setModuleName(NO_MODULE(type)); noPmsProductModule.setParentId(0L); noPmsProductModule.setNodeDataCount(noModuleNodeDataCount); noPmsProductModule.setIsFixedModule(true); From 1d9932346591e0d022c2d0997d8e6d0e586c9865 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Tue, 21 Jan 2025 09:25:34 +0800 Subject: [PATCH 131/270] =?UTF-8?q?fix(=E7=9F=A5=E8=AF=86=E5=BA=93):?= =?UTF-8?q?=E6=88=91=E6=94=B6=E8=97=8F=E7=9A=84=E7=9F=A5=E8=AF=86=E5=BA=93?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsDocumentUserFavoriteController.java | 4 ++-- .../document/domain/vo/PmsDocumentFavoriteSearchVo.java | 4 ++++ .../document/service/IPmsDocumentUserFavoriteService.java | 2 +- .../service/impl/PmsDocumentUserFavoriteServiceImpl.java | 8 +++++++- .../src/main/resources/mapper/pms/PmsDocumentMapper.xml | 1 + 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/controller/PmsDocumentUserFavoriteController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/controller/PmsDocumentUserFavoriteController.java index 76a0594ab..778b174ef 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/controller/PmsDocumentUserFavoriteController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/controller/PmsDocumentUserFavoriteController.java @@ -36,10 +36,10 @@ public class PmsDocumentUserFavoriteController extends BaseController * 查询用户收藏文档列表 */ @GetMapping("/list") - public GenericsTableDataInfo list(PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo) + public GenericsTableDataInfo list(@PathVariable String enterpriseIdentifier, PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo) { - return pmsDocumentUserFavoriteService.selectPmsDocumentUserFavoriteList(pmsDocumentFavoriteSearchVo); + return pmsDocumentUserFavoriteService.selectPmsDocumentUserFavoriteList(enterpriseIdentifier, pmsDocumentFavoriteSearchVo); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/domain/vo/PmsDocumentFavoriteSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/domain/vo/PmsDocumentFavoriteSearchVo.java index 2cbc5ed6a..06cc2e80b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/domain/vo/PmsDocumentFavoriteSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/domain/vo/PmsDocumentFavoriteSearchVo.java @@ -30,4 +30,8 @@ public class PmsDocumentFavoriteSearchVo extends BaseEntity @JsonIgnore @ApiModelProperty(value = "用户id", hidden = true) private Long currentUserId; + + @JsonIgnore + @ApiModelProperty(value = "企业id", hidden = true) + private Long pmsEnterpriseId; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/IPmsDocumentUserFavoriteService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/IPmsDocumentUserFavoriteService.java index 2f3abcd00..a44b5ed8f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/IPmsDocumentUserFavoriteService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/IPmsDocumentUserFavoriteService.java @@ -29,5 +29,5 @@ public interface IPmsDocumentUserFavoriteService */ public int deletePmsDocumentUserFavoriteByDocId(Long documentId); - GenericsTableDataInfo selectPmsDocumentUserFavoriteList(PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo); + GenericsTableDataInfo selectPmsDocumentUserFavoriteList(String enterpriseIdentifier, PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentUserFavoriteServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentUserFavoriteServiceImpl.java index feef7cdc4..1559f0df0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentUserFavoriteServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentUserFavoriteServiceImpl.java @@ -11,6 +11,8 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.mapper.PmsDocumentMapper; import com.microservices.pms.document.mapper.PmsDocumentUserFavoriteMapper; import com.microservices.pms.document.service.IPmsDocumentUserFavoriteService; +import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.enterprise.service.impl.PmsEnterpriseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +38,9 @@ public class PmsDocumentUserFavoriteServiceImpl implements IPmsDocumentUserFavor @Autowired private PmsDocumentServiceImpl pmsDocumentService; + @Autowired + private IPmsEnterpriseService pmsEnterpriseService; + /** * 新增用户收藏文档 * @@ -67,8 +72,9 @@ public class PmsDocumentUserFavoriteServiceImpl implements IPmsDocumentUserFavor } @Override - public GenericsTableDataInfo selectPmsDocumentUserFavoriteList(PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo) { + public GenericsTableDataInfo selectPmsDocumentUserFavoriteList(String enterpriseIdentifier, PmsDocumentFavoriteSearchVo pmsDocumentFavoriteSearchVo) { pmsDocumentFavoriteSearchVo.setCurrentUserId(SecurityUtils.getUserId()); + pmsDocumentFavoriteSearchVo.setPmsEnterpriseId(pmsEnterpriseService.selectPmsEnterpriseByIdentifier(enterpriseIdentifier).getId()); List pmsDocumentList = pmsDocumentMapper.selectPmsFavoriteDocumentList(pmsDocumentFavoriteSearchVo); return toPage(pmsDocumentList,pmsDocumentService::buildPmsDocumentVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml index 8a39b39f2..36ad6adc6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml @@ -95,6 +95,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join pms_document_user_favorite as pduf on pduf.pms_document_id = pd.id pduf.user_id = #{currentUserId} + and pd.pms_enterprise_id = #{pmsEnterpriseId} and pd.name like concat('%', #{name}, '%') and pd.doc_type = #{docType} ${params.dataScope} From 40bc06fc115ff6f953bfe633f94d237868a224b8 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Tue, 21 Jan 2025 09:56:38 +0800 Subject: [PATCH 132/270] =?UTF-8?q?fix(=E7=9F=A5=E8=AF=86=E5=BA=93):?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=BB=84=E7=BB=87=E5=86=85=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=90=8C=E5=90=8D=E7=9F=A5=E8=AF=86=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/document/service/impl/PmsDocumentServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java index ddd08b60e..590a42f2d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java @@ -150,7 +150,7 @@ public class PmsDocumentServiceImpl implements IPmsDocumentService checkPmsProjectById(pmsDocument.getPmsProjectId()); checkAuthAndReturnAdminStatus(pmsDocument.getPmsEnterpriseId()); String currentUserName = SecurityUtils.getUsername(); - checkForSameDocumentExistence(pmsDocument.getName(), pmsDocument.getDocType(), pmsDocument.getParentId(), pmsDocument.getPmsProjectId()); + checkForSameDocumentExistence(pmsDocument.getName(), pmsDocument.getDocType(), pmsDocument.getParentId(), pmsDocument.getPmsProjectId(), pmsDocument.getPmsEnterpriseId()); pmsDocument.setCreateTime(DateUtils.getNowDate()); pmsDocument.setCreateBy(currentUserName); return pmsDocumentMapper.insertPmsDocument(pmsDocument); @@ -311,7 +311,7 @@ public class PmsDocumentServiceImpl implements IPmsDocumentService pmsDocument.setCreateTime(DateUtils.getNowDate()); pmsDocument.setUpdateTime(DateUtils.getNowDate()); pmsDocument.setCreateBy(currentUserName); - checkForSameDocumentExistence(pmsDocument.getName(), pmsDocument.getDocType(), pmsDocument.getParentId(), pmsDocument.getPmsProjectId()); + checkForSameDocumentExistence(pmsDocument.getName(), pmsDocument.getDocType(), pmsDocument.getParentId(), pmsDocument.getPmsProjectId(), pmsDocument.getPmsEnterpriseId()); pmsDocumentList.add(pmsDocument); } return pmsDocumentMapper.batchInsertPmsDocument(pmsDocumentList); @@ -324,7 +324,7 @@ public class PmsDocumentServiceImpl implements IPmsDocumentService } } - private void checkForSameDocumentExistence(String name, Integer docType, Long parentId, Long pmsProjectId) { + private void checkForSameDocumentExistence(String name, Integer docType, Long parentId, Long pmsProjectId, Long pmsEnterpriseId) { if (pmsDocumentMapper.countDocumentByNameAndTypeAndParenId(name, docType, parentId, pmsProjectId) > 0) { throw new ServiceException("当前目录已存在同名文档:[%s]", name); } From 67dae46b2263ef3956724b5b5a9aea2571a798cc Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Tue, 21 Jan 2025 09:59:12 +0800 Subject: [PATCH 133/270] =?UTF-8?q?fix(=E7=9F=A5=E8=AF=86=E5=BA=93):?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E7=BB=84=E7=BB=87=E5=86=85=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=90=8C=E5=90=8D=E7=9F=A5=E8=AF=86=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../microservices/pms/document/mapper/PmsDocumentMapper.java | 2 +- .../pms/document/service/impl/PmsDocumentServiceImpl.java | 2 +- .../src/main/resources/mapper/pms/PmsDocumentMapper.xml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/mapper/PmsDocumentMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/mapper/PmsDocumentMapper.java index 529f309ce..4c8842a60 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/mapper/PmsDocumentMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/mapper/PmsDocumentMapper.java @@ -79,7 +79,7 @@ public interface PmsDocumentMapper int countChildDocByIds(@Param("ids") Long[] ids); - int countDocumentByNameAndTypeAndParenId(@Param("name") String name, @Param("docType") Integer docType, @Param("parenId") Long parenId, @Param("pmsProjectId") Long pmsProjectId); + int countDocumentByNameAndTypeAndParenId(@Param("name") String name, @Param("docType") Integer docType, @Param("parenId") Long parenId, @Param("pmsProjectId") Long pmsProjectId, @Param("pmsEnterpriseId") Long pmsEnterpriseId); int deletePmsDocumentByIdWithoutAuthCheck(@Param("docId") Long docId); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java index 590a42f2d..24d28a868 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/document/service/impl/PmsDocumentServiceImpl.java @@ -325,7 +325,7 @@ public class PmsDocumentServiceImpl implements IPmsDocumentService } private void checkForSameDocumentExistence(String name, Integer docType, Long parentId, Long pmsProjectId, Long pmsEnterpriseId) { - if (pmsDocumentMapper.countDocumentByNameAndTypeAndParenId(name, docType, parentId, pmsProjectId) > 0) { + if (pmsDocumentMapper.countDocumentByNameAndTypeAndParenId(name, docType, parentId, pmsProjectId, pmsEnterpriseId) > 0) { throw new ServiceException("当前目录已存在同名文档:[%s]", name); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml index 36ad6adc6..09af9d367 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsDocumentMapper.xml @@ -217,6 +217,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where `name` = #{name} and doc_type = #{docType} and pms_project_id = #{pmsProjectId} + and pms_enterprise_id = #{pmsEnterpriseId} and parent_id = #{parenId} From a0a1ec3d3d7bc7cdcc70be02666a8b1ec6b56be2 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Tue, 21 Jan 2025 11:23:21 +0800 Subject: [PATCH 134/270] =?UTF-8?q?fix(=E7=BB=84=E7=BB=87=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0):=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E3=80=81=E4=BA=A7=E5=93=81=E8=A7=84=E6=A0=BC=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/product/domain/vo/PmsRequirementStatResVo.java | 2 +- .../microservices/pms/product/domain/vo/ReqStatusStatVo.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java index 16ac4b544..9d98dbca8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsRequirementStatResVo.java @@ -11,5 +11,5 @@ public class PmsRequirementStatResVo { private List pmsProductStatVos; @ApiModelProperty(value = "统计的比率") - private Integer ratio; + private Integer ratio=0; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java index 2ab6bf0eb..c7db611d7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ReqStatusStatVo.java @@ -11,5 +11,5 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class ReqStatusStatVo extends EnumCommonVo { - private Integer num; + private Integer num=0; } From bf5e1524326435633fab9afc3b1462bb84219f3d Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 21 Jan 2025 11:38:36 +0800 Subject: [PATCH 135/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E9=87=8D=E6=9E=84):=20=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=EF=BC=88=E7=94=A8=E6=88=B7=E9=9C=80=E6=B1=82+?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=A7=84=E6=A0=BC=EF=BC=89=E8=AF=84=E5=AE=A1?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/bug/124540 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/domain/vo/ProductReqReviewVo.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java index 47ca3856f..e23c31987 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java @@ -9,6 +9,7 @@ import lombok.Data; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import java.text.SimpleDateFormat; import java.util.Date; /** @@ -61,10 +62,12 @@ public class ProductReqReviewVo { record.setOperation(reviewStatus); record.setOperator(operator); record.setOperatingTime(reviewTime); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String reviewTimeStr = formatter.format(reviewTime); JSONObject contentJson = new JSONObject(); contentJson.put("reviewUser", reviewUser); contentJson.put("reviewContent", reviewContent); - contentJson.put("reviewTime", reviewTime); + contentJson.put("reviewTime", reviewTimeStr); record.setContent(contentJson.toJSONString()); return record; } From a56a63ca781ae27ab6a9e6d81c6516b1b45dea3c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 22 Jan 2025 11:15:33 +0800 Subject: [PATCH 136/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=BA=93=E7=A7=BB=E5=85=A5=E5=88=B6=E5=93=81=E6=97=B6=E8=8B=A5?= =?UTF-8?q?=E5=88=B6=E5=93=81=E4=B8=BA=E4=B8=AD=E6=96=87=E4=BC=9A=E8=A2=AB?= =?UTF-8?q?urlEncode=E4=B8=A4=E6=AC=A1=E5=AF=BC=E8=87=B4=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复方案:urlEncode前判断字符串是否已经被urlEncode过 1. 使用URLDecoder.decode对字符串进行解码。 2. 再使用URLEncoder.encode对解码后的字符串重新编码。 3. 如果重新编码后的字符串与原始字符串相同,则说明原始字符串是经过URL编码的 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/ServletUtils.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index 2ef6f6350..dbe4225ed 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -228,7 +228,11 @@ public class ServletUtils { StringBuilder stringBuffer = new StringBuilder(); String[] strings = str.split("/"); for (String string : strings) { - stringBuffer.append("/").append(URLEncoder.encode(string, Constants.UTF8)); + // 如果url已经进行过urlEncode 不重复进行Encode + if (!isUrlEncoded(string)) { + string = URLEncoder.encode(string, Constants.UTF8); + } + stringBuffer.append("/").append(string); } return stringBuffer.toString().replaceAll("\\+", "%20"); } catch (UnsupportedEncodingException e) { @@ -236,6 +240,22 @@ public class ServletUtils { } } + /** + * 判断字符串是否经过URLEncode + * 1. 使用URLDecoder.decode对字符串进行解码。 + * 2. 再使用URLEncoder.encode对解码后的字符串重新编码。 + * 3. 如果重新编码后的字符串与原始字符串相同,则说明原始字符串是经过URL编码的 + * + * @param encodedString 需encode的字符串 + * @return 是否经过URLEncode + * @throws UnsupportedEncodingException 编码异常 + */ + public static boolean isUrlEncoded(String encodedString) throws UnsupportedEncodingException { + String decodedString = URLDecoder.decode(encodedString, "UTF-8"); + String reencodedString = URLEncoder.encode(decodedString, "UTF-8"); + return encodedString.equalsIgnoreCase(reencodedString); + } + /** * 内容解码 * From 9a1b5e01257b3c4ba5958a9d5e2f5acf27cfc31c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 11:01:24 +0800 Subject: [PATCH 137/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94?= =?UTF-8?q?=E5=BD=93=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 产品库/制品库增加字段:来源类型 2. 产品库移入文档时将来源类型设置为文档 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/pms/enums/FromTypeEnum.java | 34 +++++++++++++++++++ .../PmsProductLibraryController.java | 31 ++++++++--------- .../domain/PmsProductLibraryComponent.java | 8 ++--- .../domain/vo/ComponentRawInputVo.java | 3 ++ .../vo/PmsProductLibraryComponentDataVo.java | 3 ++ ...o.java => ProductDocComponentInputVo.java} | 6 ++-- .../service/IPmsProductLibraryService.java | 4 +-- .../impl/PmsProductLibraryServiceImpl.java | 14 +++++--- .../pms/PmsProductLibraryComponentMapper.xml | 14 ++++---- 9 files changed, 79 insertions(+), 38 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/{ProductComponentInputVo.java => ProductDocComponentInputVo.java} (90%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java new file mode 100644 index 000000000..654756b37 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java @@ -0,0 +1,34 @@ +package com.microservices.pms.enums; + +import com.microservices.common.core.exception.ServiceException; +import io.swagger.annotations.ApiModel; +import lombok.Getter; + +/** + * @author OTTO + */ +@Getter +@ApiModel("来源类型") +public enum FromTypeEnum { + COMMON("common", "普通类型"), + PIPELINE("pipeline", "流水线类型"), + DOC("doc", "文档类型"); + + private final String key; + private final String name; + + FromTypeEnum(String key, String name) { + this.key = key; + this.name = name; + } + + + public static FromTypeEnum getByKey(String key) { + for (FromTypeEnum typeEnum : FromTypeEnum.values()) { + if (typeEnum.key.equals(key)) { + return typeEnum; + } + } + throw new ServiceException("该来源类型不存在(来源类型[%s])", key); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index fa89c4b71..dd4b07274 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -113,22 +113,6 @@ public class PmsProductLibraryController extends BaseController { return toAjax(pmsProductLibraryService.deletePmsProductLibraryByName(enterpriseIdentifier, name)); } - - /** - * 上传产品库制品 - */ -// @RequiresPermissions("pms:pmsProductLibraryComponent:add") - @Log(title = "产品库制品", businessType = BusinessType.INSERT) - @PostMapping("/{name}") - @ApiOperation(value = "上传知识库文档") - public AjaxResult uploadProductAsset(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String name, - @Valid @RequestBody ProductComponentInputVo productComponentInputVo) { - productComponentInputVo.setProductRepoName(name); - productComponentInputVo.setEnterpriseIdentifier(enterpriseIdentifier); - return toAjax(pmsProductLibraryService.uploadProductAsset(productComponentInputVo)); - } - /** * 产品库查询制品列表 */ @@ -317,6 +301,21 @@ public class PmsProductLibraryController extends BaseController { return toAjax(pmsProductLibraryService.addDockerComponentToProductRepo(dockerComponentAddToProductRepoVo)); } + /** + * 上传产品库制品 + */ +// @RequiresPermissions("pms:pmsProductLibraryComponent:add") + @Log(title = "产品库制品", businessType = BusinessType.INSERT) + @PostMapping("/{name}") + @ApiOperation(value = "上传知识库文档") + public AjaxResult uploadProductAsset(@PathVariable String enterpriseIdentifier, + @ApiParam(value = "产品库标识", required = true) @PathVariable String name, + @Valid @RequestBody ProductDocComponentInputVo productDocComponentInputVo) { + productDocComponentInputVo.setProductRepoName(name); + productDocComponentInputVo.setEnterpriseIdentifier(enterpriseIdentifier); + return toAjax(pmsProductLibraryService.uploadProductAsset(productDocComponentInputVo)); + } + /** * 产品库打包 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java index aabfb5cd7..9bf92ebc6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryComponent.java @@ -119,12 +119,8 @@ public class PmsProductLibraryComponent extends BaseEntity { @JsonInclude(JsonInclude.Include.NON_EMPTY) private String reservedField2; - /** - * 预留字段3 - */ - @ApiModelProperty(value = "预留字段3") - @JsonInclude(JsonInclude.Include.NON_EMPTY) - private String reservedField3; + @ApiModelProperty(value = "来源类型") + private String fromType; public void setNexusMavenAssetVo(NexusAssetVo nexusAssetVo) { String composeId = Base64.base64ToDecoderString(nexusAssetVo.getId()); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java index 0199b0dae..fb6b2a56a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ComponentRawInputVo.java @@ -46,6 +46,8 @@ public class ComponentRawInputVo { @ApiModelProperty(value = "目录:上传文件的目录(例如/path/to/files/)") @NotNull(message = "目录不能为空") private String directory; + @NotNull(message = "来源类型") + private String fromType = "common"; public String getNexusRepoName() { if (ProductLibraryRepositoriesFormatEnum.isProduct(format)) { @@ -87,6 +89,7 @@ public class ComponentRawInputVo { } } pmsProductLibraryComponent.setPmsEnterpriseIdentifier(enterpriseIdentifier); + pmsProductLibraryComponent.setFromType(fromType); return pmsProductLibraryComponent; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java index 7b7d0fe6e..1a8307af6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryComponentDataVo.java @@ -67,4 +67,7 @@ public class PmsProductLibraryComponentDataVo extends BaseEntityVo { */ @ApiModelProperty(value = "制品下载地址") private String downloadUrl; + + @ApiModelProperty(value = "来源类型") + private String fromType; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java similarity index 90% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java index 67eb2c950..e1ebfecc7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductComponentInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java @@ -1,6 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; +import com.microservices.pms.enums.FromTypeEnum; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -19,8 +20,8 @@ import java.util.List; * @date 2024-07-04 */ @Data -@ApiModel("产品制品输入对象") -public class ProductComponentInputVo { +@ApiModel("文档制品输入对象") +public class ProductDocComponentInputVo { @ApiModelProperty(value = "产品库标识", hidden = true) private String productRepoName; @ApiModelProperty(value = "组织标识", hidden = true) @@ -43,6 +44,7 @@ public class ProductComponentInputVo { BeanUtils.copyProperties(this, target); target.setRepoName(productRepoName); target.setAssetList(assetList); + target.setFromType(FromTypeEnum.DOC.getKey()); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java index ff9af761b..6324f2bd8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java @@ -94,10 +94,10 @@ public interface IPmsProductLibraryService { /** * 上传产品库制品 * - * @param productComponentInputVo 产品库制品输入对象 + * @param productDocComponentInputVo 产品库制品输入对象 * @return 结果 */ - Boolean uploadProductAsset(ProductComponentInputVo productComponentInputVo); + Boolean uploadProductAsset(ProductDocComponentInputVo productDocComponentInputVo); GenericsTableDataInfo selectDocList(DocSearchVo docSearchVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index f3da13059..1261deb82 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,6 +15,7 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; +import com.microservices.pms.enums.FromTypeEnum; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; @@ -106,6 +107,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { EscapeUtil.removeExtraSlashOfUrl( String.format("%s/%s", repo.getUrl(), component.getPath())))); pmsCommonService.setBaseEntityVo(pmsProductLibraryComponentDataVo, component); + pmsProductLibraryComponentDataVo.setFromType( + FromTypeEnum.getByKey(component.getFromType()).getName() + ); return pmsProductLibraryComponentDataVo; } @@ -202,13 +206,13 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } @Override - public Boolean uploadProductAsset(ProductComponentInputVo productComponentInputVo) { + public Boolean uploadProductAsset(ProductDocComponentInputVo productDocComponentInputVo) { PmsProductLibraryRepositories repo = - selectPmsProductLibraryByName(productComponentInputVo.getEnterpriseIdentifier(), productComponentInputVo.getProductRepoName()); + selectPmsProductLibraryByName(productDocComponentInputVo.getEnterpriseIdentifier(), productDocComponentInputVo.getProductRepoName()); List assetList = new ArrayList<>(); - PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productComponentInputVo.getEnterpriseIdentifier()); - for (Long docId : productComponentInputVo.getDocList()) { + PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productDocComponentInputVo.getEnterpriseIdentifier()); + for (Long docId : productDocComponentInputVo.getDocList()) { PmsDocumentDetailVo pmsDocument = pmsDocumentService.selectPmsDocumentDetailVoByIdAndEnterpriseId(docId, pmsEnterprise.getId()); if (!Objects.equals(pmsDocument.getDocType(), 2) && !Objects.equals(pmsDocument.getDocType(), 3)) { throw new ServiceException("产品库文档类型仅允许为文档类型或附件类型(文档Id[%s])", pmsDocument.getId()); @@ -251,7 +255,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { assetList.add(assetRawInputVo); } - return pmsProductLibraryComponentService.insertRawComponent(productComponentInputVo.toComponentRawInputVo(assetList)); + return pmsProductLibraryComponentService.insertRawComponent(productDocComponentInputVo.toComponentRawInputVo(assetList)); } @Override diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml index 7871a3cca..68e426b95 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml @@ -23,7 +23,7 @@ - + @@ -45,7 +45,7 @@ attributes, reserved_field_1, reserved_field_2, - reserved_field_3 + from_type from pms_product_library_component @@ -68,7 +68,7 @@ pplc.attributes, pplc.reserved_field_1, pplc.reserved_field_2, - pplc.reserved_field_3, + pplc.from_type, pe.enterprise_identifier, pplr.format from pms_product_library_component as pplc @@ -92,7 +92,7 @@ and attributes = #{attributes} and reserved_field_1 = #{reservedField1} and reserved_field_2 = #{reservedField2} - and reserved_field_3 = #{reservedField3} + and from_type = #{fromType} @@ -164,7 +164,7 @@ attributes, reserved_field_1, reserved_field_2, - reserved_field_3, + from_type, #{identifier}, @@ -184,7 +184,7 @@ #{attributes}, #{reservedField1}, #{reservedField2}, - #{reservedField3}, + #{fromType}, @@ -208,7 +208,7 @@ attributes = #{attributes}, reserved_field_1 = #{reservedField1}, reserved_field_2 = #{reservedField2}, - reserved_field_3 = #{reservedField3}, + from_type = #{fromType}, where id = #{id} From 0d63456fb9470ff238dfce6ecd780eba90fd2284 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 11:19:17 +0800 Subject: [PATCH 138/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94?= =?UTF-8?q?=E5=BD=93=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 普通制品和Docker制品移入产品库时默认添加前缀Software 2. 文档制品移入产品库时默认添加前缀Document 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductLibraryComponentPathEnum.java | 42 +++++++++++++++++++ ...va => ProductLibraryRepoFromTypeEnum.java} | 8 ++-- .../domain/vo/ProductDocComponentInputVo.java | 4 +- .../impl/PmsProductLibraryServiceImpl.java | 20 ++++++++- 4 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java rename microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/{FromTypeEnum.java => ProductLibraryRepoFromTypeEnum.java} (70%) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java new file mode 100644 index 000000000..08f4e0a6c --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -0,0 +1,42 @@ +package com.microservices.pms.enums; + +import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.html.EscapeUtil; +import io.swagger.annotations.ApiModel; +import lombok.Getter; + +/** + * @author OTTO + */ +@Getter +@ApiModel("产品库制品路径前缀") +public enum ProductLibraryComponentPathEnum { + SOFTWARE("Software", "软件包"), + DOC("Document", "文档"); + + private final String key; + private final String name; + + ProductLibraryComponentPathEnum(String key, String name) { + this.key = key; + this.name = name; + } + + + public static ProductLibraryComponentPathEnum getByKey(String key) { + for (ProductLibraryComponentPathEnum typeEnum : ProductLibraryComponentPathEnum.values()) { + if (typeEnum.key.equals(key)) { + return typeEnum; + } + } + throw new ServiceException("该产品库制品路径前缀不存在(产品库制品路径前缀[%s])", key); + } + + public static String getSoftwareFixedPath(String directory) { + return EscapeUtil.removeExtraSlashOfUrl(SOFTWARE.key + "/" + directory); + } + + public static String getDocFixedPath(String directory) { + return EscapeUtil.removeExtraSlashOfUrl(DOC.key + "/" + directory); + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java similarity index 70% rename from microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java rename to microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java index 654756b37..733760456 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/FromTypeEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryRepoFromTypeEnum.java @@ -9,7 +9,7 @@ import lombok.Getter; */ @Getter @ApiModel("来源类型") -public enum FromTypeEnum { +public enum ProductLibraryRepoFromTypeEnum { COMMON("common", "普通类型"), PIPELINE("pipeline", "流水线类型"), DOC("doc", "文档类型"); @@ -17,14 +17,14 @@ public enum FromTypeEnum { private final String key; private final String name; - FromTypeEnum(String key, String name) { + ProductLibraryRepoFromTypeEnum(String key, String name) { this.key = key; this.name = name; } - public static FromTypeEnum getByKey(String key) { - for (FromTypeEnum typeEnum : FromTypeEnum.values()) { + public static ProductLibraryRepoFromTypeEnum getByKey(String key) { + for (ProductLibraryRepoFromTypeEnum typeEnum : ProductLibraryRepoFromTypeEnum.values()) { if (typeEnum.key.equals(key)) { return typeEnum; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java index e1ebfecc7..ef7888e9a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductDocComponentInputVo.java @@ -1,7 +1,7 @@ package com.microservices.pms.productLibrary.domain.vo; import com.microservices.common.core.utils.bean.BeanUtils; -import com.microservices.pms.enums.FromTypeEnum; +import com.microservices.pms.enums.ProductLibraryRepoFromTypeEnum; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -44,7 +44,7 @@ public class ProductDocComponentInputVo { BeanUtils.copyProperties(this, target); target.setRepoName(productRepoName); target.setAssetList(assetList); - target.setFromType(FromTypeEnum.DOC.getKey()); + target.setFromType(ProductLibraryRepoFromTypeEnum.DOC.getKey()); return target; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 1261deb82..661424267 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -15,7 +15,8 @@ import com.microservices.pms.document.domain.vo.PmsDocumentVo; import com.microservices.pms.document.service.IPmsDocumentService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; -import com.microservices.pms.enums.FromTypeEnum; +import com.microservices.pms.enums.ProductLibraryComponentPathEnum; +import com.microservices.pms.enums.ProductLibraryRepoFromTypeEnum; import com.microservices.pms.product.domain.PmsProduct; import com.microservices.pms.product.service.IPmsProductService; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; @@ -83,6 +84,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Autowired private IPmsProductService pmsProductService; + public final static String DOC_TYPE_PATH = "Document"; + public final static String SOFTWARE_TYPE_PATH = "Software"; + @Override public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { List pmsProductLibraryComponentList = @@ -108,7 +112,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { String.format("%s/%s", repo.getUrl(), component.getPath())))); pmsCommonService.setBaseEntityVo(pmsProductLibraryComponentDataVo, component); pmsProductLibraryComponentDataVo.setFromType( - FromTypeEnum.getByKey(component.getFromType()).getName() + ProductLibraryRepoFromTypeEnum.getByKey(component.getFromType()).getName() ); return pmsProductLibraryComponentDataVo; } @@ -210,6 +214,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { PmsProductLibraryRepositories repo = selectPmsProductLibraryByName(productDocComponentInputVo.getEnterpriseIdentifier(), productDocComponentInputVo.getProductRepoName()); + // 产品库制品添加默认前缀 + productDocComponentInputVo.setDirectory(ProductLibraryComponentPathEnum.getDocFixedPath( + productDocComponentInputVo.getDirectory() + )); List assetList = new ArrayList<>(); PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(productDocComponentInputVo.getEnterpriseIdentifier()); for (Long docId : productDocComponentInputVo.getDocList()) { @@ -342,6 +350,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { throw new ServiceException("Docker制品移入不能使用该接口"); } + // 产品库制品添加默认前缀 + commonAssetAddToProductRepoVo.setDirectory(ProductLibraryComponentPathEnum.getSoftwareFixedPath( + commonAssetAddToProductRepoVo.getDirectory() + )); List nexusAssetResultDataVoList = new ArrayList<>(); for (String assetId : commonAssetAddToProductRepoVo.getAssetIdList()) { NexusComponentResultVo nexusAssetResultVo = pmsProductLibraryComponentService.getAssetDetailByAssetId(commonAssetAddToProductRepoVo.getEnterpriseIdentifier(), commonAssetAddToProductRepoVo.getRepoName(), null, assetId, false); @@ -438,6 +450,10 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { if (!ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(repo.getFormat())) { throw new ServiceException("当前接口仅允许进行Docker移入产品库操作"); } + // 产品库制品添加默认前缀 + dockerComponentAddToProductRepoVo.setDirectory(ProductLibraryComponentPathEnum.getSoftwareFixedPath( + dockerComponentAddToProductRepoVo.getDirectory() + )); List nexusComponentResultDataVoList = new ArrayList<>(); for (String componentId : dockerComponentAddToProductRepoVo.getComponentIdList()) { NexusComponentResultVo nexusAssetResultVo = pmsProductLibraryComponentService.getComponentDetailByComponentId(dockerComponentAddToProductRepoVo.getEnterpriseIdentifier(), dockerComponentAddToProductRepoVo.getRepoName(), null, componentId, false); From 8e6620ad2e31425b0d332985f180c7e54d16c5ca Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 14:28:32 +0800 Subject: [PATCH 139/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BC=98=E5=8C=96=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=BA=93=E6=89=93=E5=8C=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 文件服务开始打包时创建redis key(0:代表打包未完成;1:代表打包已完成;-1:代表打包失败,需要重新打包) 2. 异步执行打包任务时,若发生任何异常则将key值设置为-1,若打包完成则将key值设为1 3. 调用获取打包文件下载接口时,检查redis key值;若键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息;若键值为-1,代表打包失败,需要重新打包;若调用远程接口获取文件信息失败仍提示用户打包失败需要重新打包 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/constant/CacheConstants.java | 15 ++++-- .../common/core/utils/ServletUtils.java | 25 +++++++++- .../impl/SysFileInfoAsyncServiceImpl.java | 11 ++++- .../service/impl/SysFileInfoServiceImpl.java | 5 ++ .../PmsProductLibraryController.java | 7 +-- .../PmsProductLibraryRepositoriesMapper.java | 7 +++ .../IPmsProductLibraryAsyncService.java | 3 +- .../service/IPmsProductLibraryService.java | 5 +- .../PmsProductLibraryAsyncServiceImpl.java | 4 +- .../impl/PmsProductLibraryServiceImpl.java | 46 +++++++++++++------ .../PmsProductLibraryRepositoriesMapper.xml | 5 ++ 11 files changed, 107 insertions(+), 26 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java index 8b81ff6af..86e0488e1 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/CacheConstants.java @@ -202,7 +202,7 @@ public class CacheConstants { /** * Gitlink组织开通企业是否完成 Key前缀 */ - public final static String GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY = "gitlink_org_id_open_enterprise_key:"; + private final static String GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY = "gitlink_org_id_open_enterprise_key:"; public static String getGitlinkOrgIdOpenEnterpriseKey(Long gitlinkOrgId) { return GITLINK_ORG_ID_OPEN_ENTERPRISE_KEY + gitlinkOrgId; @@ -211,11 +211,11 @@ public class CacheConstants { /** * 专区项目Gitlink信息 Key前缀 */ - public final static String ZONE_PROJECT_GITLINK_INFO = "zone_project_gitlink_info:"; + private final static String ZONE_PROJECT_GITLINK_INFO = "zone_project_gitlink_info:"; /** * 专区下项目分数排序 Key前缀 */ - public final static String ZONE_PROJECT_SORT_BY_SCORE = "zone_project_sort_by_score:"; + private final static String ZONE_PROJECT_SORT_BY_SCORE = "zone_project_sort_by_score:"; public static String getZoneProjectGitlinkInfo(Long gitlinkProjectId) { return ZONE_PROJECT_GITLINK_INFO + gitlinkProjectId; @@ -228,4 +228,13 @@ public class CacheConstants { public static String getAllZoneProjectSortByScore(Long zoneId) { return ZONE_PROJECT_SORT_BY_SCORE + "*:" + zoneId + ":*"; } + + /** + * 文件打包是否完成(0:代表未完成;1:代表已完成;-1:代表打包失败,需要重新打包) + */ + private final static String PACKAGE_FILE_IS_FINISH = "packageFileIsFinish:"; + + public static String getPackageFileIsFinish(String fileIdentifier) { + return PACKAGE_FILE_IS_FINISH + fileIdentifier; + } } diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index dbe4225ed..41c11eb1e 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -218,7 +218,7 @@ public class ServletUtils { } /** - * 内容编码(排除斜杠) + * 内容编码(排除斜杠并且不重复编码) * * @param str 内容 * @return 编码后的内容 @@ -240,6 +240,29 @@ public class ServletUtils { } } + /** + * 内容编码(排除斜杠并且支持重复编码) + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncodeExcludeSlashesApplyDuplicate(String str) { + try { + StringBuilder stringBuffer = new StringBuilder(); + String[] strings = str.split("/"); + for (String string : strings) { + // 如果url已经进行过urlEncode 不重复进行Encode + if (!isUrlEncoded(string)) { + string = URLEncoder.encode(string, Constants.UTF8); + } + stringBuffer.append("/").append(string); + } + return stringBuffer.toString().replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + /** * 判断字符串是否经过URLEncode * 1. 使用URLDecoder.decode对字符串进行解码。 diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java index e69e0d43d..4a40a5e5a 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java @@ -1,9 +1,11 @@ package com.microservices.file.service.impl; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.common.redis.service.RedisService; import com.microservices.file.service.ISysFileInfoAsyncService; import com.microservices.file.service.ISysFileInfoService; import com.microservices.file.utils.CustomExecutorFactory; @@ -41,6 +43,8 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { */ @Value("${file.path}") private String localFilePath; + @Autowired + private RedisService redisService; @Override public void asyncPackagedFile(String fileIdentifier, HashMap packagedStructure, String zipFileName, String type, String hierarchy) { @@ -70,6 +74,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { String filePath = localFilePath + fileInfo.getFilePath(); File file = new File(filePath); if (!file.exists()) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); throw new IOException("该文件不存在"); } // 拷贝文件到打包目录 @@ -82,6 +87,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { org.apache.commons.io.FileUtils.copyURLToFile(new URL(fileSource), packagedFilePath.toFile()); } } catch (IOException e) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); logger.error("打包文件时出现异常,需压缩文件处理失败:{}", e.getMessage()); throw new ServiceException("打包文件时出现异常,需压缩文件处理失败!"); } @@ -91,7 +97,8 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { ZipUtils.toZip(tempPackagedPath.toString(), Files.newOutputStream(zipFilePath), true); File zipFile = zipFilePath.toFile(); if (!zipFile.exists()) { - throw new ServiceException("打包文件时出现异常:文件压缩失败"); + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); + throw new ServiceException("打包文件时出现异常:压缩文件不存在"); } String filePath = EscapeUtil.removeExtraSlashOfUrl("/" + type + "/" + hierarchy + "/" + datePath + "/" + fullZipFileName); SysFileInfo sysFileInfo = new SysFileInfo(fileIdentifier, zipFile, filePath); @@ -101,9 +108,11 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { org.apache.commons.io.FileUtils.deleteDirectory(tempPackagedPath.toFile()); } } catch (IOException e) { + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); logger.error("打包文件时出现异常:{}", e.getMessage()); throw new ServiceException("打包文件时出现异常!"); } + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), 1); }); } } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index 8df0a8ed0..eb0d148fb 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -4,6 +4,7 @@ package com.microservices.file.service.impl; import com.alibaba.fastjson2.JSONObject; import com.j256.simplemagic.ContentInfo; import com.j256.simplemagic.ContentInfoUtil; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.Constants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; @@ -14,6 +15,7 @@ import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.common.core.utils.uuid.IdUtils; import com.microservices.common.httpClient.domain.GitLinkRequestUrl; import com.microservices.common.httpClient.util.GitLinkRequestHelper; +import com.microservices.common.redis.service.RedisService; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.file.mapper.SysFileInfoMapper; import com.microservices.file.service.ISysFileInfoAsyncService; @@ -84,6 +86,8 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { */ @Value("${file.domain}") public String domain; + @Autowired + private RedisService redisService; @Override public SysFileInfo selectSysFileInfoByFileObjectName(String fileObjectName) { @@ -492,6 +496,7 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { @Override public String packagedFile(HashMap packagedStructure, String zipFileName, String type, String hierarchy) { String fileIdentifier = genFileIdentifier(); + redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), 0); fileInfoAsyncService.asyncPackagedFile(fileIdentifier, packagedStructure, zipFileName, type, hierarchy); return fileIdentifier; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index dd4b07274..4bf4805ee 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -324,8 +324,9 @@ public class PmsProductLibraryController extends BaseController { @PostMapping("/packaged/{productRepoName}") @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName) { - return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName)); + @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") String node) { + return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); } /** @@ -336,6 +337,6 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "获取产品库打包下载地址") public GenericsAjaxResult getPackagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName) { - return genericsSuccess(pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName)); + return pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java index acb73b533..3dbea5899 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java @@ -139,4 +139,11 @@ public interface PmsProductLibraryRepositoriesMapper { * @return 制品库 */ PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesByAlias(@Param("alias") String alias, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); + + /** + * 设置产品库打包文件标识为空 + * + * @param id 产品库id + */ + void setProductLibraryPackagedFileIdentifierNull(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java index 5a213cfd1..654a345a2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryAsyncService.java @@ -52,6 +52,7 @@ public interface IPmsProductLibraryAsyncService { * 打包产品库 * * @param productRepo 产品库 + * @param node */ - void packagedProduct(PmsProductLibraryRepositories productRepo); + void packagedProduct(PmsProductLibraryRepositories productRepo, String node); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java index 6324f2bd8..2d5aa7576 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java @@ -1,5 +1,6 @@ package com.microservices.pms.productLibrary.service; +import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import com.microservices.pms.productLibrary.domain.vo.*; @@ -78,7 +79,7 @@ public interface IPmsProductLibraryService { boolean addDockerComponentToProductRepo(DockerComponentAddToProductRepoVo dockerComponentAddToProductRepoVo); - boolean packagedProduct(String enterpriseIdentifier, String productRepoName); + boolean packagedProduct(String enterpriseIdentifier, String productRepoName, String node); int updatePmsProductLibrary(PmsProductLibraryRepositories pmsProductLibraryRepositories); @@ -89,7 +90,7 @@ public interface IPmsProductLibraryService { * @param productRepoName 产品库名称 * @return 产品库打包对象 */ - ProductPackagedResultVo getPackagedProduct(String enterpriseIdentifier, String productRepoName); + GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName); /** * 上传产品库制品 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index fe211254c..736b0932c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -200,7 +200,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn } @Override - public void packagedProduct(PmsProductLibraryRepositories productRepo) { + public void packagedProduct(PmsProductLibraryRepositories productRepo, String node) { CustomExecutorFactory.threadPoolExecutor.execute(() -> { pmsProductLibraryRepositoriesService.lockRepository(productRepo.getPmsEnterpriseIdentifier(), productRepo.getId()); try { @@ -210,7 +210,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn for (PmsProductLibraryComponent component : componentList) { String fileSource = component.getFileIdentifier(); if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashes(component.getPath())); + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); } packagedStructure.put(component.getPath(), fileSource); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 661424267..5f004572f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -1,13 +1,16 @@ package com.microservices.pms.productLibrary.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.PageUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.common.core.web.domain.GenericsAjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.redis.service.RedisService; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.document.domain.vo.PmsDocumentDetailVo; @@ -83,9 +86,8 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { private IPmsCommonService pmsCommonService; @Autowired private IPmsProductService pmsProductService; - - public final static String DOC_TYPE_PATH = "Document"; - public final static String SOFTWARE_TYPE_PATH = "Software"; + @Autowired + private RedisService redisService; @Override public GenericsTableDataInfo selectComponentList(PmsProductLibraryComponentSearchVo search) { @@ -186,7 +188,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } @Override - public ProductPackagedResultVo getPackagedProduct(String enterpriseIdentifier, String productRepoName) { + public GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName) { ProductPackagedResultVo productPackagedResultVo = new ProductPackagedResultVo(); PmsProductLibraryRepositories productLibraryRepositories = selectPmsProductLibraryByName(enterpriseIdentifier, productRepoName); String packagedFileIdentifier = productLibraryRepositories.getPackagedFileIdentifier(); @@ -194,19 +196,37 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { productPackagedResultVo.setIsPackaged(false); } else { productPackagedResultVo.setIsPackaged(true); - try { - SysFileInfo sysFileInfo = FeignUtils.getReturnData( - remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) - ); + Integer isFinish = redisService.getCacheObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + if (isFinish != null) { + redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + } + // 键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息 + if (isFinish == null || isFinish == 1) { + SysFileInfo sysFileInfo = null; + try { + sysFileInfo = FeignUtils.getReturnData( + remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) + ); + } catch (ServiceException e) { + log.error("获取打包文件失败:{}", e.getMessage()); + return packageError(productLibraryRepositories, productPackagedResultVo); + } if (sysFileInfo != null) { productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); productPackagedResultVo.setFileName(sysFileInfo.getFileOriginName()); } - } catch (Exception e) { - log.error("获取产品库打包文件失败:{}", e.getMessage()); + } else if (isFinish == -1) { + // 键值为-1,代表打包失败,需要重新打包 + return packageError(productLibraryRepositories, productPackagedResultVo); } } - return productPackagedResultVo; + return GenericsAjaxResult.success(productPackagedResultVo); + } + + private GenericsAjaxResult packageError(PmsProductLibraryRepositories productLibraryRepositories, ProductPackagedResultVo productPackagedResultVo) { + pmsProductLibraryRepositoriesMapper.setProductLibraryPackagedFileIdentifierNull(productLibraryRepositories.getId()); + productPackagedResultVo.setIsPackaged(false); + return GenericsAjaxResult.error("打包失败,请重新打包!", productPackagedResultVo); } @Override @@ -516,9 +536,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { @Override - public boolean packagedProduct(String enterpriseIdentifier, String productRepoName) { + public boolean packagedProduct(String enterpriseIdentifier, String productRepoName, String node) { PmsProductLibraryRepositories productRepo = selectPmsProductLibraryByName(enterpriseIdentifier, productRepoName); - pmsProductLibraryAsyncService.packagedProduct(productRepo); + pmsProductLibraryAsyncService.packagedProduct(productRepo, node); return true; } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml index 28deedaf8..076259a70 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml @@ -239,6 +239,11 @@ where id = #{id} + + update pms_product_library_repositories + set packaged_file_identifier = null + where id = #{id} + delete From 366118bca0f6eebd86291f1a3f659d660d0d6a49 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 15:00:51 +0800 Subject: [PATCH 140/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94?= =?UTF-8?q?=E5=BD=93=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品库打包接口新增node参数代表打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有) 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/ServletUtils.java | 5 +--- .../ProductLibraryComponentPathEnum.java | 24 +++++++++++++++++++ .../PmsProductLibraryController.java | 2 +- .../PmsProductLibraryAsyncServiceImpl.java | 11 +++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index 41c11eb1e..950ebe448 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -251,10 +251,7 @@ public class ServletUtils { StringBuilder stringBuffer = new StringBuilder(); String[] strings = str.split("/"); for (String string : strings) { - // 如果url已经进行过urlEncode 不重复进行Encode - if (!isUrlEncoded(string)) { - string = URLEncoder.encode(string, Constants.UTF8); - } + string = URLEncoder.encode(string, Constants.UTF8); stringBuffer.append("/").append(string); } return stringBuffer.toString().replaceAll("\\+", "%20"); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java index 08f4e0a6c..edf702e4b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -1,6 +1,7 @@ package com.microservices.pms.enums; import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; import io.swagger.annotations.ApiModel; import lombok.Getter; @@ -39,4 +40,27 @@ public enum ProductLibraryComponentPathEnum { public static String getDocFixedPath(String directory) { return EscapeUtil.removeExtraSlashOfUrl(DOC.key + "/" + directory); } + + public static String getChineseFixedPath(String path) { + if (path.startsWith(SOFTWARE.key)) { + return path.replaceFirst(SOFTWARE.key, SOFTWARE.name); + } + if (path.startsWith(DOC.key)) { + return path.replaceFirst(DOC.key, DOC.name); + } + return path; + } + + public static boolean pathIsNeedPackaged(String node, String path) { + if (StringUtils.isNotEmpty(node)) { + if (node.equals(SOFTWARE.key)) { + return path.startsWith(SOFTWARE.key); + } + if (node.equals(DOC.key)) { + return path.startsWith(DOC.key); + } + } + + return true; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index 4bf4805ee..87ab865a7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -325,7 +325,7 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, - @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") String node) { + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam String node) { return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 736b0932c..bf6778687 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -5,6 +5,7 @@ import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; +import com.microservices.pms.enums.ProductLibraryComponentPathEnum; import com.microservices.pms.productLibrary.domain.PmsProductLibraryComponent; import com.microservices.pms.productLibrary.domain.PmsProductLibraryRepositories; import com.microservices.pms.productLibrary.domain.ProductLibraryRepositoriesFormatEnum; @@ -208,11 +209,13 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn pmsProductLibraryComponentService.selectPmsProductLibraryComponentListByDatabase(productRepo.getId()); HashMap packagedStructure = new HashMap<>(); for (PmsProductLibraryComponent component : componentList) { - String fileSource = component.getFileIdentifier(); - if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); + if (ProductLibraryComponentPathEnum.pathIsNeedPackaged(node, component.getPath())) { + String fileSource = component.getFileIdentifier(); + if (StringUtils.isEmpty(fileSource)) { + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); + } + packagedStructure.put(ProductLibraryComponentPathEnum.getChineseFixedPath(component.getPath()), fileSource); } - packagedStructure.put(component.getPath(), fileSource); } String fileIdentifier = FeignUtils.getReturnData( remoteFileService.packagedFile( From b6e57421880e44807ec5473a3c99e0fc60a20bc5 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 16:11:22 +0800 Subject: [PATCH 141/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94?= =?UTF-8?q?=E5=BD=93=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 产品库打包支持打包所有文件、打包软件包和打包文档 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductLibraryComponentPathEnum.java | 48 +++++++++++++++ .../PmsProductLibraryController.java | 15 ++--- .../domain/PmsProductLibraryRepositories.java | 4 +- .../service/IPmsProductLibraryService.java | 3 +- .../PmsProductLibraryAsyncServiceImpl.java | 4 +- .../impl/PmsProductLibraryServiceImpl.java | 58 +++++++++++-------- .../PmsProductLibraryRepositoriesMapper.xml | 16 ++--- 7 files changed, 104 insertions(+), 44 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java index edf702e4b..4e276370b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -1,5 +1,7 @@ package com.microservices.pms.enums; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; @@ -12,6 +14,7 @@ import lombok.Getter; @Getter @ApiModel("产品库制品路径前缀") public enum ProductLibraryComponentPathEnum { + ALL("_All", "所有"), SOFTWARE("Software", "软件包"), DOC("Document", "文档"); @@ -63,4 +66,49 @@ public enum ProductLibraryComponentPathEnum { return true; } + + public static String getPackagedFileJson(String node, String packagedFileIdentifiersJson, String fileIdentifier) { + JSONObject packagedFileIdentifiersJsonObj; + if (StringUtils.isNotEmpty(packagedFileIdentifiersJson) && JSON.isValid(packagedFileIdentifiersJson)) { + packagedFileIdentifiersJsonObj = JSONObject.parseObject(packagedFileIdentifiersJson); + } else { + packagedFileIdentifiersJsonObj = new JSONObject(); + } + if (StringUtils.isNotEmpty(node)) { + if (SOFTWARE.key.equals(node)) { + packagedFileIdentifiersJsonObj.put(SOFTWARE.key, fileIdentifier); + return packagedFileIdentifiersJsonObj.toJSONString(); + } + if (DOC.key.equals(node)) { + packagedFileIdentifiersJsonObj.put(DOC.key, fileIdentifier); + return packagedFileIdentifiersJsonObj.toJSONString(); + } + } + packagedFileIdentifiersJsonObj.put(ALL.key, fileIdentifier); + return packagedFileIdentifiersJsonObj.toJSONString(); + } + + public static String getPackagedFileIdentifierFromJson(String node, JSONObject packagedFileIdentifiersJsonObj) { + if (StringUtils.isNotEmpty(node)) { + if (SOFTWARE.key.equals(node)) { + return packagedFileIdentifiersJsonObj.getString(SOFTWARE.key); + } + if (DOC.key.equals(node)) { + return packagedFileIdentifiersJsonObj.getString(DOC.key); + } + } + return packagedFileIdentifiersJsonObj.getString(ALL.key); + } + + public static String getPackagedFileTag(String node) { + if (StringUtils.isNotEmpty(node)) { + if (SOFTWARE.key.equals(node)) { + return "(" + SOFTWARE.name + ")"; + } + if (DOC.key.equals(node)) { + return "(" + DOC.name + ")"; + } + } + return ""; + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index 87ab865a7..ced05cb5a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -55,7 +55,7 @@ public class PmsProductLibraryController extends BaseController { @GetMapping("/byRepoName/{repoName}") @ApiOperation(value = "获取产品库详情") public GenericsAjaxResult getByRepoName(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String repoName) { + @ApiParam(value = "产品库标识", required = true) @PathVariable String repoName) { return GenericsAjaxResult.success(pmsProductLibraryService.selectPmsProductLibraryDataByName(enterpriseIdentifier, repoName)); } @@ -243,9 +243,9 @@ public class PmsProductLibraryController extends BaseController { @GetMapping("/{productRepoName}/{repoName}/keyComponent/list") @ApiOperation(value = "制品库查询关键制品列表") public GenericsAjaxResult>> keyComponentList(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable("productRepoName") String productRepoName, - @ApiParam(value = "制品库标识", required = true) @PathVariable("repoName") String repoName, - @Valid ComponentSearchVo componentSearchVo) { + @ApiParam(value = "产品库标识", required = true) @PathVariable("productRepoName") String productRepoName, + @ApiParam(value = "制品库标识", required = true) @PathVariable("repoName") String repoName, + @Valid ComponentSearchVo componentSearchVo) { componentSearchVo.setRepositoryName(repoName); componentSearchVo.setProductRepoName(productRepoName); NexusComponentResultVo> result = @@ -325,7 +325,7 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, - @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam String node) { + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam(required = false) String node) { return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); } @@ -336,7 +336,8 @@ public class PmsProductLibraryController extends BaseController { @GetMapping("/packaged/{productRepoName}") @ApiOperation(value = "获取产品库打包下载地址") public GenericsAjaxResult getPackagedProduct(@PathVariable String enterpriseIdentifier, - @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName) { - return pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName); + @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, + @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam(required = false) String node) { + return pmsProductLibraryService.getPackagedProduct(enterpriseIdentifier, productRepoName, node); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java index 059701390..53d2298b1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java @@ -88,8 +88,8 @@ public class PmsProductLibraryRepositories extends BaseEntity { private String snapshotName; - @ApiModelProperty(value = "打包的文件标识") - private String packagedFileIdentifier; + @ApiModelProperty(value = "打包的文件标识(JSON对象)") + private String packagedFileIdentifiersJson; @ApiModelProperty(value = "关联产品标识") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java index 2d5aa7576..e16a6f68f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryService.java @@ -88,9 +88,10 @@ public interface IPmsProductLibraryService { * * @param enterpriseIdentifier 企业标识 * @param productRepoName 产品库名称 + * @param node * @return 产品库打包对象 */ - GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName); + GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName, String node); /** * 上传产品库制品 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index bf6778687..24a6ad5ed 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -220,12 +220,12 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn String fileIdentifier = FeignUtils.getReturnData( remoteFileService.packagedFile( packagedStructure, - String.format("product-%s-%s", productRepo.getAlias(), DateUtils.dateTimeNow()), + String.format("product-%s-%s%s", productRepo.getAlias(), DateUtils.dateTimeNow(), ProductLibraryComponentPathEnum.getPackagedFileTag(node)), "pms", productRepo.getPmsEnterpriseIdentifier() + "/productLibrary", SecurityConstants.INNER) ); - productRepo.setPackagedFileIdentifier(fileIdentifier); + productRepo.setPackagedFileIdentifiersJson(ProductLibraryComponentPathEnum.getPackagedFileJson(node, productRepo.getPackagedFileIdentifiersJson(), fileIdentifier)); pmsProductLibraryService.updatePmsProductLibrary(productRepo); } finally { pmsProductLibraryRepositoriesService.unlockRepository(productRepo.getPmsEnterpriseIdentifier(), productRepo.getId()); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 5f004572f..4e63ac8c9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -1,5 +1,6 @@ package com.microservices.pms.productLibrary.service.impl; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.SecurityConstants; @@ -188,37 +189,44 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } @Override - public GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName) { + public GenericsAjaxResult getPackagedProduct(String enterpriseIdentifier, String productRepoName, String node) { ProductPackagedResultVo productPackagedResultVo = new ProductPackagedResultVo(); PmsProductLibraryRepositories productLibraryRepositories = selectPmsProductLibraryByName(enterpriseIdentifier, productRepoName); - String packagedFileIdentifier = productLibraryRepositories.getPackagedFileIdentifier(); + String packagedFileIdentifiersJson = productLibraryRepositories.getPackagedFileIdentifiersJson(); + if (StringUtils.isEmpty(packagedFileIdentifiersJson) || !JSON.isValid(packagedFileIdentifiersJson)) { + productPackagedResultVo.setIsPackaged(false); + return GenericsAjaxResult.success(productPackagedResultVo); + } + + JSONObject packagedFileIdentifiersJsonObj = JSONObject.parseObject(packagedFileIdentifiersJson); + String packagedFileIdentifier = ProductLibraryComponentPathEnum.getPackagedFileIdentifierFromJson(node, packagedFileIdentifiersJsonObj); if (StringUtils.isEmpty(packagedFileIdentifier)) { productPackagedResultVo.setIsPackaged(false); - } else { - productPackagedResultVo.setIsPackaged(true); - Integer isFinish = redisService.getCacheObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); - if (isFinish != null) { - redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); - } - // 键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息 - if (isFinish == null || isFinish == 1) { - SysFileInfo sysFileInfo = null; - try { - sysFileInfo = FeignUtils.getReturnData( - remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) - ); - } catch (ServiceException e) { - log.error("获取打包文件失败:{}", e.getMessage()); - return packageError(productLibraryRepositories, productPackagedResultVo); - } - if (sysFileInfo != null) { - productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); - productPackagedResultVo.setFileName(sysFileInfo.getFileOriginName()); - } - } else if (isFinish == -1) { - // 键值为-1,代表打包失败,需要重新打包 + return GenericsAjaxResult.success(productPackagedResultVo); + } + productPackagedResultVo.setIsPackaged(true); + Integer isFinish = redisService.getCacheObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + if (isFinish != null) { + redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); + } + // 键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息 + if (isFinish == null || isFinish == 1) { + SysFileInfo sysFileInfo = null; + try { + sysFileInfo = FeignUtils.getReturnData( + remoteFileService.getFileByFileIdentifier(packagedFileIdentifier, SecurityConstants.INNER) + ); + } catch (ServiceException e) { + log.error("获取打包文件失败:{}", e.getMessage()); return packageError(productLibraryRepositories, productPackagedResultVo); } + if (sysFileInfo != null) { + productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); + productPackagedResultVo.setFileName(sysFileInfo.getFileOriginName()); + } + } else if (isFinish == -1) { + // 键值为-1,代表打包失败,需要重新打包 + return packageError(productLibraryRepositories, productPackagedResultVo); } return GenericsAjaxResult.success(productPackagedResultVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml index 076259a70..a26a43ab9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml @@ -21,7 +21,7 @@ - + @@ -43,7 +43,7 @@ pplr.alias, pplr.snapshot_name, pplr.format, - pplr.packaged_file_identifier, + pplr.packaged_file_identifiers_json, pplr.product_identifier, pplr.version, pplr.tag, @@ -187,7 +187,7 @@ attributes, alias, snapshot_name, - packaged_file_identifier, + packaged_file_identifiers_json, format, product_identifier, version, @@ -207,7 +207,7 @@ #{attributes}, #{alias}, #{snapshotName}, - #{packagedFileIdentifier}, + #{packagedFileIdentifiersJson}, #{format}, #{productIdentifier}, #{version}, @@ -231,7 +231,9 @@ attributes = #{attributes}, alias = #{alias}, snapshot_name = #{snapshotName}, - packaged_file_identifier = #{packagedFileIdentifier}, + packaged_file_identifiers_json = + #{packagedFileIdentifiersJson}, + format = #{format}, product_identifier = #{productIdentifier}, version = #{version}, @@ -239,9 +241,9 @@ where id = #{id} - + update pms_product_library_repositories - set packaged_file_identifier = null + set packaged_file_identifiers_json = null where id = #{id} From e3e6d37fd483ca062725f7a1b53ec07ec73fd9e1 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 23 Jan 2025 16:34:25 +0800 Subject: [PATCH 142/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E5=BA=94?= =?UTF-8?q?=E5=BD=93=E5=8C=BA=E5=88=86=E6=96=87=E6=A1=A3=E4=B8=8E=E5=88=B6?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复当打包文件标识异常或打包异常时无法将文件标识置空的bug 关联Issue:https://pm.gitlink.org.cn/Gitlink/projects/228/demand/124517 Signed-off-by: OTTO <731554297@qq.com> --- .../ProductLibraryComponentPathEnum.java | 27 +++++++++++++++++++ .../PmsProductLibraryRepositoriesMapper.java | 6 ----- .../impl/PmsProductLibraryServiceImpl.java | 11 +++++--- .../PmsProductLibraryRepositoriesMapper.xml | 5 ---- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java index 4e276370b..7b989a96c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -111,4 +111,31 @@ public enum ProductLibraryComponentPathEnum { } return ""; } + + public static String setPackagedFileIdentifierNull(String node, String packagedFileIdentifiersJson) { + JSONObject packagedFileIdentifiersJsonObj; + if (StringUtils.isNotEmpty(packagedFileIdentifiersJson) && JSON.isValid(packagedFileIdentifiersJson)) { + packagedFileIdentifiersJsonObj = JSONObject.parseObject(packagedFileIdentifiersJson); + } else { + packagedFileIdentifiersJsonObj = new JSONObject(); + } + if (StringUtils.isNotEmpty(node)) { + if (SOFTWARE.key.equals(node)) { + if (packagedFileIdentifiersJsonObj.containsKey(SOFTWARE.key)) { + packagedFileIdentifiersJsonObj.remove(SOFTWARE.key); + } + return packagedFileIdentifiersJsonObj.toJSONString(); + } + if (DOC.key.equals(node)) { + if (packagedFileIdentifiersJsonObj.containsKey(DOC.key)) { + packagedFileIdentifiersJsonObj.remove(DOC.key); + } + return packagedFileIdentifiersJsonObj.toJSONString(); + } + } + if (packagedFileIdentifiersJsonObj.containsKey(ALL.key)) { + packagedFileIdentifiersJsonObj.remove(ALL.key); + } + return packagedFileIdentifiersJsonObj.toJSONString(); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java index 3dbea5899..be6966f3c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryRepositoriesMapper.java @@ -140,10 +140,4 @@ public interface PmsProductLibraryRepositoriesMapper { */ PmsProductLibraryRepositories selectPmsProductLibraryRepositoriesByAlias(@Param("alias") String alias, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier); - /** - * 设置产品库打包文件标识为空 - * - * @param id 产品库id - */ - void setProductLibraryPackagedFileIdentifierNull(Long id); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 4e63ac8c9..2bb575333 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -218,7 +218,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { ); } catch (ServiceException e) { log.error("获取打包文件失败:{}", e.getMessage()); - return packageError(productLibraryRepositories, productPackagedResultVo); + return packageError(node, productLibraryRepositories, productPackagedResultVo); } if (sysFileInfo != null) { productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); @@ -226,13 +226,16 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } } else if (isFinish == -1) { // 键值为-1,代表打包失败,需要重新打包 - return packageError(productLibraryRepositories, productPackagedResultVo); + return packageError(node, productLibraryRepositories, productPackagedResultVo); } return GenericsAjaxResult.success(productPackagedResultVo); } - private GenericsAjaxResult packageError(PmsProductLibraryRepositories productLibraryRepositories, ProductPackagedResultVo productPackagedResultVo) { - pmsProductLibraryRepositoriesMapper.setProductLibraryPackagedFileIdentifierNull(productLibraryRepositories.getId()); + private GenericsAjaxResult packageError(String node, PmsProductLibraryRepositories productLibraryRepositories, ProductPackagedResultVo productPackagedResultVo) { + productLibraryRepositories.setPackagedFileIdentifiersJson( + ProductLibraryComponentPathEnum.setPackagedFileIdentifierNull(node, productLibraryRepositories.getPackagedFileIdentifiersJson()) + ); + updatePmsProductLibrary(productLibraryRepositories); productPackagedResultVo.setIsPackaged(false); return GenericsAjaxResult.error("打包失败,请重新打包!", productPackagedResultVo); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml index a26a43ab9..31d769fc8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryRepositoriesMapper.xml @@ -241,11 +241,6 @@ where id = #{id} - - update pms_product_library_repositories - set packaged_file_identifiers_json = null - where id = #{id} - delete From 782e2e7e5a2eec6c47820a68df0334a9e71fed38 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 23 Jan 2025 16:48:40 +0800 Subject: [PATCH 143/270] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E7=BA=BF=E6=89=A7=E8=A1=8C=E8=AF=A6=E6=83=85=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PmsCiPipelinesController.java | 20 +++++++ .../domain/vo/PmsCiPipelinesCardRunVo.java | 53 ++++++++++++++++++ .../domain/vo/PmsCiPipelinesCardVo.java | 43 +++++++++++++++ .../domain/vo/PmsCiPipelinesDetailVo.java | 2 + .../pipeline/mapper/PmsCiPipelinesMapper.java | 1 + .../service/IPmsCiPipelinesService.java | 1 + .../impl/PmsCiPipelinesServiceImpl.java | 54 ++++++++++++++++--- .../pms/utils/PmsGitLinkRequestUrl.java | 41 ++++++++++++++ .../mapper/pms/PmsCiPipelinesMapper.xml | 24 +++++++++ 9 files changed, 231 insertions(+), 8 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardRunVo.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java index 4e3d29c4f..1cc549a2b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java @@ -54,6 +54,26 @@ public class PmsCiPipelinesController extends BaseController return pmsCiPipelinesService.selectPmsCiPipelinesList(enterpriseIdentifier, pipelineName, pipelineType); } + /** + * 查询流水线卡片列表 + */ +// @RequiresPermissions("pms:pipelines:list") + @GetMapping("/cardList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "当前记录起始索引", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示记录数", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "orderByColumn", value = "排序列(更新时间:updateTime,创建时间:createTime)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "isAsc", value = "排序的方向desc或者asc,默认asc", paramType = "query", dataType = "String") + }) + @ApiOperation("流水线卡片列表") + public GenericsTableDataInfo cardList(@ApiParam(name = "enterpriseIdentifier", value = "企业标识") @PathVariable String enterpriseIdentifier, + @ApiParam("流水线名称搜索") @RequestParam(required = false) String pipelineName, + @ApiParam("流水线构建类型 1-声明式流水线 2-图形化流水线") @RequestParam(required = false) Integer pipelineType) + { + + return pmsCiPipelinesService.selectPmsCiPipelinesCardList(enterpriseIdentifier, pipelineName, pipelineType); + } + /** * 获取流水线详细信息 */ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardRunVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardRunVo.java new file mode 100644 index 000000000..71bacc762 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardRunVo.java @@ -0,0 +1,53 @@ +package com.microservices.pms.pipeline.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 流水线卡片执行详情对象 + * + * @author xxq + * @date 2025-01-23 + */ +@Data +@ApiModel("流水线卡片执行详情对象") +public class PmsCiPipelinesCardRunVo { + + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "总执行数量") + private Long total; + + @ApiModelProperty(value = "成功执行数量") + private Long success; + + @ApiModelProperty(value = "失败执行数量") + private Long failure; + + @ApiModelProperty(value = "是否定时任务") + private Boolean schedule; + + @ApiModelProperty(value = "执行状态") + private Long status; + + @ApiModelProperty(value = "开始时间") + private Long started; + + @ApiModelProperty(value = "结束时间") + private Long stopped; + + @ApiModelProperty(value = "执行时长") + private Long length; + + @ApiModelProperty(value = "创建时间") + private Long created; + + @ApiModelProperty(value = "更新时间") + private Long updated; + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardVo.java new file mode 100644 index 000000000..175295468 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesCardVo.java @@ -0,0 +1,43 @@ +package com.microservices.pms.pipeline.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 流水线卡片详情对象 pms_ci_pipelines + * + * @author xxq + * @date 2025-01-23 + */ +@Data +@ApiModel("流水线卡片详情对象") +public class PmsCiPipelinesCardVo { + + private Long id; + + /** + * 仓库owner + */ + @ApiModelProperty(value = "仓库owner") + private String owner; + + /** + * 仓库标识 + */ + @ApiModelProperty(value = "仓库标识") + private String repoIdentifier; + + @ApiModelProperty(value = "仓库名") + private String repoName; + + + @ApiModelProperty(value = "url") + private String url; + + @ApiModelProperty(value = "流水线列表") + private List pipelinesList; + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesDetailVo.java index f271bbf1a..e4c75e967 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/domain/vo/PmsCiPipelinesDetailVo.java @@ -77,4 +77,6 @@ public class PmsCiPipelinesDetailVo @ApiModelProperty(value = "流水线模板JSON") private JSONObject pipelineTemplateJson; + @ApiModelProperty(value = "流水线执行详情") + private PmsCiPipelinesCardRunVo pmsCiPipelinesCardRunVo; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java index 2bb1037e5..d8519b67e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java @@ -30,6 +30,7 @@ public interface PmsCiPipelinesMapper * @return 流水线集合 */ public List selectPmsCiPipelinesList(PmsCiPipelines pmsCiPipelines); + public List selectPmsCiPipelinesCardList(PmsCiPipelines pmsCiPipelines); /** * 新增流水线 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java index a427e2715..68a5bcb2a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java @@ -32,6 +32,7 @@ public interface IPmsCiPipelinesService * @return 流水线集合 */ public GenericsTableDataInfo selectPmsCiPipelinesList(String enterpriseIdentifier, String pipelineName, Integer pipelineType); + public GenericsTableDataInfo selectPmsCiPipelinesCardList(String enterpriseIdentifier, String pipelineName, Integer pipelineType); /** * 新增流水线 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java index a631a87b5..a5f6ca9c9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java @@ -1,15 +1,12 @@ package com.microservices.pms.pipeline.service.impl; -import java.net.URISyntaxException; -import java.util.Date; -import java.util.List; - import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.YamlValidatorUtils; +import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.httpClient.domain.EntryDto; import com.microservices.common.httpClient.domain.FileEntryDto; @@ -19,21 +16,26 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.pipeline.domain.PmsCiPipelineGraphics; +import com.microservices.pms.pipeline.domain.PmsCiPipelines; import com.microservices.pms.pipeline.domain.vo.*; +import com.microservices.pms.pipeline.mapper.PmsCiPipelinesMapper; import com.microservices.pms.pipeline.service.IPmsCiPipelineGraphicsService; -import com.microservices.pms.utils.PmsConstants; +import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; import com.microservices.pms.utils.PmsGitLinkRequestUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.microservices.pms.pipeline.mapper.PmsCiPipelinesMapper; -import com.microservices.pms.pipeline.domain.PmsCiPipelines; -import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import static com.microservices.common.core.utils.JSONUtils.convertObjectToJSONObject; import static com.microservices.common.core.utils.PageUtils.startPage; @@ -104,6 +106,28 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { return toPage(pipelinesList, this::buildPmsCiPipelinesDetailVo); } + /** + * 查询流水线卡片列表 + * + * @param enterpriseIdentifier 企业标识 + * @param pipelineName 流水线名 + * @param pipelineType + * @return 流水线 + */ + @Override + public GenericsTableDataInfo selectPmsCiPipelinesCardList(String enterpriseIdentifier, String pipelineName, Integer pipelineType) { + PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(enterpriseIdentifier); + PmsCiPipelines pmsCiPipelines = new PmsCiPipelines(); + pmsCiPipelines.setPipelineName(pipelineName); + pmsCiPipelines.setPmsEnterpriseId(pmsEnterprise.getId()); + pmsCiPipelines.setPipelineType(pipelineType); + startPage(); + List pipelinesList = pmsCiPipelinesMapper.selectPmsCiPipelinesCardList(pmsCiPipelines); + String workflows = Optional.ofNullable(pipelinesList).orElse(Collections.emptyList()).stream().map(PmsCiPipelines::getFileName).collect(Collectors.joining(",")); + List result = gitLinkRequestHelper.doGetToObjectList(PmsGitLinkRequestUrl.GET_ACTION_RUN_DATA(pmsCiPipelines.getOwner(), workflows), PmsCiPipelinesCardRunVo.class); + return toPage(pipelinesList, x -> this.buildPmsCiPipelinesCardDetailVo(x, result)); + } + private PmsCiPipelinesDetailVo buildPmsCiPipelinesDetailVo(PmsCiPipelines pmsCiPipelines) { PmsCiPipelinesDetailVo pmsCiPipelinesDetailVo = new PmsCiPipelinesDetailVo(); BeanUtils.copyProperties(pmsCiPipelines, pmsCiPipelinesDetailVo); @@ -111,6 +135,20 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { return pmsCiPipelinesDetailVo; } + private PmsCiPipelinesCardVo buildPmsCiPipelinesCardDetailVo(PmsCiPipelines pmsCiPipelines, List result) { + PmsCiPipelinesCardVo pmsCiPipelinesCardVo = new PmsCiPipelinesCardVo(); + BeanUtils.copyProperties(pmsCiPipelines, pmsCiPipelinesCardVo); + pmsCiPipelinesCardVo.setUrl(EscapeUtil.removeExtraSlashOfUrl(gitLinkRequestHelper.gitLinkUrl + "/" + pmsCiPipelines.getOwner() + "/" + pmsCiPipelines.getRepoIdentifier())); + PmsCiPipelines queryCiPipelines = new PmsCiPipelines(); + queryCiPipelines.setRepoIdentifier(pmsCiPipelines.getRepoIdentifier()); + queryCiPipelines.setOwner(pmsCiPipelines.getOwner()); + queryCiPipelines.setPmsEnterpriseId(pmsCiPipelines.getPmsEnterpriseId()); + List pipelinesList = pmsCiPipelinesMapper.selectPmsCiPipelinesCardList(queryCiPipelines); + pmsCiPipelinesCardVo.setPipelinesList(Optional.ofNullable(pipelinesList).orElse(Collections.emptyList()).stream().map(this::buildPmsCiPipelinesDetailVo).collect(Collectors.toList())); + pmsCiPipelinesCardVo.getPipelinesList().forEach(x -> x.setPmsCiPipelinesCardRunVo(result.stream().filter(a -> a.getName().equals(x.getFileName())).findFirst().orElse(null))); + return pmsCiPipelinesCardVo; + } + /** * 新增流水线 * diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index e84cc5a4e..656da1a2a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -395,4 +395,45 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { public static GitLinkRequestUrl GET_PIPELINE_RUN_RESULTS(String owner, String repoIdentifier, String run){ return getGitLinkRequestUrl(String.format("/api/v1/%s/%s/pipelines/run_results.json?run_id=%s", owner, repoIdentifier, run)); } + + public static GitLinkRequestUrl GET_ACTION_NODES(String keyword, Integer pageNum, Integer pageSize) { + String path = String.format("/api/action/nodes.json?search=%s", keyword); + if (pageNum != null && pageSize != null) { + path = path + String.format("&page=%s&limit=%s", pageNum, pageSize); + } + return getGitLinkRequestUrl(path); + } + + public static GitLinkRequestUrl CREATE_ACTION_NODE(Long actionNodeId) { + return getGitLinkRequestUrl(String.format("api/action/nodes/%s", actionNodeId)); + } + + public static GitLinkRequestUrl GET_ACTION_NODE_TYPES(String keyword, Integer pageNum, Integer pageSize){ + String path = String.format("/api/action/nodes.json?search=%s", keyword); + if (pageNum != null && pageSize != null) { + path = path + String.format("&page=%s&limit=%s", pageNum, pageSize); + } + return getGitLinkRequestUrl(path); + } + + public static GitLinkRequestUrl CREATE_ACTION_NODE_TYPE(Long actionNodeTypeId) { + return getGitLinkRequestUrl(String.format("api/action/node_types/%s", actionNodeTypeId)); + } + + public static GitLinkRequestUrl GET_ACTION_TEMPLATES(String keyword, Integer pageNum, Integer pageSize){ + String path = String.format("/api/action/templates.json?search=%s", keyword); + if (pageNum != null && pageSize != null) { + path = path + String.format("&page=%s&limit=%s", pageNum, pageSize); + } + return getGitLinkRequestUrl(path); + } + + public static GitLinkRequestUrl CREATE_ACTION_TEMPLATE(Long actionTemplateId) { + return getGitLinkRequestUrl(String.format("api/action/action_templates/%s", actionTemplateId)); + } + + public static GitLinkRequestUrl GET_ACTION_RUN_DATA(String owner, String workflows) { + return getGitLinkRequestUrl(String.format("api/pm/action_runs?owner_id=%s&workflows=%s", owner, workflows)); + } + } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml index 155a15d00..bc08dde9a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml @@ -55,6 +55,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${params.dataScope} + + + From f72c3684fe721ba8fd0784d23651b38ab339a89c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 11 Feb 2025 15:49:58 +0800 Subject: [PATCH 155/270] =?UTF-8?q?feat(=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84):=20=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E7=BA=BFid=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../controller/PmsCiPipelinesController.java | 98 ++++++++----------- .../pipeline/mapper/PmsCiPipelinesMapper.java | 2 + .../service/IPmsCiPipelinesService.java | 4 + .../impl/PmsCiPipelinesServiceImpl.java | 64 +++++++++--- .../pms/utils/PmsGitLinkRequestUrl.java | 4 + .../mapper/pms/PmsCiPipelinesMapper.xml | 6 ++ 6 files changed, 107 insertions(+), 71 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java index 4e3d29c4f..8ce0dc3d9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/controller/PmsCiPipelinesController.java @@ -5,32 +5,25 @@ import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; import com.microservices.common.log.annotation.Log; import com.microservices.common.log.enums.BusinessType; -import com.microservices.pms.pipeline.domain.PmsCiPipelines; import com.microservices.pms.pipeline.domain.vo.*; import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import com.microservices.common.log.annotation.Log; -import com.microservices.common.log.enums.BusinessType; -import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; -import com.microservices.common.core.web.controller.BaseController; -import com.microservices.common.core.web.domain.AjaxResult; import javax.servlet.http.HttpServletResponse; /** * 流水线Controller - * + * * @author wanjia * @date 2024-03-02 */ @RestController @RequestMapping("/{enterpriseIdentifier}/pipelines") @Api(tags = "项目管理-流水线相关接口") -public class PmsCiPipelinesController extends BaseController -{ +public class PmsCiPipelinesController extends BaseController { @Autowired private IPmsCiPipelinesService pmsCiPipelinesService; @@ -48,8 +41,7 @@ public class PmsCiPipelinesController extends BaseController @ApiOperation("流水线列表") public GenericsTableDataInfo list(@ApiParam(name = "enterpriseIdentifier", value = "企业标识") @PathVariable String enterpriseIdentifier, @ApiParam("流水线名称搜索") @RequestParam(required = false) String pipelineName, - @ApiParam("流水线构建类型 1-声明式流水线 2-图形化流水线") @RequestParam(required = false) Integer pipelineType) - { + @ApiParam("流水线构建类型 1-声明式流水线 2-图形化流水线") @RequestParam(required = false) Integer pipelineType) { return pmsCiPipelinesService.selectPmsCiPipelinesList(enterpriseIdentifier, pipelineName, pipelineType); } @@ -60,8 +52,7 @@ public class PmsCiPipelinesController extends BaseController // @RequiresPermissions("pms:pipelines:query") @GetMapping(value = "/{id}") @ApiOperation("获取流水线详情") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return success(pmsCiPipelinesService.selectPmsCiPipelinesById(id)); } @@ -73,8 +64,7 @@ public class PmsCiPipelinesController extends BaseController @PostMapping @ApiOperation("新增流水线") public AjaxResult add(@ApiParam(name = "enterpriseIdentifier", value = "企业标识") @PathVariable String enterpriseIdentifier, - @RequestBody @Validated PmsCiPipelinesInputVo pmsCiPipelinesInputVo) - { + @RequestBody @Validated PmsCiPipelinesInputVo pmsCiPipelinesInputVo) { return success(pmsCiPipelinesService.insertPmsCiPipelines(pmsCiPipelinesInputVo, enterpriseIdentifier)); } @@ -85,8 +75,7 @@ public class PmsCiPipelinesController extends BaseController @Log(title = "流水线", businessType = BusinessType.UPDATE) @PutMapping @ApiOperation("编辑流水线") - public AjaxResult edit(@RequestBody PmsCiPipelinesUpdateVo pmsCiPipelinesUpdateVo) - { + public AjaxResult edit(@RequestBody PmsCiPipelinesUpdateVo pmsCiPipelinesUpdateVo) { return toAjax(pmsCiPipelinesService.updatePmsCiPipelines(pmsCiPipelinesUpdateVo.toPmsCiPipelines())); } @@ -98,8 +87,7 @@ public class PmsCiPipelinesController extends BaseController @PostMapping(value = "/settingFile") @ApiOperation("编辑流水线配置文件") public AjaxResult editPipelineFile(@ApiParam(name = "enterpriseIdentifier", value = "企业标识") @PathVariable String enterpriseIdentifier, - @RequestBody PmsCiPipelineFileInputVo pmsCiPipelineFileInputVo) - { + @RequestBody PmsCiPipelineFileInputVo pmsCiPipelineFileInputVo) { return toAjax(pmsCiPipelinesService.createOrUpdatePmsCiPipelineFile(pmsCiPipelineFileInputVo)); } @@ -108,9 +96,8 @@ public class PmsCiPipelinesController extends BaseController */ // @RequiresPermissions("pms:pipelines:remove") @Log(title = "流水线", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(pmsCiPipelinesService.deletePmsCiPipelinesByIds(ids)); } @@ -131,8 +118,7 @@ public class PmsCiPipelinesController extends BaseController // @RequiresPermissions("pms:pipelines:list") @GetMapping(value = "/{id}/actions/runs") @ApiOperation("流水线执行记录列表") - public AjaxResult getPipelineRunsList(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, PmsCiPipelinePageVo pmsCiPipelinePageVo) - { + public AjaxResult getPipelineRunsList(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, PmsCiPipelinePageVo pmsCiPipelinePageVo) { return success(pmsCiPipelinesService.selectPipelineRunsList(id, pmsCiPipelinePageVo)); } @@ -142,11 +128,10 @@ public class PmsCiPipelinesController extends BaseController // @RequiresPermissions("pms:pipelines:query") @PostMapping(value = "/{id}/actions/runs/{run}/jobs/{job}") @ApiOperation("流水线执行记录任务详情") - public AjaxResult getPipelineRunsJob(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @ApiParam(name = "run", value = "执行记录序号")@PathVariable String run, - @ApiParam(name = "job", value = "执行任务序号")@PathVariable String job, - @RequestBody @Validated PmsCiPipelineLogCursorsVo pmsCiPipelineLogCursorsVo) - { + public AjaxResult getPipelineRunsJob(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @ApiParam(name = "run", value = "执行记录序号") @PathVariable String run, + @ApiParam(name = "job", value = "执行任务序号") @PathVariable String job, + @RequestBody @Validated PmsCiPipelineLogCursorsVo pmsCiPipelineLogCursorsVo) { return success(pmsCiPipelinesService.getPipelineRunsJob(id, run, job, pmsCiPipelineLogCursorsVo)); } @@ -157,8 +142,7 @@ public class PmsCiPipelinesController extends BaseController @Log(title = "流水线", businessType = BusinessType.UPDATE) @PutMapping(value = "/{id}/actions/enable") @ApiOperation("启用流水线") - public AjaxResult enablePipeline(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id) - { + public AjaxResult enablePipeline(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id) { return success(pmsCiPipelinesService.enablePipeline(id)); } @@ -169,38 +153,33 @@ public class PmsCiPipelinesController extends BaseController @Log(title = "流水线", businessType = BusinessType.UPDATE) @PutMapping(value = "/{id}/actions/disable") @ApiOperation("禁用流水线") - public AjaxResult disablePipeline(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id) - { + public AjaxResult disablePipeline(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id) { return success(pmsCiPipelinesService.disablePipeline(id)); } @GetMapping(value = "/actions/nodes") @ApiOperation("节点列表") - public AjaxResult getActionNodes() - { + public AjaxResult getActionNodes() { return success(pmsCiPipelinesService.selectNodes()); } @GetMapping(value = "/actions/templates") @ApiOperation("流水线模版列表") - public AjaxResult getActionTemplates() - { + public AjaxResult getActionTemplates() { return success(pmsCiPipelinesService.selectTemplates()); } @PostMapping(value = "/{id}/graphJsonToYaml") @ApiOperation("流水线图形json构建声明式yaml") - public AjaxResult buildPipelineYaml(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @RequestBody @Validated PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) - { + public AjaxResult buildPipelineYaml(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @RequestBody @Validated PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) { return success(pmsCiPipelinesService.buildPipelineYamlByGraphJson(id, pmsCiPipelineBuildInputVo)); } @PostMapping(value = "/{id}/savePipelineYaml") @ApiOperation("流水线图形构建声明式yaml并保存") - public AjaxResult savePipelineYaml(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @RequestBody @Validated PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) - { + public AjaxResult savePipelineYaml(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @RequestBody @Validated PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) { return success(pmsCiPipelinesService.savePipelineYamlByGraphicJson(id, pmsCiPipelineBuildInputVo)); } @@ -211,8 +190,7 @@ public class PmsCiPipelinesController extends BaseController @ApiOperation("启动流水线执行记录任务") public AjaxResult runPipelineRunsJob(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, @ApiParam(name = "workflow", value = "流水线文件名称", required = true) @RequestParam String workflow, - @ApiParam(name = "ref", value = "分支名称", required = true) @RequestParam String ref) - { + @ApiParam(name = "ref", value = "分支名称", required = true) @RequestParam String ref) { return success(pmsCiPipelinesService.runPipelineRunsJob(id, workflow, ref)); } @@ -221,10 +199,9 @@ public class PmsCiPipelinesController extends BaseController */ @PostMapping(value = "/{id}/actions/runs/{run}/jobs/{job}/rerun") @ApiOperation("重启流水线执行记录任务") - public AjaxResult reRunPipelineRunsJob(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @ApiParam(name = "run", value = "执行记录序号")@PathVariable String run, - @ApiParam(name = "job", value = "执行任务序号")@PathVariable String job) - { + public AjaxResult reRunPipelineRunsJob(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @ApiParam(name = "run", value = "执行记录序号") @PathVariable String run, + @ApiParam(name = "job", value = "执行任务序号") @PathVariable String job) { return success(pmsCiPipelinesService.reRunPipelineRunsJob(id, run, job)); } @@ -233,9 +210,8 @@ public class PmsCiPipelinesController extends BaseController */ @PostMapping(value = "/{id}/actions/runs/{run}/rerun") @ApiOperation("重启所有流水线执行记录任务") - public AjaxResult reRunAllJobsInPipelineRun(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @ApiParam(name = "run", value = "执行记录序号")@PathVariable String run) - { + public AjaxResult reRunAllJobsInPipelineRun(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @ApiParam(name = "run", value = "执行记录序号") @PathVariable String run) { return success(pmsCiPipelinesService.reRunAllJobsInPipelineRun(id, run)); } @@ -256,11 +232,23 @@ public class PmsCiPipelinesController extends BaseController */ @GetMapping(value = "/{id}/actions/runs/{run}/results") @ApiOperation("流水线执行测试报告结果查询") - public AjaxResult getPipelineRunResults(@ApiParam(name = "id", value = "流水线id")@PathVariable Long id, - @ApiParam(name = "run", value = "执行记录序号")@PathVariable String run) - { + public AjaxResult getPipelineRunResults(@ApiParam(name = "id", value = "流水线id") @PathVariable Long id, + @ApiParam(name = "run", value = "执行记录序号") @PathVariable String run) { return success(pmsCiPipelinesService.getPipelineRunResults(id, run)); } + @GetMapping(value = "/getPipelineRubyId/{javaId}") + @ApiOperation("查询流水线Id(根据JavaId查询RubyId)") + public AjaxResult getPipelineRubyIdByJavaId(@ApiParam(name = "javaId", value = "JavaId") @PathVariable Long javaId) { + return success(pmsCiPipelinesService.getPipelineRubyIdByJavaId(javaId)); + } + + @GetMapping(value = "/{repoOwner}/{repoIdentifier}/getPipelineId/{fileName}") + @ApiOperation("查询流水线Id(根据JavaId查询RubyId)") + public AjaxResult getPipelineId(@ApiParam(name = "repoOwner", value = "仓库所有者") @PathVariable String repoOwner, + @ApiParam(name = "repoIdentifier", value = "仓库标识") @PathVariable String repoIdentifier, + @ApiParam(name = "fileName", value = "流水线文件名") @PathVariable String fileName) { + return success(pmsCiPipelinesService.getPipelineId(repoOwner, repoIdentifier, fileName)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java index 2bb1037e5..92fd8fa85 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/mapper/PmsCiPipelinesMapper.java @@ -64,4 +64,6 @@ public interface PmsCiPipelinesMapper public int deletePmsCiPipelinesByIds(Long[] ids); int selectCountByPipelineNameAndRepoInfo(@Param("pipelineName") String pipelineName, @Param("owner") String owner, @Param("repoIdentifier") String repoIdentifier, @Param("branch") String branch); + + PmsCiPipelines selectPmsCiPipelinesByRepoAndFileName(@Param("repoOwner") String repoOwner, @Param("repoIdentifier") String repoIdentifier, @Param("fileName") String fileName); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java index a427e2715..9872ebfeb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java @@ -100,4 +100,8 @@ public interface IPmsCiPipelinesService JSONObject runPipelineRunsJob(Long id, String workflow, String ref); JSONObject getPipelineRunResults(Long id, String run); + + JSONObject getPipelineRubyIdByJavaId(Long javaId); + + JSONObject getPipelineId(String repoOwner, String repoIdentifier, String fileName); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java index a631a87b5..8a1f221cf 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/impl/PmsCiPipelinesServiceImpl.java @@ -1,10 +1,7 @@ package com.microservices.pms.pipeline.service.impl; -import java.net.URISyntaxException; -import java.util.Date; -import java.util.List; - import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; @@ -19,21 +16,23 @@ import com.microservices.pms.common.service.IPmsCommonService; import com.microservices.pms.enterprise.domain.PmsEnterprise; import com.microservices.pms.enterprise.service.IPmsEnterpriseService; import com.microservices.pms.pipeline.domain.PmsCiPipelineGraphics; +import com.microservices.pms.pipeline.domain.PmsCiPipelines; import com.microservices.pms.pipeline.domain.vo.*; +import com.microservices.pms.pipeline.mapper.PmsCiPipelinesMapper; import com.microservices.pms.pipeline.service.IPmsCiPipelineGraphicsService; -import com.microservices.pms.utils.PmsConstants; +import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; import com.microservices.pms.utils.PmsGitLinkRequestUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.microservices.pms.pipeline.mapper.PmsCiPipelinesMapper; -import com.microservices.pms.pipeline.domain.PmsCiPipelines; -import com.microservices.pms.pipeline.service.IPmsCiPipelinesService; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; +import java.net.URISyntaxException; +import java.util.Date; +import java.util.List; import static com.microservices.common.core.utils.JSONUtils.convertObjectToJSONObject; import static com.microservices.common.core.utils.PageUtils.startPage; @@ -44,7 +43,7 @@ import static com.microservices.pms.utils.PmsConstants.*; /** * 流水线Service业务层处理 - * + * * @author wanjia * @date 2024-03-02 */ @@ -370,9 +369,9 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { throw new ServiceException("该项目流水线不存在(流水线ID[%s])", id); } return gitLinkRequestHelper.doPost(PmsGitLinkRequestUrl.RERUN_PIPELINE_RUNS_JOB(pmsCiPipelines.getOwner(), - pmsCiPipelines.getRepoIdentifier(), - run, - job), null); + pmsCiPipelines.getRepoIdentifier(), + run, + job), null); } @Override @@ -382,9 +381,9 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { throw new ServiceException("该项目流水线不存在(流水线ID[%s])", id); } return gitLinkRequestHelper.doPost(PmsGitLinkRequestUrl.RUN_PIPELINE_RUNS_JOB(pmsCiPipelines.getOwner(), - pmsCiPipelines.getRepoIdentifier(), - workflow, - ref), null); + pmsCiPipelines.getRepoIdentifier(), + workflow, + ref), null); } @Override @@ -422,7 +421,7 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { throw new ServiceException("该项目流水线不存在(流水线ID[%s])", id); } try { - return gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_PIPELINE_RUN_RESULTS(pmsCiPipelines.getOwner(), + return gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_PIPELINE_RUN_RESULTS(pmsCiPipelines.getOwner(), pmsCiPipelines.getRepoIdentifier(), run)); } catch (Exception e) { @@ -431,6 +430,39 @@ public class PmsCiPipelinesServiceImpl implements IPmsCiPipelinesService { } } + @Override + public JSONObject getPipelineRubyIdByJavaId(Long javaId) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("pipelineRubyId", null); + PmsCiPipelines pmsCiPipelines = pmsCiPipelinesMapper.selectPmsCiPipelinesById(javaId); + if (pmsCiPipelines != null) { + JSONObject rubyResultData = gitLinkRequestHelper.doGet( + PmsGitLinkRequestUrl.GET_PIPELINE_ACTIONS(pmsCiPipelines.getOwner(), pmsCiPipelines.getRepoIdentifier(), pmsCiPipelines.getFileName() + )); + if (rubyResultData != null) { + JSONArray rubyResultList = rubyResultData.getJSONArray("data"); + if (!rubyResultList.isEmpty()) { + JSONObject rubyResult = rubyResultList.getJSONObject(0); + jsonObject.put("pipelineRubyId", rubyResult.getLong("id")); + } + } + } + return jsonObject; + } + + + @Override + public JSONObject getPipelineId(String repoOwner, String repoIdentifier, String fileName) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("pipelineId", null); + PmsCiPipelines pmsCiPipelines = pmsCiPipelinesMapper.selectPmsCiPipelinesByRepoAndFileName(repoOwner, repoIdentifier, fileName); + if (pmsCiPipelines == null) { + return jsonObject; + } + jsonObject.put("pipelineId", pmsCiPipelines.getId()); + return jsonObject; + } + private void saveOrUpdateGraphicJsonToLocal(Long id, PmsCiPipelineBuildYamlInputVo pmsCiPipelineBuildInputVo) { PmsCiPipelineGraphics existentialPmsCiPipelineGraphics = pmsCiPipelineGraphicsService.selectPmsCiPipelineGraphicsByPmsCiPipelineId(id); PmsCiPipelineGraphics pmsCiPipelineGraphics = new PmsCiPipelineGraphics(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index e84cc5a4e..bb8a4ddc0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -310,6 +310,10 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { return getGitLinkRequestUrl(String.format("/api/v1/%s/%s/actions", owner, repoIdentifier)); } + public static GitLinkRequestUrl GET_PIPELINE_ACTIONS(String owner, String repoIdentifier, String workflows) { + return getGitLinkRequestUrl(String.format("/api/v1/%s/%s/actions/new_index?workflows=%s", owner, repoIdentifier, workflows)); + } + public static GitLinkRequestUrl GET_PIPELINE_RUNS_LIST(String owner, String repoIdentifier, JSONObject pmsCiPipelineRunsListQueryParams) throws URISyntaxException { String path = String.format("/api/v1/%s/%s/actions/runs", owner, repoIdentifier); return getGitLinkRequestUrl(buildUri(path, pmsCiPipelineRunsListQueryParams)); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml index 155a15d00..a08494ab1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml @@ -68,6 +68,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and repo_identifier = #{repoIdentifier} and branch = #{branch} + insert into pms_ci_pipelines From ba1e16337db05311fc9fca20d4a7127cac09ea08 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 11 Feb 2025 16:17:49 +0800 Subject: [PATCH 156/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=89=93=E5=8C=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 异步打包时未打包完成就错误的删除了redis中的键值导致打包失败 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductLibraryServiceImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 2bb575333..318ba45c7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -206,9 +206,6 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { } productPackagedResultVo.setIsPackaged(true); Integer isFinish = redisService.getCacheObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); - if (isFinish != null) { - redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); - } // 键值不存在或键值为1,代表打包成功,通过远程接口获取文件信息 if (isFinish == null || isFinish == 1) { SysFileInfo sysFileInfo = null; @@ -224,7 +221,9 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { productPackagedResultVo.setDownloadUrl(sysFileInfo.getDownloadUrl()); productPackagedResultVo.setFileName(sysFileInfo.getFileOriginName()); } + redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); } else if (isFinish == -1) { + redisService.deleteObject(CacheConstants.getPackageFileIsFinish(packagedFileIdentifier)); // 键值为-1,代表打包失败,需要重新打包 return packageError(node, productLibraryRepositories, productPackagedResultVo); } From 20ecc7157ff835c7e68ccc476e42a50fa7096d19 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 11 Feb 2025 16:57:58 +0800 Subject: [PATCH 157/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E8=BD=AF=E4=BB=B6=E5=8C=85=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BA=E5=88=B6=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/enums/ProductLibraryComponentPathEnum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java index 7b989a96c..5bd8f613e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/enums/ProductLibraryComponentPathEnum.java @@ -15,7 +15,7 @@ import lombok.Getter; @ApiModel("产品库制品路径前缀") public enum ProductLibraryComponentPathEnum { ALL("_All", "所有"), - SOFTWARE("Software", "软件包"), + SOFTWARE("Software", "制品"), DOC("Document", "文档"); private final String key; From 74112e2f35f86bd90f1c53b417f511b5541279e4 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 11 Feb 2025 17:18:02 +0800 Subject: [PATCH 158/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E8=B0=83=E6=95=B4):=20=E9=9C=80=E6=B1=82=E8=A7=84?= =?UTF-8?q?=E6=A0=BC=E8=B0=83=E6=95=B4=E4=B8=BA=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../controller/PmsDashboardController.java | 2 +- .../controller/ProductReqSpecsController.java | 60 +++++++++---------- .../domain/enums/ProductReqOperationType.java | 4 +- .../domain/enums/ProductReqStatus.java | 24 ++++---- ...sProductReqOperationRecordServiceImpl.java | 2 +- .../PmsProductRequirementServiceImpl.java | 14 ++--- .../PmsProjectIssuesController.java | 2 +- .../PmsProjectTestcaseController.java | 2 +- .../project/domain/PmsProjectTestcase.java | 2 +- .../vo/PmsProjectTestcaseBatchUpdateVo.java | 2 +- .../domain/vo/PmsProjectTestcaseDataVo.java | 2 +- .../domain/vo/PmsProjectTestcaseInputVo.java | 2 +- .../domain/vo/PmsProjectTestcaseSearchVo.java | 2 +- .../domain/vo/PmsProjectTestcaseUpdateVo.java | 2 +- 14 files changed, 61 insertions(+), 61 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 412788134..7ca5a6a73 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -219,7 +219,7 @@ public class PmsDashboardController extends BaseController { } - @ApiOperation(value = "我的产品数据统计-需求规格统计") + @ApiOperation(value = "我的产品数据统计-需求统计") @ApiImplicitParam(name = "productIdentifier", value = "产品标识", paramType = "query", dataType = "String") @GetMapping("/productRequirementSpecsStat") public R ProductRequirementSpecsStat(String productIdentifier){ diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java index 2a3342eb0..19f128b41 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqSpecsController.java @@ -19,13 +19,13 @@ import org.springframework.web.bind.annotation.*; import java.util.List; /** - * 产品需求规格相关接口 + * 产品需求相关接口 * * @author otto * @date 2023-10-10 */ @RestController -@Api(tags = "项目管理-需求规格相关接口") +@Api(tags = "项目管理-需求相关接口") @RequestMapping("/{enterpriseIdentifier}/productRequirementSpecs") @ApiImplicitParams({ @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") @@ -35,9 +35,9 @@ public class ProductReqSpecsController extends BaseController { private IPmsProductRequirementService pmsProductRequirementService; /** - * 查询产品需求规格列表 + * 查询产品需求列表 */ - @ApiOperation(value = "查询需求规格列表") + @ApiOperation(value = "查询需求列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/list") public GenericsTableDataInfo list(@PathVariable String enterpriseIdentifier, @Validated ProductReqSpecsSearchVo productReqSpecsSearchVo) { @@ -45,22 +45,22 @@ public class ProductReqSpecsController extends BaseController { } /** - * 获取需求规格详细信息 + * 获取需求详细信息 */ @RequiresPermissions("pms:pmsProduct:show") @GetMapping(value = "/{id}") - @ApiOperation(value = "获取需求规格详细信息") + @ApiOperation(value = "获取需求详细信息") public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { return genericsSuccess(pmsProductRequirementService.selectReqSpecsDetailById(id)); } /** - * 新增需求规格 + * 新增需求 */ @RequiresPermissions("pms:pmsProductRequirement:add") - @Log(title = "需求规格", businessType = BusinessType.INSERT) + @Log(title = "需求", businessType = BusinessType.INSERT) @PostMapping - @ApiOperation(value = "新增需求规格") + @ApiOperation(value = "新增需求") public AjaxResult add(@PathVariable String enterpriseIdentifier, @RequestBody @Validated ProductReqSpecsInputVo productReqSpecsInputVo) { productReqSpecsInputVo.setEnterpriseIdentifier(enterpriseIdentifier); @@ -68,56 +68,56 @@ public class ProductReqSpecsController extends BaseController { } /** - * 修改需求规格 + * 修改需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @Log(title = "需求", businessType = BusinessType.UPDATE) @PutMapping - @ApiOperation(value = "修改需求规格") + @ApiOperation(value = "修改需求") public AjaxResult edit(@RequestBody @Validated ProductReqSpecsUpdateVo productReqSpecsUpdateVo) { return toAjax(pmsProductRequirementService.updateReqSpecs(productReqSpecsUpdateVo)); } /** - * 变更需求规格 + * 变更需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @Log(title = "需求", businessType = BusinessType.UPDATE) @PutMapping("/change") - @ApiOperation(value = "变更需求规格") + @ApiOperation(value = "变更需求") public AjaxResult change(@RequestBody @Validated ProductReqSpecsChangeVo productReqSpecsChangeVo) { return toAjax(pmsProductRequirementService.changeReqSpecs(productReqSpecsChangeVo)); } /** - * 删除需求规格 + * 删除需求 */ @RequiresPermissions("pms:pmsProductRequirement:remove") - @Log(title = "需求规格", businessType = BusinessType.DELETE) + @Log(title = "需求", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - @ApiOperation(value = "删除需求规格") + @ApiOperation(value = "删除需求") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(pmsProductRequirementService.deleteReqSpecsByIds(ids)); } /** - * 评审需求规格 + * 评审需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @Log(title = "需求", businessType = BusinessType.UPDATE) @PutMapping("/review") - @ApiOperation(value = "评审需求规格") + @ApiOperation(value = "评审需求") public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { return toAjax(pmsProductRequirementService.reviewReqSpecs(productReqReviewVo)); } /** - * 需求规格纳入计划 + * 需求纳入计划 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @Log(title = "需求", businessType = BusinessType.UPDATE) @PutMapping("/activePlan") - @ApiOperation(value = "需求规格纳入计划") + @ApiOperation(value = "需求纳入计划") public AjaxResult activePlan(@RequestBody @Validated ProductReqSpecsActivePlanVo productReqSpecsActivePlanVo) { return toAjax(pmsProductRequirementService.activePlan(productReqSpecsActivePlanVo)); } @@ -133,9 +133,9 @@ public class ProductReqSpecsController extends BaseController { } /** - * 查询需求规格状态列表 + * 查询需求状态列表 */ - @ApiOperation(value = "查询需求规格状态列表") + @ApiOperation(value = "查询需求状态列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/statusList") public List statusList() { @@ -143,9 +143,9 @@ public class ProductReqSpecsController extends BaseController { } /** - * 查询需求规格类型列表 + * 查询需求类型列表 */ - @ApiOperation(value = "查询需求规格类型列表") + @ApiOperation(value = "查询需求类型列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/typeList") public List typeList() { @@ -156,9 +156,9 @@ public class ProductReqSpecsController extends BaseController { * 批量修改产品需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "需求规格", businessType = BusinessType.UPDATE) + @Log(title = "需求", businessType = BusinessType.UPDATE) @PutMapping("/batch") - @ApiOperation(value = "批量修改产品需求规格") + @ApiOperation(value = "批量修改产品需求") public AjaxResult batchEdit( @ApiParam(name = "pmsProductRequirementBatchUpdateVo", value = "【字段说明】(非必填字段不传递则代表不更新,传null则代表置空):\n" + diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index 5786e130d..51f2b69c8 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -17,7 +17,7 @@ public enum ProductReqOperationType { CONTENT_MODIFY("contentModify", "内容修改"), REVIEW_USER_REQ("reviewUserReq", "用户需求评审"), ACTIVE_PLAN("activePlan", "纳入计划"), - REVIEW_REQ_SPECS("reviewReqSpecs", "需求规格评审"); + REVIEW_REQ_SPECS("reviewReqSpecs", "需求评审"); private final String key; private final String name; @@ -49,7 +49,7 @@ public enum ProductReqOperationType { operationTimeStr, operator.getNickName()); case REVIEW_REQ_SPECS: - return String.format("%s,由【%s】进行了需求规格评审,评审结果为【%s】", + return String.format("%s,由【%s】进行了需求评审,评审结果为【%s】", operationTimeStr, operator.getNickName(), ProductReqReviewStatus.getNameByKey(record.getOperation())); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index c4880dd2a..abcd22bc7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -17,16 +17,16 @@ public enum ProductReqStatus { PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的用户需求", "#FF6F00"), REJECTED_USER_REQ("rejectedUserReq", "未通过", "已拒绝的用户需求", "#FF0000"), REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求", "#13B33E"), - PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格", "#FF6F00"), - CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求规格", "#FF0000"), - CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求规格", null), - REJECTED_CHANGE_REQ_SPECS("rejectedChangeReqSpecs", "已拒绝变更", "已拒绝变更的需求规格", null), - REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)", null), - PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求规格(变更中)", null), - PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格", "#0D5EF8"), - REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格", "#B1AAA5"), - REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格", "#13B33E"), - COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求规格", "#13B33E"); + PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求", "#FF6F00"), + CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求", "#FF0000"), + CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求", null), + REJECTED_CHANGE_REQ_SPECS("rejectedChangeReqSpecs", "已拒绝变更", "已拒绝变更的需求", null), + REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求(变更中)", null), + PLANNED_REQ_SPECS_CHANGING("plannedReqSpecsChanging", "计划中(变更中)", "计划中的需求(变更中)", null), + PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求", "#0D5EF8"), + REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求", "#B1AAA5"), + REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求", "#13B33E"), + COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求", "#13B33E"); private final String key; private final String name; private final String remark; @@ -65,7 +65,7 @@ public enum ProductReqStatus { } else if (PLANNED_REQ_SPECS_CHANGING == productReqStatus) { return PLANNED_REQ_SPECS; } else { - throw new ServiceException("获取需求规格的来源状态失败"); + throw new ServiceException("获取需求的来源状态失败"); } } @@ -77,7 +77,7 @@ public enum ProductReqStatus { } else if (PLANNED_REQ_SPECS == productReqStatus) { return PLANNED_REQ_SPECS_CHANGING; } else { - throw new ServiceException("获取需求规格的更新状态失败"); + throw new ServiceException("获取需求的更新状态失败"); } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index bd8c2758d..00dfbd503 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -115,7 +115,7 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp public List selectUserReqChangeRecordList(Long userReqId) { PmsProductRequirement userReq = pmsProductRequirementService.selectPmsProductRequirementById(userReqId, false); if (!ProductReqStatus.isUserReqStatus(userReq.getStatus())) { - throw new ServiceException("需求规格变更记录请使用查询需求规格变更记录接口"); + throw new ServiceException("需求变更记录请使用查询需求变更记录接口"); } PmsProductReqOperationRecord recordSearch = new PmsProductReqOperationRecord(); recordSearch.setProductRequirementId(userReqId); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index a676870fe..bf0343013 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -253,7 +253,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && !ProductReqStatus.REJECTED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核、变更中和已拒绝状态的需求规格才能被删除"); + throw new ServiceException("只有待审核、变更中和已拒绝状态的需求才能被删除"); } if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { // 变更中需求规格被删除时需将原需求还原状态 @@ -307,7 +307,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqReviewVo.getId(), true); if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(reqSpecs.getStatus()) && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { - throw new ServiceException("只有待审核和变更中状态的需求规格才能进行审核"); + throw new ServiceException("只有待审核和变更中状态的需求才能进行审核"); } if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { @@ -489,7 +489,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS checkReqSpecsParameter(pmsProductRequirement, pmsProduct, oldPmsProductRequirement); if (ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) || ProductReqStatus.PLANNED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { if (productReqSpecsUpdateVo.isReqChange(oldPmsProductRequirement)) { - throw new ServiceException("已评审或计划中的需求规格请通过需求变更调整需求内容(标题、正文、附件)"); + throw new ServiceException("已评审或计划中的需求请通过需求变更调整需求内容(标题、正文、附件)"); } } else if (ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) || ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { // 待审核和变更中的需求可随意更改 @@ -509,7 +509,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 通过id检查需修改的产品需求是否存在 PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productReqSpecsChangeVo.getId(), true); if (!ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus()) && !ProductReqStatus.PLANNED_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("仅已评审和计划中的需求规格才能发起需求变更"); + throw new ServiceException("仅已评审和计划中的需求才能发起需求变更"); } if (!productReqSpecsChangeVo.isReqChange(oldPmsProductRequirement)) { throw new ServiceException("当前无内容(标题、正文、附件)变更"); @@ -541,12 +541,12 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 通过id检查需修改的产品需求是否存在 PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqSpecsActivePlanVo.getId(), true); if (!ProductReqStatus.REVIEWED_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { - throw new ServiceException("仅已评审状态的需求规格才能纳入计划"); + throw new ServiceException("仅已评审状态的需求才能纳入计划"); } List pmsProjectList = selectReqSpecsProjectList(reqSpecs.getPmsProductIdentifier()); if (pmsProjectList == null || pmsProjectList.stream().noneMatch(x -> x.getId().equals(productReqSpecsActivePlanVo.getProjectId()))) { - throw new ServiceException("需求规格纳入计划时请选择关联了当前产品的项目"); + throw new ServiceException("需求纳入计划时请选择关联了当前产品的项目"); } List forgeFileIdentifierList = null; if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { @@ -605,7 +605,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } if (ProductReqStatus.COMPLETED_REQ_SPECS.getKey().equals(productReqStatus.getKey())) { if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(pmsProductRequirement.getStatus())) { - throw new ServiceException("需求规格变更中,项目计划不能调整为已完成或已关闭状态"); + throw new ServiceException("需求变更中,项目计划不能调整为已完成或已关闭状态"); } } pmsProductRequirement.setStatus(productReqStatus.getKey()); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java index c7aac46a6..23eccf9f5 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java @@ -60,7 +60,7 @@ public class PmsProjectIssuesController extends BaseController { public AjaxResult add(@RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { if (PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(String.valueOf(pmsProjectIssuesInputVo.getPmIssueType())) && pmsProjectIssuesInputVo.getRootId() == null) { - throw new ServiceException("项目计划仅能基于产品需求规格创建"); + throw new ServiceException("项目计划仅能基于产品需求创建"); } JSONObject result = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); return success(result); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java index fe9676304..751038176 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectTestcaseController.java @@ -127,7 +127,7 @@ public class PmsProjectTestcaseController extends BaseController { "assigneeGitlinkId:用例维护人Gitlink ID;\n" + "typeId:用例类型ID;\n" + "tags:标记Id列表,使用逗号分割的字符串;\n" + - "productReqSpecsId:关联产品需求规格id;\n" + + "productReqSpecsId:关联产品需求id;\n" + "pmsModuleId:关联模块ID;\n") @RequestBody JSONObject batchUpdateVo) { return toAjax(pmsProjectTestcaseService.batchUpdatePmsProjectTestcase(batchUpdateVo)); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java index e8a728bda..5cc54fc38 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/PmsProjectTestcase.java @@ -146,7 +146,7 @@ public class PmsProjectTestcase extends BaseEntity { @ApiModelProperty(value = "测试用例标识") private String identifier; - @ApiModelProperty(value = "产品需求规格id") + @ApiModelProperty(value = "产品需求id") private Long productReqSpecsId; public PmsProjectTestcaseDataVo toPmsProjectTestcaseDataVo() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java index 35cf5fe9a..fd2ac9368 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseBatchUpdateVo.java @@ -46,7 +46,7 @@ public class PmsProjectTestcaseBatchUpdateVo { private String tagIds; private Boolean tagIdsIsChange = false; - @ApiModelProperty(value = "产品需求规格id") + @ApiModelProperty(value = "产品需求id") private Long productReqSpecsId; private Boolean productReqSpecsIdIsChange = false; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java index 499c7ac3a..61519e66e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseDataVo.java @@ -68,7 +68,7 @@ public class PmsProjectTestcaseDataVo extends BaseEntityVo { /** * 关联模块 */ - @ApiModelProperty(value = "关联产品需求规格") + @ApiModelProperty(value = "关联产品需求") private PmsProductRequirement productReqSpecs; /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java index 708c75cf6..05aa4ab44 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseInputVo.java @@ -36,7 +36,7 @@ public class PmsProjectTestcaseInputVo { @ApiModelProperty(value = "用例维护人Gitlink ID") private Long assigneeGitlinkId; - @ApiModelProperty(value = "产品需求规格id") + @ApiModelProperty(value = "产品需求id") private Long productReqSpecsId; /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java index 1acb17d3c..2aeb73328 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseSearchVo.java @@ -52,7 +52,7 @@ public class PmsProjectTestcaseSearchVo { @ApiModelProperty(value = "标记Id") private String tagId; - @ApiModelProperty(value = "产品需求规格id") + @ApiModelProperty(value = "产品需求id") private Long productReqSpecsId; public PmsProjectTestcase toPmsProjectTestcase() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java index 40ff681a0..f6f8ed78b 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/domain/vo/PmsProjectTestcaseUpdateVo.java @@ -34,7 +34,7 @@ public class PmsProjectTestcaseUpdateVo { @Size(max = 100, message = "长度需要小于100") private String title; - @ApiModelProperty(value = "产品需求规格id") + @ApiModelProperty(value = "产品需求id") private Long productReqSpecsId; /** From 8ad3f51ce8e674f98317216dec38942720415c4f Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 12 Feb 2025 09:07:14 +0800 Subject: [PATCH 159/270] =?UTF-8?q?feat(=E4=BA=A7=E5=93=81=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E8=B0=83=E6=95=B4):=20=E7=94=A8=E6=88=B7=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E8=B0=83=E6=95=B4=E4=B8=BA=E5=8E=9F=E5=A7=8B=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../controller/PmsDashboardController.java | 14 +++---- .../ProductReqTrackingController.java | 14 +++---- .../controller/ProductUserReqController.java | 40 +++++++++---------- .../domain/enums/ProductReqOperationType.java | 4 +- .../domain/enums/ProductReqStatus.java | 6 +-- .../product/domain/vo/PmsProductStatVo.java | 2 +- .../vo/ProductReqSpecsActivePlanVo.java | 2 +- ...oductReqSpecsAssociatedTestcaseDataVo.java | 2 +- .../domain/vo/ProductReqSpecsChangeVo.java | 2 +- .../domain/vo/ProductReqSpecsDataVo.java | 2 +- .../domain/vo/ProductReqSpecsDetailVo.java | 2 +- .../domain/vo/ProductReqSpecsInputVo.java | 4 +- .../domain/vo/ProductReqSpecsSearchVo.java | 2 +- .../domain/vo/ProductReqSpecsUpdateVo.java | 2 +- .../domain/vo/ProductUserReqDataVo.java | 2 +- .../domain/vo/ProductUserReqDetailVo.java | 2 +- .../domain/vo/ProductUserReqInputVo.java | 4 +- .../domain/vo/ProductUserReqSearchVo.java | 2 +- .../domain/vo/ProductUserReqUpdateVo.java | 2 +- .../IPmsProductReqOperationRecordService.java | 4 +- .../IPmsProductRequirementService.java | 4 +- ...sProductReqOperationRecordServiceImpl.java | 4 +- .../PmsProductRequirementServiceImpl.java | 20 +++++----- .../impl/PmsProjectTestcaseServiceImpl.java | 8 ++-- 24 files changed, 75 insertions(+), 75 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java index 7ca5a6a73..e2e55ca37 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/dashboard/controller/PmsDashboardController.java @@ -206,7 +206,7 @@ public class PmsDashboardController extends BaseController { return result; } - @ApiOperation(value = "我的产品数据统计-用户需求统计") + @ApiOperation(value = "我的产品数据统计-原始需求统计") @ApiImplicitParam(name = "productIdentifier", value = "产品标识", paramType = "query", dataType = "String") @GetMapping("/userRequirementStat") public R UserRequirementStat(String productIdentifier){ @@ -254,8 +254,8 @@ public class PmsDashboardController extends BaseController { /** - * 获取 统计饼图所需的需求规格状态list - * @return 需求规格状态list + * 获取 统计饼图所需的需求状态list + * @return 需求状态list */ private List getReqSpecsList() { return Stream.of(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey(), @@ -267,8 +267,8 @@ public class PmsDashboardController extends BaseController { } /** - * 获取Count总数时,需求规格的状态list - * @return 需求规格状态list + * 获取Count总数时,需求的状态list + * @return 需求状态list */ private List getTotalReqSpecsList() { return Stream.of(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey(), @@ -281,8 +281,8 @@ public class PmsDashboardController extends BaseController { } /** - * 获取 用户需求状态list - * @return 用户需求状态list + * 获取 原始需求状态list + * @return 原始需求状态list */ private List getUserReqList() { return Stream.of(ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey(), diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java index 7609d4e19..b1c89b557 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductReqTrackingController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** - * 产品需求规格相关接口 + * 产品需求相关接口 * * @author otto * @date 2023-10-10 @@ -41,9 +41,9 @@ public class ProductReqTrackingController extends BaseController { private IPmsProductRequirementService pmsProductRequirementService; /** - * 查询用户需求变更记录 + * 查询原始需求变更记录 */ - @ApiOperation(value = "查询用户需求变更记录") + @ApiOperation(value = "查询原始需求变更记录") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{userReqId}/userReqChangeRecord") public GenericsTableDataInfo getUserReqChangeRecordList( @@ -52,9 +52,9 @@ public class ProductReqTrackingController extends BaseController { } /** - * 查询用户需求变更记录 + * 查询原始需求变更记录 */ - @ApiOperation(value = "查询需求规格变更记录") + @ApiOperation(value = "查询需求变更记录") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{reqSpecsId}/reqSpecsChangeRecord") public GenericsTableDataInfo getReqSpecsChangeRecordList( @@ -62,7 +62,7 @@ public class ProductReqTrackingController extends BaseController { return getGenericsDataTable(pmsProductReqOperationRecordService.selectReqSpecsChangeRecordList(reqSpecsId)); } - @ApiOperation(value = "查询需求规格关联的测试用例") + @ApiOperation(value = "查询需求关联的测试用例") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{reqSpecsId}/associatedTestcase") public GenericsTableDataInfo getReqSpecsAssociatedTestcaseList( @@ -70,7 +70,7 @@ public class ProductReqTrackingController extends BaseController { return getGenericsDataTable(pmsProjectTestcaseService.selectReqSpecsAssociatedTestcaseList(reqSpecsId)); } - @ApiOperation(value = "查询需求规格关联的计划") + @ApiOperation(value = "查询需求关联的计划") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/{reqSpecsId}/associatedPlan") public GenericsAjaxResult getReqSpecsAssociatedPlanData( diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java index 33ee39609..413365cf1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/controller/ProductUserReqController.java @@ -20,13 +20,13 @@ import org.springframework.web.bind.annotation.*; import java.util.List; /** - * 产品用户需求相关接口 + * 产品原始需求相关接口 * * @author otto * @date 2023-10-10 */ @RestController -@Api(tags = "项目管理-用户需求相关接口") +@Api(tags = "项目管理-原始需求相关接口") @RequestMapping("/{enterpriseIdentifier}/productUserRequirement") @ApiImplicitParams({ @ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String") @@ -36,9 +36,9 @@ public class ProductUserReqController extends BaseController { private IPmsProductRequirementService pmsProductRequirementService; /** - * 查询产品用户需求列表 + * 查询产品原始需求列表 */ - @ApiOperation(value = "查询用户需求列表") + @ApiOperation(value = "查询原始需求列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/list") public GenericsTableDataInfo list(@Validated ProductUserReqSearchVo productUserReqSearchVo) { @@ -46,22 +46,22 @@ public class ProductUserReqController extends BaseController { } /** - * 获取用户需求详细信息 + * 获取原始需求详细信息 */ @RequiresPermissions("pms:pmsProduct:show") @GetMapping(value = "/{id}") - @ApiOperation(value = "获取用户需求详细信息") + @ApiOperation(value = "获取原始需求详细信息") public GenericsAjaxResult getInfo(@PathVariable("id") Long id) { return genericsSuccess(pmsProductRequirementService.selectUserReqDetailById(id)); } /** - * 新增用户需求 + * 新增原始需求 */ @RequiresPermissions("pms:pmsProductRequirement:add") - @Log(title = "用户需求", businessType = BusinessType.INSERT) + @Log(title = "原始需求", businessType = BusinessType.INSERT) @PostMapping - @ApiOperation(value = "新增用户需求") + @ApiOperation(value = "新增原始需求") public AjaxResult add(@PathVariable String enterpriseIdentifier, @RequestBody @Validated ProductUserReqInputVo productUserReqInputVo) { productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier); @@ -69,42 +69,42 @@ public class ProductUserReqController extends BaseController { } /** - * 修改用户需求 + * 修改原始需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "用户需求", businessType = BusinessType.UPDATE) + @Log(title = "原始需求", businessType = BusinessType.UPDATE) @PutMapping - @ApiOperation(value = "修改用户需求") + @ApiOperation(value = "修改原始需求") public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) { return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo)); } /** - * 删除用户需求 + * 删除原始需求 */ @RequiresPermissions("pms:pmsProductRequirement:remove") - @Log(title = "用户需求", businessType = BusinessType.DELETE) + @Log(title = "原始需求", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - @ApiOperation(value = "删除用户需求") + @ApiOperation(value = "删除原始需求") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids)); } /** - * 评审用户需求 + * 评审原始需求 */ @RequiresPermissions("pms:pmsProductRequirement:edit") - @Log(title = "用户需求", businessType = BusinessType.UPDATE) + @Log(title = "原始需求", businessType = BusinessType.UPDATE) @PutMapping("/review") - @ApiOperation(value = "评审用户需求") + @ApiOperation(value = "评审原始需求") public AjaxResult review(@RequestBody @Validated ProductReqReviewVo productReqReviewVo) { return toAjax(pmsProductRequirementService.reviewUserReq(productReqReviewVo)); } /** - * 查询用户需求状态列表 + * 查询原始需求状态列表 */ - @ApiOperation(value = "查询用户需求状态列表") + @ApiOperation(value = "查询原始需求状态列表") @RequiresPermissions("pms:pmsProduct:show") @GetMapping("/statusList") public List statusList() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java index 51f2b69c8..b2d968b81 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java @@ -15,7 +15,7 @@ import java.text.SimpleDateFormat; @Getter public enum ProductReqOperationType { CONTENT_MODIFY("contentModify", "内容修改"), - REVIEW_USER_REQ("reviewUserReq", "用户需求评审"), + REVIEW_USER_REQ("reviewUserReq", "原始需求评审"), ACTIVE_PLAN("activePlan", "纳入计划"), REVIEW_REQ_SPECS("reviewReqSpecs", "需求评审"); private final String key; @@ -40,7 +40,7 @@ public enum ProductReqOperationType { operator.getNickName(), ProductContentModifyOperation.getNameByKey(record.getOperation())); case REVIEW_USER_REQ: - return String.format("%s,由【%s】进行了用户需求评审,评审结果为【%s】", + return String.format("%s,由【%s】进行了原始需求评审,评审结果为【%s】", operationTimeStr, operator.getNickName(), ProductReqReviewStatus.getNameByKey(record.getOperation())); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java index abcd22bc7..9cb68b6d9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqStatus.java @@ -14,9 +14,9 @@ import java.util.List; */ @Getter public enum ProductReqStatus { - PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的用户需求", "#FF6F00"), - REJECTED_USER_REQ("rejectedUserReq", "未通过", "已拒绝的用户需求", "#FF0000"), - REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求", "#13B33E"), + PENDING_REVIEW_USER_REQ("pendingReviewUserReq", "待评审", "待评审的原始需求", "#FF6F00"), + REJECTED_USER_REQ("rejectedUserReq", "未通过", "已拒绝的原始需求", "#FF0000"), + REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的原始需求", "#13B33E"), PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求", "#FF6F00"), CHANGING_REQ_SPECS("changingReqSpecs", "变更中", "变更中的需求", "#FF0000"), CHANGED_REQ_SPECS("changedReqSpecs", "已变更", "已变更的需求", null), diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java index b551de243..abd987980 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/PmsProductStatVo.java @@ -10,7 +10,7 @@ import lombok.EqualsAndHashCode; @ApiModel("我的产品统计对象") public class PmsProductStatVo extends PmsProductDataVo{ - @ApiModelProperty(value = "用户需求数量") + @ApiModelProperty(value = "原始需求数量") private Integer userReqCount; @ApiModelProperty(value = "规格需求数量") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java index fb924449f..fb205d186 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsActivePlanVo.java @@ -21,7 +21,7 @@ import java.util.List; * @date 2023-10-10 */ @Data -@ApiModel("需求规格纳入计划对象") +@ApiModel("需求纳入计划对象") public class ProductReqSpecsActivePlanVo { @ApiModelProperty(value = "需求Id", required = true) @NotNull diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java index 3135558c1..62b24b83a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsAssociatedTestcaseDataVo.java @@ -16,7 +16,7 @@ import java.util.List; * @date 2023-10-10 */ @Data -@ApiModel("需求规格关联测试用例数据对象") +@ApiModel("需求关联测试用例数据对象") public class ProductReqSpecsAssociatedTestcaseDataVo { private Long id; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java index 244dfde20..e1d87152c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsChangeVo.java @@ -21,7 +21,7 @@ import java.util.Objects; * @date 2023-10-10 */ @Data -@ApiModel("变更需求规格变更对象") +@ApiModel("变更需求变更对象") public class ProductReqSpecsChangeVo { @ApiModelProperty(value = "需求Id", required = true) @NotNull diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java index 45491bb48..895b2da20 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDataVo.java @@ -18,7 +18,7 @@ import java.util.Date; * @date 2023-10-10 */ @Data -@ApiModel("需求规格数据对象") +@ApiModel("需求数据对象") public class ProductReqSpecsDataVo { private Long id; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java index c5c557b7c..95f2986e7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsDetailVo.java @@ -19,7 +19,7 @@ import java.util.List; * @date 2023-10-10 */ @Data -@ApiModel("需求规格详细数据对象") +@ApiModel("需求详细数据对象") public class ProductReqSpecsDetailVo extends ProductReqSpecsDataVo { @ApiModelProperty(value = "正文") private String content; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java index da05ae494..25414d1de 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsInputVo.java @@ -14,13 +14,13 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; /** - * 用户需求输入对象 + * 原始需求输入对象 * * @author otto * @date 2023-10-10 */ @Data -@ApiModel("需求规格输入对象") +@ApiModel("需求输入对象") public class ProductReqSpecsInputVo { @ApiModelProperty(value = "标题", required = true) @NotBlank diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java index 59c4f6619..c186372b3 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsSearchVo.java @@ -15,7 +15,7 @@ import java.util.List; * @date 2023-10-10 */ @Data -@ApiModel("用户需求搜索对象") +@ApiModel("原始需求搜索对象") public class ProductReqSpecsSearchVo { /** * 标题 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java index 9d4db2098..abf08aaea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqSpecsUpdateVo.java @@ -16,7 +16,7 @@ import lombok.Data; * @date 2023-10-10 */ @Data -@ApiModel("需求规格更新对象") +@ApiModel("需求更新对象") public class ProductReqSpecsUpdateVo extends ProductReqSpecsChangeVo { @ApiModelProperty(value = "关联产品模块ID(无论用户是否修改该字段前端均需要传值,置空则传Null)") diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java index babc70a16..90b3806f6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java @@ -16,7 +16,7 @@ import java.util.Date; * @date 2023-10-10 */ @Data -@ApiModel("用户需求数据对象") +@ApiModel("原始需求数据对象") public class ProductUserReqDataVo { private Long id; diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java index f1969d0fc..f00bb868c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDetailVo.java @@ -14,7 +14,7 @@ import java.util.List; * @date 2023-10-10 */ @Data -@ApiModel("用户需求详细数据对象") +@ApiModel("原始需求详细数据对象") public class ProductUserReqDetailVo extends ProductUserReqDataVo { /** * 正文 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java index 914d56e23..ea1f64b27 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqInputVo.java @@ -14,13 +14,13 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; /** - * 用户需求输入对象 + * 原始需求输入对象 * * @author otto * @date 2023-10-10 */ @Data -@ApiModel("用户需求输入对象") +@ApiModel("原始需求输入对象") public class ProductUserReqInputVo { /** * 标题 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java index 58d3e2a47..4c523e648 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqSearchVo.java @@ -13,7 +13,7 @@ import javax.validation.constraints.NotNull; * @date 2023-10-10 */ @Data -@ApiModel("用户需求搜索对象") +@ApiModel("原始需求搜索对象") public class ProductUserReqSearchVo { /** * 标题 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java index 8ad4921ac..de0210cc1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqUpdateVo.java @@ -19,7 +19,7 @@ import javax.validation.constraints.Size; * @date 2023-10-10 */ @Data -@ApiModel("用户需求更新对象") +@ApiModel("原始需求更新对象") public class ProductUserReqUpdateVo { /** * 需求Id diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java index 07089be83..34b595d05 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductReqOperationRecordService.java @@ -61,9 +61,9 @@ public interface IPmsProductReqOperationRecordService { public int deletePmsProductReqOperationRecordById(Long id); /** - * 查询用户需求最近一次评审记录 + * 查询原始需求最近一次评审记录 * - * @param reqId 用户需求id + * @param reqId 原始需求id * @return 最近一次评审记录 */ PmsProductReqOperationRecord selectUserReqLatestReviewRecord(Long reqId); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 46c764ef4..2f4bf768f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -79,10 +79,10 @@ public interface IPmsProductRequirementService List selectPmsProductRequirementList(PmsProductRequirement pmsProductRequirementSearch); /** - * 查询用户需求列表 + * 查询原始需求列表 * * @param productUserReqSearchVo 查询条件 - * @return 用户需求列表 + * @return 原始需求列表 */ GenericsTableDataInfo selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java index 00dfbd503..493c8aea6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductReqOperationRecordServiceImpl.java @@ -127,9 +127,9 @@ public class PmsProductReqOperationRecordServiceImpl implements IPmsProductReqOp public List selectReqSpecsChangeRecordList(Long reqSpecsId) { PmsProductRequirement reqSpecs = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecsId, false); if (ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { - throw new ServiceException("用户需求变更记录请使用查询用户需求变更记录接口"); + throw new ServiceException("原始需求变更记录请使用查询原始需求变更记录接口"); } - // 根据需求规格id和fromId查询需求规格相关的所有需求规格相关的变更记录列表 + // 根据需求id和fromId查询需求相关的所有需求相关的变更记录列表 PmsProductReqOperationRecord recordSearch = new PmsProductReqOperationRecord(); List recordList = new ArrayList<>(); while (reqSpecs != null && !ProductReqStatus.isUserReqStatus(reqSpecs.getStatus())) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index bf0343013..63ee904ea 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -155,7 +155,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(productUserReqUpdateVo.getId(), true); PmsProductRequirement pmsProductRequirement = productUserReqUpdateVo.toPmsProductRequirement(); if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核状态的用户需求才能修改"); + throw new ServiceException("只有待审核状态的原始需求才能修改"); } PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier()); @@ -222,7 +222,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS public int deleteUserReqById(Long id) { PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true); if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(oldPmsProductRequirement.getStatus())) { - throw new ServiceException("只有待审核状态的用户需求才能被删除"); + throw new ServiceException("只有待审核状态的原始需求才能被删除"); } pmsJournalsService.deletePmsJournalsByTypeAndJournalId(PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, id); pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier()); @@ -256,7 +256,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS throw new ServiceException("只有待审核、变更中和已拒绝状态的需求才能被删除"); } if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(oldPmsProductRequirement.getStatus())) { - // 变更中需求规格被删除时需将原需求还原状态 + // 变更中需求被删除时需将原需求还原状态 PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(oldPmsProductRequirement.getFromId(), true); fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); updateRequirement(fromReqSpecs, oldPmsProductRequirement.getPmsProductIdentifier()); @@ -283,7 +283,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS // 通过id检查需修改的产品需求是否存在 PmsProductRequirement userReq = selectPmsProductRequirementById(productReqReviewVo.getId(), true); if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) { - throw new ServiceException("只有待审核状态的用户需求才能进行审核"); + throw new ServiceException("只有待审核状态的原始需求才能进行审核"); } if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) { @@ -303,7 +303,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override public int reviewReqSpecs(ProductReqReviewVo productReqReviewVo) { - // 通过id检查需修改的需求规格是否存在 + // 通过id检查需修改的需求是否存在 PmsProductRequirement reqSpecs = selectPmsProductRequirementById(productReqReviewVo.getId(), true); if (!ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey().equals(reqSpecs.getStatus()) && !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { @@ -316,7 +316,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (ProductReqStatus.PLANNED_REQ_SPECS_CHANGING.getKey().equals(fromReqSpecs.getStatus())) { List forgeFileIdentifierList = null; if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { - // 需求规格文件上传至forge + // 需求文件上传至forge forgeFileIdentifierList = FeignUtils.getReturnData( remoteFileService.uploadFileToForge(reqSpecs.getFileIdentifiers(), SecurityConstants.INNER) ); @@ -329,7 +329,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS issue.setIsProductReqSpecsChange(true); pmsProjectIssuesService.updatePmsProjectIssues(fromReqSpecs.getProjectReqId(), issue); } - // 变更中的需求规格通过评审后设置状态为原需规状态 + // 变更中的需求通过评审后设置状态为原需规状态 reqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); // 变更中的需规通过审核时需将原需求状态调整为已变更 fromReqSpecs.setStatus(ProductReqStatus.CHANGED_REQ_SPECS.getKey()); @@ -340,7 +340,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } else if (ProductReqReviewStatus.REJECTED.getKey().equals(productReqReviewVo.getReviewStatus())) { if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) { PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true); - // 变更中的需求规格拒绝评审后设置状态为已拒绝变更状态 + // 变更中的需求拒绝评审后设置状态为已拒绝变更状态 reqSpecs.setStatus(ProductReqStatus.REJECTED_CHANGE_REQ_SPECS.getKey()); // 变更中的需规通过审核时需将原需求状态调整为来源状态 fromReqSpecs.setStatus(ProductReqStatus.getFromStatus(fromReqSpecs.getStatus()).getKey()); @@ -367,7 +367,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } /** - * 用户需求转换为需求规格 + * 原始需求转换为需求 */ private void userReqToReqSpecs(PmsProductRequirement userReq, PmsProductReqOperationRecord record) { PmsProductRequirement reqSpecs = @@ -550,7 +550,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS } List forgeFileIdentifierList = null; if (StringUtils.isNotEmpty(reqSpecs.getFileIdentifiers())) { - // 需求规格文件上传至forge + // 需求文件上传至forge forgeFileIdentifierList = FeignUtils.getReturnData( remoteFileService.uploadFileToForge(reqSpecs.getFileIdentifiers(), SecurityConstants.INNER) ); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java index f1ebeb69f..18d6a4072 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectTestcaseServiceImpl.java @@ -150,7 +150,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService , pmsCommonService::getNickNameByUsername , pmsProjectTestcase.getUpdateBy()) ); - // 设置产品需求规格 + // 设置产品需求 if (pmsProjectTestcase.getProductReqSpecsId() != null) { pmsProjectTestcaseDataVo.setProductReqSpecs( PmsUtils.getSelectObjectInCache( @@ -199,7 +199,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService List reqSpecsTestcaseDataVoList = new ArrayList<>(); PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(reqSpecsId, false); if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { - throw new ServiceException("用户需求无法查询关联的测试用例"); + throw new ServiceException("原始需求无法查询关联的测试用例"); } PmsProjectTestcase testcaseSearch = new PmsProjectTestcase(); testcaseSearch.setProductReqSpecsId(reqSpecsId); @@ -313,7 +313,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService if (pmsProjectTestcase.getProductReqSpecsId() != null) { PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(pmsProjectTestcase.getProductReqSpecsId(), false); if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { - throw new ServiceException("该需求处于用户需求状态,不能关联测试用例"); + throw new ServiceException("该需求处于原始需求状态,不能关联测试用例"); } } } @@ -488,7 +488,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService if (pmsProjectTestcaseBatchUpdateVo.getProductReqSpecsIdIsChange()) { PmsProductRequirement pmsProductRequirement = pmsProductRequirementService.selectPmsProductRequirementById(pmsProjectTestcaseBatchUpdateVo.getProductReqSpecsId(), false); if (ProductReqStatus.isUserReqStatus(pmsProductRequirement.getStatus())) { - throw new ServiceException("该需求处于用户需求状态,不能关联测试用例"); + throw new ServiceException("该需求处于原始需求状态,不能关联测试用例"); } } From 2d4392bfb2ea45f3b25c5aeb66ec853f25d9636e Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 12 Feb 2025 11:34:21 +0800 Subject: [PATCH 160/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E5=88=B6=E5=93=81?= =?UTF-8?q?=E7=A7=BB=E5=85=A5=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当需要移入的制品文件未存在于文件服务中时,通过文件服务下载该文件,并返回文件标识,通过文件标识再将文件上传到nexus Signed-off-by: OTTO <731554297@qq.com> --- .../system/api/RemoteFileService.java | 10 +++++++ .../factory/RemoteFileFallbackFactory.java | 5 ++++ .../file/controller/CommonController.java | 12 ++++++++ .../file/service/ISysFileInfoService.java | 2 ++ .../service/impl/SysFileInfoServiceImpl.java | 29 +++++++++++++++++++ .../PmsProductLibraryAsyncServiceImpl.java | 8 +++-- 6 files changed, 64 insertions(+), 2 deletions(-) diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java index 9e3fd6f7b..67052ee82 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/RemoteFileService.java @@ -108,6 +108,16 @@ public interface RemoteFileService { @RequestParam("hierarchy") String hierarchy, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** + * 通过Url下载文件到本地 + */ + @PostMapping(value = "/common/downloadFileByUrl") + R downloadFileByUrl( + @RequestParam("fileUrl") String fileUrl + , @RequestParam("type") String type + , @RequestParam("hierarchy") String hierarchy, + @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + /** * 上传本地文件到Forge * diff --git a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java index ea330cd94..1bf85bbfe 100644 --- a/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java +++ b/microservices-api/microservices-api-system/src/main/java/com/microservices/system/api/factory/RemoteFileFallbackFactory.java @@ -71,6 +71,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory downloadFileByUrl(String fileUrl, String type, String hierarchy, String source) { + return R.fail("通过Url下载文件到本地失败:" + throwable.getMessage()); + } + @Override public R> uploadFileToForge(String fileIdentifiers, String source) { return R.fail("上传本地文件到Forge失败:" + throwable.getMessage()); diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java index e248747bd..139befacc 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/controller/CommonController.java @@ -88,6 +88,18 @@ public class CommonController extends BaseController { return R.ok(sysFileInfoService.packagedFile(packagedStructure, zipFileName, type, hierarchy)); } + /** + * 通过Url下载文件到本地 + */ + @PostMapping(value = "/downloadFileByUrl") + @InnerAuth + public R downloadFileByUrl( + @RequestParam("fileUrl") String fileUrl + , @RequestParam("type") String type + , @RequestParam("hierarchy") String hierarchy) { + return R.ok(sysFileInfoService.downloadFileByUrl(fileUrl, type, hierarchy)); + } + /** * 通用下载请求 * diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java index e9dac72bd..203f5e362 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/ISysFileInfoService.java @@ -173,4 +173,6 @@ public interface ISysFileInfoService { String packagedFile(HashMap packagedStructure, String zipFileName, String type, String hierarchy); List uploadFileToForge(String fileIdentifiers); + + String downloadFileByUrl(String fileUrl, String type, String hierarchy); } diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index eb0d148fb..2f972deb2 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -36,6 +36,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; +import java.net.URL; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; import java.util.regex.Pattern; @@ -525,6 +527,33 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { } } + @Override + public String downloadFileByUrl(String fileUrl, String type, String hierarchy) { + String fileIdentifier = genFileIdentifier(); + try { + String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1); + Path localPath = Paths.get(localFilePath); + // 下载目录 + String datePath = DateUtils.datePath(); + Path downloadPath = localPath + .resolve(type) + .resolve(hierarchy) + .resolve(datePath); + Path packagedFilePath = downloadPath.resolve(fileName); + org.apache.commons.io.FileUtils.copyURLToFile(new URL(fileUrl), packagedFilePath.toFile()); + File downloadFile = packagedFilePath.toFile(); + if (!downloadFile.exists()) { + throw new ServiceException("下载文件时出现异常"); + } + String filePath = EscapeUtil.removeExtraSlashOfUrl("/" + type + "/" + hierarchy + "/" + datePath + "/" + fileName); + SysFileInfo sysFileInfo = new SysFileInfo(fileIdentifier, downloadFile, filePath); + insertSysFileInfo(sysFileInfo); + } catch (IOException e) { + throw new ServiceException("下载文件失败"); + } + return fileIdentifier; + } + private void fileDownload(SysFileInfo sysFileInfo, HttpServletResponse response) { try { String fileName = sysFileInfo.getFileOriginName(); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 24a6ad5ed..6f6009093 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -110,8 +110,12 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn } else { assetRawInputVo.setFileIdentifier(""); String nexusFileUrl = EscapeUtil.removeExtraSlashOfUrl(repo.getUrl() + "/" + nexusAssetResultDataVo.getName()); - SysFileBytes fileBytes = nexusRequestHelper.getFileBytes(nexusFileUrl); - assetRawInputVo.setFileBytes(fileBytes); + + String fileIdentifier = FeignUtils.getReturnData( + remoteFileService.downloadFileByUrl(nexusFileUrl, "pms", + productRepo.getPmsEnterpriseIdentifier() + "/productLibrary", SecurityConstants.INNER) + ); + assetRawInputVo.setFileIdentifier(fileIdentifier); } assetRawInputVoList.add(assetRawInputVo); insertRawComponentToProductRepo(productRepo, assetRawInputVoList, nexusAssetResultDataVo.getVersion(), customAttribute, directory); From e5c3e2d9994e842724c6794ddd37019d5c9f06d4 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 12 Feb 2025 11:45:14 +0800 Subject: [PATCH 161/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E5=88=B6=E5=93=81?= =?UTF-8?q?=E7=A7=BB=E5=85=A5=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 制品文件下载成功后,同时将制品文件标识更新到制品assetId相同的制品中 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/PmsProductLibraryComponentMapper.java | 6 ++++-- .../service/IPmsProductLibraryComponentService.java | 2 ++ .../service/impl/PmsProductLibraryAsyncServiceImpl.java | 2 ++ .../service/impl/PmsProductLibraryComponentServiceImpl.java | 5 +++++ .../mapper/pms/PmsProductLibraryComponentMapper.xml | 5 +++++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java index 70df04d82..525097fb6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java @@ -67,7 +67,7 @@ public interface PmsProductLibraryComponentMapper { * 在组织下根据制品库标识和制品文件名称查找制品文件 * * @param name 制品文件名称 - * @param repoId 制品库id + * @param repoId 制品库id * @param pmsEnterpriseId 组织Id * @return 制品文件 */ @@ -85,7 +85,7 @@ public interface PmsProductLibraryComponentMapper { * 查询对应路径下制品文件列表 * * @param path 路径 - * @param repoId 制品库id + * @param repoId 制品库id * @param pmsEnterpriseId 组织Id * @return 制品文件列表 */ @@ -115,4 +115,6 @@ public interface PmsProductLibraryComponentMapper { * @return 来自流水线的制品 */ List selectComponentListFromPipelineByAssetIdList(@Param("assetIdList") List assetIdList); + + void batchUpdateAssetFileIdentifier(@Param("assetId") String assetId, @Param("fileIdentifier") String fileIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java index ffece4399..2fd87f85e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java @@ -131,4 +131,6 @@ public interface IPmsProductLibraryComponentService { void unlockComponentList(Long productRepoId, List componentIdList); boolean getLockComponentStatus(Long productRepoId, String assetId); + + void batchUpdateAssetFileIdentifier(String assetId, String fileIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 6f6009093..78b718728 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -115,6 +115,8 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn remoteFileService.downloadFileByUrl(nexusFileUrl, "pms", productRepo.getPmsEnterpriseIdentifier() + "/productLibrary", SecurityConstants.INNER) ); + // 制品文件下载成功后,同时将制品文件标识更新到制品assetId相同的制品中 + pmsProductLibraryComponentService.batchUpdateAssetFileIdentifier(nexusAssetResultDataVo.getId(), fileIdentifier); assetRawInputVo.setFileIdentifier(fileIdentifier); } assetRawInputVoList.add(assetRawInputVo); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java index e27c12ec3..115bf4bc7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java @@ -707,6 +707,11 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary return false; } + @Override + public void batchUpdateAssetFileIdentifier(String assetId, String fileIdentifier) { + pmsProductLibraryComponentMapper.batchUpdateAssetFileIdentifier(assetId, fileIdentifier); + } + private SysFileBytes getFeignFile(String fileIdentifier) { try { Response response = fileService.getFileEntityByIdentifier(fileIdentifier, SecurityConstants.INNER); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml index 5ff0e36ae..c15f2a255 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml @@ -220,6 +220,11 @@ where id = #{id} + + update pms_product_library_component + set file_identifier = #{fileIdentifier} + where identifier = #{assetId} + delete From 3dea48610d63edc9aa5d1af2fa7eff97d0435aec Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 12 Feb 2025 11:45:14 +0800 Subject: [PATCH 162/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BC=98=E5=8C=96=E5=88=B6=E5=93=81?= =?UTF-8?q?=E7=A7=BB=E5=85=A5=E4=BA=A7=E5=93=81=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 制品文件下载成功后,同时将制品文件标识更新到制品assetId相同的制品中 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/PmsProductLibraryComponentMapper.java | 6 ++++-- .../service/IPmsProductLibraryComponentService.java | 2 ++ .../service/impl/PmsProductLibraryAsyncServiceImpl.java | 2 ++ .../service/impl/PmsProductLibraryComponentServiceImpl.java | 5 +++++ .../mapper/pms/PmsProductLibraryComponentMapper.xml | 5 +++++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java index 70df04d82..525097fb6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/mapper/PmsProductLibraryComponentMapper.java @@ -67,7 +67,7 @@ public interface PmsProductLibraryComponentMapper { * 在组织下根据制品库标识和制品文件名称查找制品文件 * * @param name 制品文件名称 - * @param repoId 制品库id + * @param repoId 制品库id * @param pmsEnterpriseId 组织Id * @return 制品文件 */ @@ -85,7 +85,7 @@ public interface PmsProductLibraryComponentMapper { * 查询对应路径下制品文件列表 * * @param path 路径 - * @param repoId 制品库id + * @param repoId 制品库id * @param pmsEnterpriseId 组织Id * @return 制品文件列表 */ @@ -115,4 +115,6 @@ public interface PmsProductLibraryComponentMapper { * @return 来自流水线的制品 */ List selectComponentListFromPipelineByAssetIdList(@Param("assetIdList") List assetIdList); + + void batchUpdateAssetFileIdentifier(@Param("assetId") String assetId, @Param("fileIdentifier") String fileIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java index ffece4399..2fd87f85e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/IPmsProductLibraryComponentService.java @@ -131,4 +131,6 @@ public interface IPmsProductLibraryComponentService { void unlockComponentList(Long productRepoId, List componentIdList); boolean getLockComponentStatus(Long productRepoId, String assetId); + + void batchUpdateAssetFileIdentifier(String assetId, String fileIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 6f6009093..78b718728 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -115,6 +115,8 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn remoteFileService.downloadFileByUrl(nexusFileUrl, "pms", productRepo.getPmsEnterpriseIdentifier() + "/productLibrary", SecurityConstants.INNER) ); + // 制品文件下载成功后,同时将制品文件标识更新到制品assetId相同的制品中 + pmsProductLibraryComponentService.batchUpdateAssetFileIdentifier(nexusAssetResultDataVo.getId(), fileIdentifier); assetRawInputVo.setFileIdentifier(fileIdentifier); } assetRawInputVoList.add(assetRawInputVo); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java index e27c12ec3..115bf4bc7 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java @@ -707,6 +707,11 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary return false; } + @Override + public void batchUpdateAssetFileIdentifier(String assetId, String fileIdentifier) { + pmsProductLibraryComponentMapper.batchUpdateAssetFileIdentifier(assetId, fileIdentifier); + } + private SysFileBytes getFeignFile(String fileIdentifier) { try { Response response = fileService.getFileEntityByIdentifier(fileIdentifier, SecurityConstants.INNER); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml index 5ff0e36ae..c15f2a255 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductLibraryComponentMapper.xml @@ -220,6 +220,11 @@ where id = #{id} + + update pms_product_library_component + set file_identifier = #{fileIdentifier} + where identifier = #{assetId} + delete From c50f157682a324d06afc1de94faf70901862a315 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 09:51:05 +0800 Subject: [PATCH 163/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E5=8D=95=E7=8B=AC=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=88=B6=E5=93=81=EF=BC=8C=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E7=BB=93=E6=9E=9C=E4=B8=8E=E9=A2=84=E6=9C=9F?= =?UTF-8?q?=E4=B8=8D=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复前端传参错误导致打包失败的问题 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/PmsProductLibraryController.java | 4 ++-- .../domain/vo/packagedProductInputVo.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/packagedProductInputVo.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java index ced05cb5a..19b7416db 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/controller/PmsProductLibraryController.java @@ -325,8 +325,8 @@ public class PmsProductLibraryController extends BaseController { @ApiOperation(value = "产品库打包") public AjaxResult packagedProduct(@PathVariable String enterpriseIdentifier, @ApiParam(value = "产品库标识", required = true) @PathVariable String productRepoName, - @ApiParam(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") @RequestParam(required = false) String node) { - return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, node)); + @RequestBody packagedProductInputVo packagedProductInputVo) { + return toAjax(pmsProductLibraryService.packagedProduct(enterpriseIdentifier, productRepoName, packagedProductInputVo.getNode())); } /** diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/packagedProductInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/packagedProductInputVo.java new file mode 100644 index 000000000..31d9c98a7 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/packagedProductInputVo.java @@ -0,0 +1,12 @@ +package com.microservices.pms.productLibrary.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("打包产品库输入对象") +public class packagedProductInputVo { + @ApiModelProperty(value = "打包节点(Software:打包软件包;Document:打包文档;不传或传其他值:打包所有)") + private String node; +} From 03edc8ac49bce44a587c85f371882cbba0fc759b Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 10:43:54 +0800 Subject: [PATCH 164/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E9=80=9A=E8=BF=87=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E5=BA=93=E4=B8=8B=E8=BD=BD=E6=96=87=E6=A1=A3=EF=BC=8C=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E5=90=8D=E7=A7=B0=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通过修正请求Nexus参数的编码,修复中文乱码问题 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/ServletUtils.java | 43 ------------------- .../PmsProductLibraryAsyncServiceImpl.java | 3 +- ...PmsProductLibraryComponentServiceImpl.java | 18 +++++--- 3 files changed, 13 insertions(+), 51 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index 950ebe448..0c3030378 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -217,49 +217,6 @@ public class ServletUtils { } } - /** - * 内容编码(排除斜杠并且不重复编码) - * - * @param str 内容 - * @return 编码后的内容 - */ - public static String urlEncodeExcludeSlashes(String str) { - try { - StringBuilder stringBuffer = new StringBuilder(); - String[] strings = str.split("/"); - for (String string : strings) { - // 如果url已经进行过urlEncode 不重复进行Encode - if (!isUrlEncoded(string)) { - string = URLEncoder.encode(string, Constants.UTF8); - } - stringBuffer.append("/").append(string); - } - return stringBuffer.toString().replaceAll("\\+", "%20"); - } catch (UnsupportedEncodingException e) { - return StringUtils.EMPTY; - } - } - - /** - * 内容编码(排除斜杠并且支持重复编码) - * - * @param str 内容 - * @return 编码后的内容 - */ - public static String urlEncodeExcludeSlashesApplyDuplicate(String str) { - try { - StringBuilder stringBuffer = new StringBuilder(); - String[] strings = str.split("/"); - for (String string : strings) { - string = URLEncoder.encode(string, Constants.UTF8); - stringBuffer.append("/").append(string); - } - return stringBuffer.toString().replaceAll("\\+", "%20"); - } catch (UnsupportedEncodingException e) { - return StringUtils.EMPTY; - } - } - /** * 判断字符串是否经过URLEncode * 1. 使用URLDecoder.decode对字符串进行解码。 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 78b718728..4e0bafe0e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -2,7 +2,6 @@ package com.microservices.pms.productLibrary.service.impl; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.utils.DateUtils; -import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.pms.enums.ProductLibraryComponentPathEnum; @@ -218,7 +217,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn if (ProductLibraryComponentPathEnum.pathIsNeedPackaged(node, component.getPath())) { String fileSource = component.getFileIdentifier(); if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + component.getPath()); } packagedStructure.put(ProductLibraryComponentPathEnum.getChineseFixedPath(component.getPath()), fileSource); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java index 115bf4bc7..b43b99997 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryComponentServiceImpl.java @@ -7,7 +7,6 @@ import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; -import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; import com.microservices.common.security.utils.SecurityUtils; @@ -25,6 +24,7 @@ import com.microservices.system.api.RemoteFileService; import com.microservices.system.api.domain.SysFileBytes; import feign.Response; import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -477,7 +477,6 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary @Override public Boolean insertRawComponent(ComponentRawInputVo componentRawInputVo) { - componentRawInputVo.setDirectory(ServletUtils.urlEncodeExcludeSlashes(componentRawInputVo.getDirectory())); // 构建制品列表,用于数据库记录 List pmsProductLibraryComponents = new ArrayList<>(); PmsProductLibraryRepositories repo = pmsProductLibraryRepositoriesService.getPmsProductLibraryRepositories( @@ -494,13 +493,13 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary MultipartEntityBuilder builder = MultipartEntityBuilder .create() .setContentType(ContentType.MULTIPART_FORM_DATA) - .setCharset(StandardCharsets.UTF_8); + .setMode(HttpMultipartMode.RFC6532); // 对输入目录进行转码,解决Nexus不支持中文目录的问题 - addTextBody(builder, "raw.directory", componentRawInputVo.getDirectory()); + addTextBodyByUTF8(builder, "raw.directory", componentRawInputVo.getDirectory()); List assetRawInputVos = componentRawInputVo.getAssetList(); for (int i = 0; i < assetRawInputVos.size(); i++) { AssetRawInputVo assetRawInputVo = assetRawInputVos.get(i); - String fileName = ServletUtils.urlEncodeExcludeSlashes(assetRawInputVo.getFilename()); + String fileName = assetRawInputVo.getFilename(); if (pmsProductLibraryComponents.stream().anyMatch(x -> fileName.equals(x.getName()))) { throw new ServiceException("不允许上传重复的制品文件(制品文件名称(%s)", fileName); } @@ -509,7 +508,7 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary componentAsset.setFileIdentifier(assetRawInputVo.getFileIdentifier()); componentAsset.setIdentifier(assetRawInputVo.getAssetIdentifier()); pmsProductLibraryComponents.add(componentAsset); - addTextBody(builder, String.format("raw.asset%d.filename", i + 1), fileName); + addTextBodyByUTF8(builder, String.format("raw.asset%d.filename", i + 1), fileName); SysFileBytes fileBytes; if (assetRawInputVo.getFileBytes() != null) { fileBytes = assetRawInputVo.getFileBytes(); @@ -656,6 +655,13 @@ public class PmsProductLibraryComponentServiceImpl implements IPmsProductLibrary } } + private void addTextBodyByUTF8(MultipartEntityBuilder builder, String key, String value) { + if (value != null) { + ContentType contentType = ContentType.create("text/plain", StandardCharsets.UTF_8); + builder.addTextBody(key, value, contentType); + } + } + private boolean checkPypiUploadRes(JSONObject res) { if (res == null) { return false; From ca9d80e111d97f2a4ad3773cd2a1a683eadd2fd8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 15:07:18 +0800 Subject: [PATCH 165/270] =?UTF-8?q?fix(=E6=96=87=E4=BB=B6=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1):=20=E4=BF=AE=E5=A4=8D=E9=80=9A=E8=BF=87=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=A0=87=E8=AF=86=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/file/service/impl/SysFileInfoServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index 8913d17c4..de51925f3 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -263,7 +263,7 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { @Override public void fileDownloadByIdentifier(String fileIdentifier, HttpServletResponse response, HttpServletRequest request) { SysFileInfo sysFileInfo = selectSysFileInfoByFileIdentifier(fileIdentifier); - if (StringUtils.isEmpty(sysFileInfo.getFilePath()) || !sysFileInfo.getFilePath().contains("/zone-identifier")) { + if (StringUtils.isEmpty(sysFileInfo.getFilePath())) { throw new ServiceException("当前文件无法下载"); } fileDownload(sysFileInfo, response); From a55a4985d9e87e7ebc9e3b7bc434127191d7531f Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 16:50:10 +0800 Subject: [PATCH 166/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固定模块、其他需求需要和配置项模块同级 Signed-off-by: OTTO <731554297@qq.com> --- .../product/mapper/PmsProductModuleMapper.java | 2 ++ .../service/IPmsProductModuleService.java | 8 ++++++++ .../impl/PmsProductModuleServiceImpl.java | 17 ++++++++++++++--- .../impl/PmsProductRequirementServiceImpl.java | 3 +++ .../mapper/pms/PmsProductModuleMapper.xml | 6 ++++++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductModuleMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductModuleMapper.java index 854c22aee..5ec28ce2c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductModuleMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductModuleMapper.java @@ -119,4 +119,6 @@ public interface PmsProductModuleMapper * @return 模块列表 */ List selectPmsProductModuleListByNameAndProjectId(@Param("moduleName") String moduleName, @Param("pmsProjectId") Long pmsProjectId); + + List selectNotIncludedFixedProductModuleIdList(@Param("pmsProductIdentifier") String pmsProductIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductModuleService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductModuleService.java index 033baaaea..0493a6628 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductModuleService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductModuleService.java @@ -90,4 +90,12 @@ public interface IPmsProductModuleService boolean syncByProductModule(Long projectId); int initProductModule(String productIdentifier); + + /** + * 根据产品标识查询不包含无所属模块和非固定模块的模块id列表 + * + * @param pmsProductIdentifier 产品标识 + * @return 模块id列表 + */ + List selectNotIncludedFixedProductModuleIdList(String pmsProductIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 505061e18..517715937 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -286,15 +286,21 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService } else { pmsProductService.selectPmsProductByIdentifier(pmsProductModule.getPmsProductIdentifier()); } - Integer allNodeDataCount; + Integer allNodeDataCount = 0; Integer noModuleNodeDataCount; if (type == PmsConstants.PRODUCT_TAG_AND_MODULE_TYPE) { // 设置各节点数量为需求数量 - moduleList.forEach(x -> x.setNodeDataCount(x.getRequirementCount())); + for (PmsProductModule module : moduleList) { + module.setNodeDataCount(module.getRequirementCount()); + // 全部需求数量统计需排除固定模块以及无所属模块 + if (module.getParentId().equals(0L) && !module.getIsFixedModule()) { + allNodeDataCount += module.getRequirementCount(); + } + } + // 计算全部需求数量 PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); pmsProductRequirementSearch.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); - allNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); // 计算无所属模块的需求数量 pmsProductRequirementSearch.setPmsProductModuleId(0L); @@ -445,6 +451,11 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService return success; } + @Override + public List selectNotIncludedFixedProductModuleIdList(String pmsProductIdentifier) { + return pmsProductModuleMapper.selectNotIncludedFixedProductModuleIdList(pmsProductIdentifier); + } + /** * 通过递归复制树 * diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 63ee904ea..e12b7c71d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -386,6 +386,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() != 0) { List moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId()); productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); + } else if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() == 0) { + List moduleIdList = pmsProductModuleService.selectNotIncludedFixedProductModuleIdList(productReqSpecsSearchVo.getPmsProductIdentifier()); + productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); } if (StringUtils.isNotEmpty(productReqSpecsSearchVo.getStatus())) { productReqSpecsSearchVo.setStatusList(productReqSpecsSearchVo.getStatus().split(",")); diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductModuleMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductModuleMapper.xml index 63fe7100b..5f67abcc2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductModuleMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductModuleMapper.xml @@ -196,6 +196,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and pms_project_id=#{pmsProjectId} + insert into pms_product_module From 4058e652a0e1b451d0d6a16be97669f96a89e218 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 17:10:00 +0800 Subject: [PATCH 167/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BA=A7=E5=93=81=E5=BA=93=E7=A7=BB?= =?UTF-8?q?=E5=85=A5=E6=96=87=E6=A1=A3=E6=97=B6=E8=8B=A5=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E4=B8=BA=E7=A9=BA=E5=88=99=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E7=9A=84=E6=96=87=E4=BB=B6=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductLibraryServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java index 318ba45c7..b9d6ef560 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryServiceImpl.java @@ -272,7 +272,11 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService { assetRawInputVo.setFilename(docFileName); // 创建临时文件 tempFilePath = Files.createTempFile(pmsDocument.getName(), ".md"); - Files.write(tempFilePath, pmsDocument.getContent().getBytes(StandardCharsets.UTF_8)); + String content = ""; + if (pmsDocument.getContent() != null) { + content = pmsDocument.getContent(); + } + Files.write(tempFilePath, content.getBytes(StandardCharsets.UTF_8)); SysFileBytes sysFileBytes = new SysFileBytes(); sysFileBytes.setFileName(docFileName); sysFileBytes.setFileInputStream(Files.newInputStream(tempFilePath)); From efa45f7d7931d7f729a327788e19b750bb579a09 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 17 Feb 2025 17:31:33 +0800 Subject: [PATCH 168/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 计算产品需求的配置项模块的所有需求时,通过数据库查询不包含无所属模块以及非固定模块的需求数量来统计 Signed-off-by: OTTO <731554297@qq.com> --- .../mapper/PmsProductRequirementMapper.java | 2 ++ .../service/IPmsProductRequirementService.java | 8 ++++++++ .../service/impl/PmsProductModuleServiceImpl.java | 15 ++++----------- .../impl/PmsProductRequirementServiceImpl.java | 5 +++++ .../mapper/pms/PmsProductRequirementMapper.xml | 8 ++++++++ 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java index e480e6a76..bfcb062fb 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/mapper/PmsProductRequirementMapper.java @@ -117,4 +117,6 @@ public interface PmsProductRequirementMapper List selectReqCountGroupByStatus(@Param("pmsProductIdentifier") String pmsProductIdentifier, @Param("statusList") List statusList); PmsProductRequirement selectReqSpecsByProjectReqId(@Param("projectReqId") Long projectReqId); + + Integer selectNotIncludeNoModuleAndFixedProductReqSpecsCount(@Param("pmsProductIdentifier") String pmsProductIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java index 2f4bf768f..495d7c47f 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/IPmsProductRequirementService.java @@ -136,4 +136,12 @@ public interface IPmsProductRequirementService int batchUpdatePmsProductRequirement(JSONObject pmsProductRequirementBatchUpdateVo); int updateRequirement(PmsProductRequirement pmsProductRequirement); + + /** + * 查询不包含无所属模块和固定模块的需求数量 + * + * @param pmsProductIdentifier 产品标识 + * @return 需求数量 + */ + Integer selectNotIncludeNoModuleAndFixedProductReqSpecsCount(String pmsProductIdentifier); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 517715937..7b86f2430 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -286,23 +286,16 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService } else { pmsProductService.selectPmsProductByIdentifier(pmsProductModule.getPmsProductIdentifier()); } - Integer allNodeDataCount = 0; + Integer allNodeDataCount; Integer noModuleNodeDataCount; if (type == PmsConstants.PRODUCT_TAG_AND_MODULE_TYPE) { // 设置各节点数量为需求数量 - for (PmsProductModule module : moduleList) { - module.setNodeDataCount(module.getRequirementCount()); - // 全部需求数量统计需排除固定模块以及无所属模块 - if (module.getParentId().equals(0L) && !module.getIsFixedModule()) { - allNodeDataCount += module.getRequirementCount(); - } - } + moduleList.forEach(x -> x.setNodeDataCount(x.getRequirementCount())); // 计算全部需求数量 - PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); - pmsProductRequirementSearch.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); - + allNodeDataCount = pmsProductRequirementService.selectNotIncludeNoModuleAndFixedProductReqSpecsCount(pmsProductModule.getPmsProductIdentifier()); // 计算无所属模块的需求数量 + PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); pmsProductRequirementSearch.setPmsProductModuleId(0L); noModuleNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); } else if (type == PmsConstants.TESTSHEET_TAG_AND_MODULE_TYPE) { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index e12b7c71d..0b39c55d0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -936,4 +936,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier()); return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement); } + + @Override + public Integer selectNotIncludeNoModuleAndFixedProductReqSpecsCount(String pmsProductIdentifier) { + return pmsProductRequirementMapper.selectNotIncludeNoModuleAndFixedProductReqSpecsCount(pmsProductIdentifier); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 748d02800..74b24e30c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -393,4 +393,12 @@ group by `status` + \ No newline at end of file From f2238aec529549913fe11901be9707201b1aa004 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Feb 2025 15:12:48 +0800 Subject: [PATCH 169/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 无所属模块查询使用-1进行查询 Signed-off-by: OTTO <731554297@qq.com> --- .../service/impl/PmsProductModuleServiceImpl.java | 2 +- .../impl/PmsProductRequirementServiceImpl.java | 15 +++++++++------ .../mapper/pms/PmsProductRequirementMapper.xml | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 7b86f2430..74aa4ad1d 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -296,7 +296,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService allNodeDataCount = pmsProductRequirementService.selectNotIncludeNoModuleAndFixedProductReqSpecsCount(pmsProductModule.getPmsProductIdentifier()); // 计算无所属模块的需求数量 PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); - pmsProductRequirementSearch.setPmsProductModuleId(0L); + pmsProductRequirementSearch.setPmsProductModuleId(-1L); noModuleNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); } else if (type == PmsConstants.TESTSHEET_TAG_AND_MODULE_TYPE) { // 设置各节点数量为测试单执行用例数量 diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 0b39c55d0..7fa714ac1 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -383,13 +383,16 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS @Override public GenericsTableDataInfo selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo) { pmsProductService.selectPmsProductByIdentifier(productReqSpecsSearchVo.getPmsProductIdentifier()); - if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() != 0) { - List moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId()); - productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); - } else if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() == 0) { - List moduleIdList = pmsProductModuleService.selectNotIncludedFixedProductModuleIdList(productReqSpecsSearchVo.getPmsProductIdentifier()); - productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); + if (productReqSpecsSearchVo.getPmsProductModuleId() != null) { + if (productReqSpecsSearchVo.getPmsProductModuleId() != 0 && productReqSpecsSearchVo.getPmsProductModuleId() != -1) { + List moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId()); + productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); + } else if (productReqSpecsSearchVo.getPmsProductModuleId() == 0) { + List moduleIdList = pmsProductModuleService.selectNotIncludedFixedProductModuleIdList(productReqSpecsSearchVo.getPmsProductIdentifier()); + productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); + } } + if (StringUtils.isNotEmpty(productReqSpecsSearchVo.getStatus())) { productReqSpecsSearchVo.setStatusList(productReqSpecsSearchVo.getStatus().split(",")); } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 74b24e30c..24f883cca 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -230,7 +230,7 @@ and pms_product_module_id = #{pmsProductModuleId} - and pms_product_module_id is null + and pms_product_module_id is null From 8e51a872ba4e62b68923b74361a63dc464cfdab2 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Feb 2025 15:34:30 +0800 Subject: [PATCH 170/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E6=89=93=E5=8C=85=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=97=B6=E9=9C=80=E5=AF=B9Nexus=E4=B8=8B=E8=BD=BD=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E8=BF=9B=E8=A1=8CurlEncode=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/utils/ServletUtils.java | 20 +++++++++++++++++++ .../impl/SysFileInfoAsyncServiceImpl.java | 6 ++++-- .../PmsProductLibraryAsyncServiceImpl.java | 3 ++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java index 0c3030378..ad2cc4baf 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/utils/ServletUtils.java @@ -217,6 +217,26 @@ public class ServletUtils { } } + /** + * 内容编码(排除斜杠并且支持重复编码) + * + * @param str 内容 + * @return 编码后的内容 + */ + public static String urlEncodeExcludeSlashesApplyDuplicate(String str) { + try { + StringBuilder stringBuffer = new StringBuilder(); + String[] strings = str.split("/"); + for (String string : strings) { + string = URLEncoder.encode(string, Constants.UTF8); + stringBuffer.append("/").append(string); + } + return stringBuffer.toString().replaceAll("\\+", "%20"); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + /** * 判断字符串是否经过URLEncode * 1. 使用URLDecoder.decode对字符串进行解码。 diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java index 4a40a5e5a..bcebb9b0d 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoAsyncServiceImpl.java @@ -49,6 +49,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { @Override public void asyncPackagedFile(String fileIdentifier, HashMap packagedStructure, String zipFileName, String type, String hierarchy) { CustomExecutorFactory.threadPoolExecutor.execute(() -> { + logger.info("开始打包文件(压缩文件标识[{}]),输出Zip文件名称为:{}", fileIdentifier, zipFileName); Path localPath = Paths.get(localFilePath); // 输出目录 String datePath = DateUtils.datePath(); @@ -88,7 +89,7 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { } } catch (IOException e) { redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); - logger.error("打包文件时出现异常,需压缩文件处理失败:{}", e.getMessage()); + logger.error("打包文件时出现异常(压缩文件标识[{}]),需压缩文件处理失败:{}", fileIdentifier, e.getMessage()); throw new ServiceException("打包文件时出现异常,需压缩文件处理失败!"); } }); @@ -109,9 +110,10 @@ public class SysFileInfoAsyncServiceImpl implements ISysFileInfoAsyncService { } } catch (IOException e) { redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), -1); - logger.error("打包文件时出现异常:{}", e.getMessage()); + logger.error("打包文件时出现异常(压缩文件标识[{}]):{}", fileIdentifier, e.getMessage()); throw new ServiceException("打包文件时出现异常!"); } + logger.info("打包完成(压缩文件标识[{}]),输出Zip文件名称为:{}", fileIdentifier, zipFileName); redisService.setCacheObject(CacheConstants.getPackageFileIsFinish(fileIdentifier), 1); }); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java index 4e0bafe0e..78b718728 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/service/impl/PmsProductLibraryAsyncServiceImpl.java @@ -2,6 +2,7 @@ package com.microservices.pms.productLibrary.service.impl; import com.microservices.common.core.constant.SecurityConstants; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.pms.enums.ProductLibraryComponentPathEnum; @@ -217,7 +218,7 @@ public class PmsProductLibraryAsyncServiceImpl implements IPmsProductLibraryAsyn if (ProductLibraryComponentPathEnum.pathIsNeedPackaged(node, component.getPath())) { String fileSource = component.getFileIdentifier(); if (StringUtils.isEmpty(fileSource)) { - fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + component.getPath()); + fileSource = EscapeUtil.removeExtraSlashOfUrl(productRepo.getUrl() + "/" + ServletUtils.urlEncodeExcludeSlashesApplyDuplicate(component.getPath())); } packagedStructure.put(ProductLibraryComponentPathEnum.getChineseFixedPath(component.getPath()), fileSource); } From 44d78caca1255219795d109b2b4ba585c49261ed Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Feb 2025 16:50:33 +0800 Subject: [PATCH 171/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化配置项需求名称显示 Signed-off-by: OTTO <731554297@qq.com> --- .../product/service/impl/PmsProductModuleServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 74aa4ad1d..5523f1fba 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -66,8 +66,6 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService return "无所属模块"; } - ; - private final static String ALL_MODULE = "全部模块"; /** * 查询产品模块 @@ -288,6 +286,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService } Integer allNodeDataCount; Integer noModuleNodeDataCount; + String allNodeName = "全部模块"; if (type == PmsConstants.PRODUCT_TAG_AND_MODULE_TYPE) { // 设置各节点数量为需求数量 moduleList.forEach(x -> x.setNodeDataCount(x.getRequirementCount())); @@ -298,6 +297,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); pmsProductRequirementSearch.setPmsProductModuleId(-1L); noModuleNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); + allNodeName = "配置项(CSCI)需求"; } else if (type == PmsConstants.TESTSHEET_TAG_AND_MODULE_TYPE) { // 设置各节点数量为测试单执行用例数量 moduleList.forEach(x -> x.setNodeDataCount(x.getTestsheetCasesCount())); @@ -329,7 +329,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService PmsProductModule allPmsProductModule=new PmsProductModule(); allPmsProductModule.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); allPmsProductModule.setId(0L); - allPmsProductModule.setModuleName(ALL_MODULE); + allPmsProductModule.setModuleName(allNodeName); allPmsProductModule.setNodeDataCount(allNodeDataCount); allPmsProductModule.setIsFixedModule(true); moduleList.add(allPmsProductModule); From 48ddc9ccdb79d949ce0e618f458d959733ff2029 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Feb 2025 16:57:55 +0800 Subject: [PATCH 172/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 无所属模块查询使用-1进行查询 Signed-off-by: OTTO <731554297@qq.com> --- .../main/resources/mapper/pms/PmsProductRequirementMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index 24f883cca..a3ae255c3 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -229,7 +229,7 @@ - and pms_product_module_id = #{pmsProductModuleId} + and pms_product_module_id = #{pmsProductModuleId} and pms_product_module_id is null From 65ea36f889ddb7f2219fba4dd1651fec6e39bc15 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 19 Feb 2025 08:43:18 +0800 Subject: [PATCH 173/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 无所属模块查询使用-1进行查询 Signed-off-by: OTTO <731554297@qq.com> --- .../pms/product/service/impl/PmsProductModuleServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java index 5523f1fba..69699d590 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductModuleServiceImpl.java @@ -296,6 +296,7 @@ public class PmsProductModuleServiceImpl implements IPmsProductModuleService // 计算无所属模块的需求数量 PmsProductRequirement pmsProductRequirementSearch = new PmsProductRequirement(); pmsProductRequirementSearch.setPmsProductModuleId(-1L); + pmsProductRequirementSearch.setPmsProductIdentifier(pmsProductModule.getPmsProductIdentifier()); noModuleNodeDataCount = pmsProductRequirementService.selectProductReqSpecsCount(pmsProductRequirementSearch); allNodeName = "配置项(CSCI)需求"; } else if (type == PmsConstants.TESTSHEET_TAG_AND_MODULE_TYPE) { From 6d547cd0dfc9847d4cccbd163b649ab26fcf9e65 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 19 Feb 2025 09:22:20 +0800 Subject: [PATCH 174/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 计算产品需求的配置项模块的所有需求时,通过数据库查询不包含无所属模块以及非固定模块的需求数量来统计 Signed-off-by: OTTO <731554297@qq.com> --- .../main/resources/mapper/pms/PmsProductRequirementMapper.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml index a3ae255c3..305c30b4e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml @@ -399,6 +399,8 @@ left join pms_product_module ppm on ppr.pms_product_module_id = ppm.id where ppr.pms_product_identifier = #{pmsProductIdentifier} and ppr.pms_product_module_id is not null - and ppm.is_fixed_module = false; + and ppm.is_fixed_module = false + and (`status` = 'pendingReviewReqSpecs' or `status` = 'plannedReqSpecs' or `status` = 'rejectedReqSpecs' or + `status` = 'reviewedReqSpecs' or `status` = 'completedReqSpecs' or `status` = 'changingReqSpecs') \ No newline at end of file From e21c8b451ec478f6478367dfe6fe9759f35e8eb8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 19 Feb 2025 15:05:15 +0800 Subject: [PATCH 175/270] =?UTF-8?q?fix(=E4=BA=A7=E5=93=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97):=20=E6=A8=A1=E5=9D=97=E5=A4=84=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=95=B0=E9=87=8F=E7=BB=9F=E8=AE=A1=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 计算产品需求的配置项模块的所有需求时,通过数据库查询不包含无所属模块以及非固定模块的需求数量来统计 Signed-off-by: OTTO <731554297@qq.com> --- .../product/service/impl/PmsProductRequirementServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java index 7fa714ac1..bfa03b967 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java @@ -389,6 +389,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); } else if (productReqSpecsSearchVo.getPmsProductModuleId() == 0) { List moduleIdList = pmsProductModuleService.selectNotIncludedFixedProductModuleIdList(productReqSpecsSearchVo.getPmsProductIdentifier()); + if (moduleIdList.isEmpty()) { + moduleIdList = null; + } productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList); } } From 9178cda28908a0c0ba5a9e8bef9e719f020ada07 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 21 Feb 2025 15:00:25 +0800 Subject: [PATCH 176/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=96=B9=E5=B7=A5=E5=85=B7=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=99=BB=E5=BD=95=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/AuthFilter.java | 5 ++++- .../service/ThirdPartyToolService.java | 9 +++++--- .../impl/ThirdPartyToolServiceImpl.java | 22 ++++++++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index b1502a6a1..8af4b7fa6 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -115,7 +115,10 @@ public class AuthFilter implements GlobalFilter, Ordered { // 内部请求来源参数清除 ServletUtils.removeHeader(mutate, SecurityConstants.FROM_SOURCE); - thirdPartyToolService.handleRequestForThirdPartyTools(request, mutate); + Mono thirdPartyRes = thirdPartyToolService.handleRequestForThirdPartyTools(exchange, request, mutate); + if (thirdPartyRes != null) { + return thirdPartyRes; + } return chain.filter(exchange.mutate().request(mutate.build()).build()); } diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java index efc7d4b58..601798b5e 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/ThirdPartyToolService.java @@ -1,6 +1,8 @@ package com.microservices.gateway.service; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; /** * 第三方工具服务类 @@ -12,8 +14,9 @@ public interface ThirdPartyToolService { /** * 处理第三方工具请求 * - * @param request 请求 - * @param mutate 请求头获取器 + * @param exchange + * @param request 请求 + * @param mutate 请求头获取器 */ - void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate); + Mono handleRequestForThirdPartyTools(ServerWebExchange exchange, ServerHttpRequest request, ServerHttpRequest.Builder mutate); } diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index f6b2bca05..b763db43c 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -1,5 +1,6 @@ package com.microservices.gateway.service.impl; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.CacheConstants; import com.microservices.common.core.constant.TokenConstants; @@ -20,6 +21,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Service; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; import java.io.IOException; import java.io.StringWriter; @@ -56,10 +59,10 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { * 处理第三方工具请求 */ @Override - public void handleRequestForThirdPartyTools(ServerHttpRequest request, ServerHttpRequest.Builder mutate) { + public Mono handleRequestForThirdPartyTools(ServerWebExchange exchange, ServerHttpRequest request, ServerHttpRequest.Builder mutate) { String url = request.getURI().getPath(); if (StringUtils.isEmpty(url)) { - return; + return null; } // 处理Sentinel请求 if (url.toLowerCase().startsWith("/sentinel")) { @@ -110,6 +113,9 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { StringWriter writer = new StringWriter(); IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); String str = writer.toString(); + if (!JSON.isValid(str)) { + return exceptionResponse(exchange, str, res.status()); + } JSONObject resJsonObject = JSONObject.parseObject(str); nacosToken = resJsonObject.getString("accessToken"); Long tokenTtl = resJsonObject.getLong("tokenTtl"); @@ -129,7 +135,7 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { } } - // 处理Nacos请求 + // 处理portainer请求 if (url.toLowerCase().startsWith("/portainer")) { String portainerToken = null; if (redisService.hasKey(CacheConstants.PORTAINER_TOKEN)) { @@ -145,6 +151,9 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { StringWriter writer = new StringWriter(); IOUtils.copy(res.body().asInputStream(), writer, StandardCharsets.UTF_8.name()); String str = writer.toString(); + if (!JSON.isValid(str)) { + return exceptionResponse(exchange, str, res.status()); + } JSONObject resJsonObject = JSONObject.parseObject(str); portainerToken = resJsonObject.getString("jwt"); String[] tokenSplit = portainerToken.split("\\."); @@ -169,5 +178,12 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { throw new ServiceException("Portainer服务获取Token失败"); } } + return null; + } + + + private Mono exceptionResponse(ServerWebExchange exchange, String msg, int code) { + log.error("[第三方工具请求处理异常]请求路径:{}", exchange.getRequest().getPath()); + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, code); } } From 61db706e02f01bcac093214ee23320c6e93c04c5 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 24 Feb 2025 17:02:53 +0800 Subject: [PATCH 177/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E5=BD=93=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=B8=BANacos=E6=97=B6=EF=BC=8CNacos=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9A=84=E6=89=80=E6=9C=89=E9=9D=9EJSON=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E9=83=BD=E4=BC=9A=E8=A2=AB=E8=87=AA=E5=8A=A8=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E4=B8=BA=E7=BB=93=E6=9E=84=E5=8C=96=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=90=8C=E6=97=B6=E5=B0=86?= =?UTF-8?q?HTTP=E7=8A=B6=E6=80=81=E7=A0=81=E8=AE=BE=E7=BD=AE=E4=B8=BA200?= =?UTF-8?q?=EF=BC=8C=E9=80=82=E5=90=88=E7=94=A8=E4=BA=8E=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E5=8C=96=E5=BE=AE=E6=9C=8D=E5=8A=A1=E6=9E=B6=E6=9E=84=E7=9A=84?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/GlobalResponseFilter.java | 90 +++++++++++++++++++ .../handler/GatewayExceptionHandler.java | 23 ++--- 2 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java new file mode 100644 index 000000000..30730555f --- /dev/null +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -0,0 +1,90 @@ +package com.microservices.gateway.filter; + +import com.alibaba.fastjson2.JSON; +import com.microservices.common.core.web.domain.AjaxResult; +import lombok.extern.slf4j.Slf4j; +import org.reactivestreams.Publisher; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.http.server.reactive.ServerHttpResponseDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; + +@Slf4j +@Component +public class GlobalResponseFilter implements GlobalFilter, Ordered { + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest request = exchange.getRequest(); + + String url = request.getURI().getPath(); + // 当请求为Nacos时,Nacos返回的所有非JSON响应都会被自动转换为结构化的错误信息,同时将HTTP状态码设置为200,适合用于规范化微服务架构的响应格式。 + if (url.toLowerCase().startsWith("/nacos")) { + ServerHttpResponse originalResponse = exchange.getResponse(); + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + + ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { + @Override + public Mono writeWith(Publisher body) { + MediaType contentType = getHeaders().getContentType(); + HttpStatus status = getStatusCode() != null ? getStatusCode() : HttpStatus.INTERNAL_SERVER_ERROR; + + // 排除无内容响应和二进制类型 + if (status == HttpStatus.NO_CONTENT || + (contentType != null && (contentType.includes(MediaType.APPLICATION_OCTET_STREAM) || + contentType.includes(MediaType.MULTIPART_FORM_DATA)))) { + return super.writeWith(body); + } + + // 保留原始状态码 + originalResponse.setStatusCode(HttpStatus.OK); + getHeaders().setContentType(MediaType.APPLICATION_JSON); + + return Flux.from(body).handle((dataBuffer, synchronousSink) -> { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + //释放掉内存 + DataBufferUtils.release(dataBuffer); + String result = new String(bytes, StandardCharsets.UTF_8); + if (!JSON.isValid(result)) { + synchronousSink.next(result); + } else { + synchronousSink.complete(); + } + + }).flatMap(resBody -> { + byte[] bytes = JSON.toJSONBytes(AjaxResult.error(resBody)); + + getHeaders().setContentLength(bytes.length); + DataBuffer buffer = bufferFactory.wrap(bytes); + return super.writeWith(Mono.just(buffer)); + }).then(); + } + }; + + return chain.filter(exchange.mutate().response(decoratedResponse).build()); + } + return chain.filter(exchange); + + } + + @Override + public int getOrder() { + //WRITE_RESPONSE_FILTER 之前执行 + return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER - 1; + } +} \ No newline at end of file diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/handler/GatewayExceptionHandler.java b/microservices-gateway/src/main/java/com/microservices/gateway/handler/GatewayExceptionHandler.java index ad2c1e300..10a161e2e 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/handler/GatewayExceptionHandler.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/handler/GatewayExceptionHandler.java @@ -1,5 +1,6 @@ package com.microservices.gateway.handler; +import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.ServletUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,33 +20,27 @@ import reactor.core.publisher.Mono; */ @Order(-1) @Configuration -public class GatewayExceptionHandler implements ErrorWebExceptionHandler -{ +public class GatewayExceptionHandler implements ErrorWebExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GatewayExceptionHandler.class); @Override - public Mono handle(ServerWebExchange exchange, Throwable ex) - { + public Mono handle(ServerWebExchange exchange, Throwable ex) { ServerHttpResponse response = exchange.getResponse(); - if (exchange.getResponse().isCommitted()) - { + if (exchange.getResponse().isCommitted()) { return Mono.error(ex); } String msg; - if (ex instanceof NotFoundException) - { + if (ex instanceof NotFoundException) { msg = "服务未找到"; - } - else if (ex instanceof ResponseStatusException) - { + } else if (ex instanceof ServiceException) { + msg = ex.getMessage(); + } else if (ex instanceof ResponseStatusException) { ResponseStatusException responseStatusException = (ResponseStatusException) ex; msg = responseStatusException.getMessage(); - } - else - { + } else { msg = "内部服务器错误"; } From 1140566a512512029a01481066a191db699d8c38 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 25 Feb 2025 10:40:22 +0800 Subject: [PATCH 178/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E5=A4=84=E7=90=86Naco?= =?UTF-8?q?s=E5=BC=82=E5=B8=B8=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=9D=9E=E6=A0=87=E5=87=86=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 限制仅当异常响应时才对错误信息进行标准化处理 Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/GlobalResponseFilter.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index 30730555f..2c5eb10d9 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -12,7 +12,6 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponseDecorator; @@ -40,35 +39,29 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { @Override public Mono writeWith(Publisher body) { - MediaType contentType = getHeaders().getContentType(); HttpStatus status = getStatusCode() != null ? getStatusCode() : HttpStatus.INTERNAL_SERVER_ERROR; - - // 排除无内容响应和二进制类型 - if (status == HttpStatus.NO_CONTENT || - (contentType != null && (contentType.includes(MediaType.APPLICATION_OCTET_STREAM) || - contentType.includes(MediaType.MULTIPART_FORM_DATA)))) { + if (!status.isError()) { return super.writeWith(body); } - // 保留原始状态码 - originalResponse.setStatusCode(HttpStatus.OK); - getHeaders().setContentType(MediaType.APPLICATION_JSON); - return Flux.from(body).handle((dataBuffer, synchronousSink) -> { - byte[] bytes = new byte[dataBuffer.readableByteCount()]; - dataBuffer.read(bytes); - //释放掉内存 - DataBufferUtils.release(dataBuffer); - String result = new String(bytes, StandardCharsets.UTF_8); - if (!JSON.isValid(result)) { - synchronousSink.next(result); - } else { - synchronousSink.complete(); + if (status.isError()) { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + //释放掉内存 + DataBufferUtils.release(dataBuffer); + String result = new String(bytes, StandardCharsets.UTF_8); + if (!JSON.isValid(result)) { + synchronousSink.next(result); + return; + } } + synchronousSink.complete(); }).flatMap(resBody -> { + // 保留原始状态码 + originalResponse.setStatusCode(HttpStatus.OK); byte[] bytes = JSON.toJSONBytes(AjaxResult.error(resBody)); - getHeaders().setContentLength(bytes.length); DataBuffer buffer = bufferFactory.wrap(bytes); return super.writeWith(Mono.just(buffer)); From 2e44e2b24e998ef245d9e4b7a1a9ff21b11d92ab Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 3 Mar 2025 10:38:37 +0800 Subject: [PATCH 179/270] =?UTF-8?q?fix(=E5=88=B6=E5=93=81=E5=BA=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E4=BF=AE=E5=A4=8D=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=A0=87=E7=AD=BE=E6=AD=A3=E5=88=99=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../domain/PmsProductLibraryRepositories.java | 2 +- .../productLibrary/domain/vo/PmsProductLibraryDataVo.java | 2 +- .../domain/vo/PmsProductLibrarySimpleVo.java | 2 +- .../domain/vo/ProductRepositoriesInputVo.java | 7 ++++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java index 53d2298b1..23b69b203 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/PmsProductLibraryRepositories.java @@ -100,7 +100,7 @@ public class PmsProductLibraryRepositories extends BaseEntity { private String version; - @ApiModelProperty(value = "产品版本标记") + @ApiModelProperty(value = "产品版本标签") private String tag; public RepoAttributesVo getRepoAttributes() { diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java index 89fc55237..43aebfe52 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibraryDataVo.java @@ -58,6 +58,6 @@ public class PmsProductLibraryDataVo { private String version; - @ApiModelProperty(value = "产品版本标记") + @ApiModelProperty(value = "产品版本标签") private String tag; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java index b96f3f7f0..5ee0c0db0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/PmsProductLibrarySimpleVo.java @@ -29,6 +29,6 @@ public class PmsProductLibrarySimpleVo extends PmsProductLibraryRepositoriesSimp private String version; - @ApiModelProperty(value = "产品版本标记") + @ApiModelProperty(value = "产品版本标签") private String tag; } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java index f04a3a084..92cc22ca0 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/productLibrary/domain/vo/ProductRepositoriesInputVo.java @@ -17,9 +17,10 @@ import javax.validation.constraints.Pattern; @Data @ApiModel("产品库输入对象") public class ProductRepositoriesInputVo extends ProductRepositoriesOperateVo { - @ApiModelProperty(value = "产品版本标记", required = true) - @NotBlank(message = "产品版本标记不能为空") - @Pattern(regexp = "^[A-Za-z0-9](?!_)(?!\\.)[A-Za-z0-9_\\-.]*$", message = "产品版本标记不符合规范") + // 必填,以字母、数字开头,由字母、数字、下划线(_)、短横线(-)、点(.)组成; + @ApiModelProperty(value = "产品版本标签", required = true) + @NotBlank(message = "产品版本标签不能为空") + @Pattern(regexp = "^[A-Za-z0-9][A-Za-z0-9_\\-.]*$", message = "产品版本标签不符合规范") private String tag; @ApiModelProperty(value = "产品库名称", required = true) From 3b8e443296b9f4aaab5f5336a038a2fc2ed46c7a Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:37:44 +0800 Subject: [PATCH 180/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E5=A4=84=E7=90=86Naco?= =?UTF-8?q?s=E5=BC=82=E5=B8=B8=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=9D=9E=E6=A0=87=E5=87=86=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将异常信息设置为常量,统一响应消息 Signed-off-by: OTTO <731554297@qq.com> --- .../core/constant/ExceptionMsgConstants.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ExceptionMsgConstants.java diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ExceptionMsgConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ExceptionMsgConstants.java new file mode 100644 index 000000000..e54ea63d8 --- /dev/null +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/ExceptionMsgConstants.java @@ -0,0 +1,17 @@ +package com.microservices.common.core.constant; + +/** + * 异常信息常量 + * + * @author otto + */ +public class ExceptionMsgConstants { + /** + * 平台通用异常 + */ + public static final String SYSTEM_EXEC_ERROR = "请求处理异常,请联系管理员处理"; + /** + * 重试异常 + */ + public static final String RETRY_ERROR = "请求发生异常,请重新请求"; +} From b5d2376bebd6e7d27223fc9aee0a749f42649739 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:40:21 +0800 Subject: [PATCH 181/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=BE=AE=E6=9C=8D=E5=8A=A1=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E8=BD=AC=E5=8F=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 优化代码结构 2. 当对象不存在时返回标准的错误信息 Signed-off-by: OTTO <731554297@qq.com> --- .../impl/ThirdPartyToolServiceImpl.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index b763db43c..7520d037d 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -3,6 +3,7 @@ package com.microservices.gateway.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.constant.CacheConstants; +import com.microservices.common.core.constant.ExceptionMsgConstants; import com.microservices.common.core.constant.TokenConstants; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.CookieUtil; @@ -48,6 +49,8 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { public String portainerUsername; @Value("${thirdPartyTools.portainer.auth.password:}") public String portainerPassword; + @Value("${thirdPartyTools.portainer.endpoints:}") + public Integer portainerEndpoints; ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; @Lazy @Autowired @@ -60,12 +63,12 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { */ @Override public Mono handleRequestForThirdPartyTools(ServerWebExchange exchange, ServerHttpRequest request, ServerHttpRequest.Builder mutate) { - String url = request.getURI().getPath(); - if (StringUtils.isEmpty(url)) { + String lowerUrl = request.getURI().getPath().toLowerCase(); + if (StringUtils.isEmpty(lowerUrl)) { return null; } // 处理Sentinel请求 - if (url.toLowerCase().startsWith("/sentinel")) { + if (lowerUrl.startsWith("/sentinel")) { // 检查Cookie中是否携带sentinel cookie String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Sentinel_Token_Key))) { @@ -98,7 +101,7 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { } } // 处理Nacos请求 - if (url.toLowerCase().startsWith("/nacos")) { + if (lowerUrl.startsWith("/nacos")) { String nacosToken = null; if (redisService.hasKey(CacheConstants.NACOS_TOKEN)) { nacosToken = redisService.getCacheObject(CacheConstants.NACOS_TOKEN); @@ -117,6 +120,9 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { return exceptionResponse(exchange, str, res.status()); } JSONObject resJsonObject = JSONObject.parseObject(str); + if (resJsonObject == null) { + return exceptionResponse(exchange, str, res.status()); + } nacosToken = resJsonObject.getString("accessToken"); Long tokenTtl = resJsonObject.getLong("tokenTtl"); if (nacosToken != null && tokenTtl != null) { @@ -136,7 +142,8 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { } // 处理portainer请求 - if (url.toLowerCase().startsWith("/portainer")) { + if (lowerUrl.startsWith("/portainer")) { + String portainerToken = null; if (redisService.hasKey(CacheConstants.PORTAINER_TOKEN)) { portainerToken = redisService.getCacheObject(CacheConstants.PORTAINER_TOKEN); @@ -156,6 +163,9 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { } JSONObject resJsonObject = JSONObject.parseObject(str); portainerToken = resJsonObject.getString("jwt"); + if (portainerToken == null) { + return exceptionResponse(exchange, str, res.status()); + } String[] tokenSplit = portainerToken.split("\\."); String tokenBodyStr = new String(Base64.getDecoder().decode(tokenSplit[1]), StandardCharsets.UTF_8); JSONObject tokenBody = JSONObject.parseObject(tokenBodyStr); @@ -183,7 +193,7 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { private Mono exceptionResponse(ServerWebExchange exchange, String msg, int code) { - log.error("[第三方工具请求处理异常]请求路径:{}", exchange.getRequest().getPath()); - return ServletUtils.webFluxResponseWriter(exchange.getResponse(), msg, code); + log.error("[第三方工具请求处理异常]请求路径:{},异常信息:{}", exchange.getRequest().getPath(), msg); + return ServletUtils.webFluxResponseWriter(exchange.getResponse(), ExceptionMsgConstants.SYSTEM_EXEC_ERROR, code); } } From d8645f34e44d799e1d923799d1ec9aeb9c400f76 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:41:35 +0800 Subject: [PATCH 182/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=97=B6=E8=AE=B0=E5=BD=95=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../main/java/com/microservices/gateway/filter/AuthFilter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index 8af4b7fa6..ba6f31a77 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -90,6 +90,7 @@ public class AuthFilter implements GlobalFilter, Ordered { try { claims = JwtUtils.parseToken(token); } catch (Exception e) { + log.error("令牌解析失败:{}", e.getMessage()); return unauthorizedResponse(exchange, "令牌格式不正确!"); } if (claims == null) { From 5b43d5c33b2ddca7b2bb9b8abd0bed47fe3512c7 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:43:39 +0800 Subject: [PATCH 183/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=BC=82=E5=B8=B8=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nacosToken失效时清理Redis中nacosToken并返回标准的状态码 Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/GlobalResponseFilter.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index 2c5eb10d9..eb2b6fac6 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -25,16 +25,18 @@ import java.nio.charset.StandardCharsets; @Slf4j @Component public class GlobalResponseFilter implements GlobalFilter, Ordered { + @Autowired + private RedisService redisService; @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); - String url = request.getURI().getPath(); + String lowerUrl = request.getURI().getPath().toLowerCase(); + ServerHttpResponse originalResponse = exchange.getResponse(); + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); // 当请求为Nacos时,Nacos返回的所有非JSON响应都会被自动转换为结构化的错误信息,同时将HTTP状态码设置为200,适合用于规范化微服务架构的响应格式。 - if (url.toLowerCase().startsWith("/nacos")) { - ServerHttpResponse originalResponse = exchange.getResponse(); - DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + if (lowerUrl.startsWith("/nacos")) { ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { @Override @@ -43,6 +45,22 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { if (!status.isError()) { return super.writeWith(body); } + if (status == HttpStatus.FORBIDDEN) { + // 设置新的状态码为 200 + setStatusCode(HttpStatus.OK); + // 设置响应内容类型为 JSON + getHeaders().setContentType(MediaType.APPLICATION_JSON); + // 清理Sentinel失效token + redisService.deleteObject(CacheConstants.NACOS_TOKEN); + // 创建自定义的 JSON 响应内容 + String jsonBody = JSON.toJSONString(AjaxResult.error(ExceptionMsgConstants.RETRY_ERROR)); + byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8); + getHeaders().setContentLength(bytes.length); + DataBuffer dataBuffer = bufferFactory.wrap(bytes); + + // 返回新的响应内容 + return super.writeWith(Mono.just(dataBuffer)); + } return Flux.from(body).handle((dataBuffer, synchronousSink) -> { if (status.isError()) { From e4264c87a06d240a8fec1bd567c97f7022a8419e Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:47:26 +0800 Subject: [PATCH 184/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=BC=82=E5=B8=B8=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. portainer发生异常返回错误码时进行拦截,返回标准化错误信息,同时记录异常日志 2. portainer Token失效时,清理Redis中portainer Token 3. 检测到sentinel返回403状态码时(大概率为Toke失效或过期),清理Redis中sentinel Token,返回标准化错误信息,同时记录异常日志 Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/GlobalResponseFilter.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index eb2b6fac6..1057a4f5c 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -1,9 +1,15 @@ package com.microservices.gateway.filter; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.core.constant.CacheConstants; +import com.microservices.common.core.constant.ExceptionMsgConstants; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.redis.service.RedisService; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter; @@ -12,6 +18,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponseDecorator; @@ -89,6 +96,106 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { return chain.filter(exchange.mutate().response(decoratedResponse).build()); } + if (lowerUrl.startsWith("/portainer")) { + ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { + @Override + public Mono writeWith(Publisher body) { + HttpStatus status = getStatusCode() != null ? getStatusCode() : HttpStatus.INTERNAL_SERVER_ERROR; + if (!status.isError()) { + return super.writeWith(body); + } + + return Flux.from(body).handle((dataBuffer, synchronousSink) -> { + if (status.isError()) { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + //释放掉内存 + DataBufferUtils.release(dataBuffer); + String result = new String(bytes, StandardCharsets.UTF_8); + synchronousSink.next(result); + } + synchronousSink.complete(); + }).flatMap(resStr -> { + log.error("Portainer响应处理异常,异常信息:{}", resStr); + originalResponse.setStatusCode(HttpStatus.OK); + byte[] bytes; + if (JSON.isValid(resStr)) { + JSONObject resJson = JSONObject.parseObject(resStr); + if (resJson.containsKey("message")) { + String message = resJson.getString("message"); + if (StringUtils.isNotBlank(message) && message.contains("A valid authorisation token is missing")) { + //token失效清除redis缓存 + redisService.deleteObject(CacheConstants.PORTAINER_TOKEN); + bytes = JSON.toJSONBytes(AjaxResult.error(ExceptionMsgConstants.RETRY_ERROR)); + } else { + bytes = JSON.toJSONBytes(AjaxResult.error(message)); + } + } else { + bytes = JSON.toJSONBytes(AjaxResult.error(ExceptionMsgConstants.SYSTEM_EXEC_ERROR)); + } + } else { + bytes = JSON.toJSONBytes(AjaxResult.error(ExceptionMsgConstants.SYSTEM_EXEC_ERROR)); + } + getHeaders().setContentLength(bytes.length); + DataBuffer buffer = bufferFactory.wrap(bytes); + return super.writeWith(Mono.just(buffer)); + }).then(); + } + }; + + return chain.filter(exchange.mutate().response(decoratedResponse).build()); + } + if (lowerUrl.startsWith("/sentinel")) { + + ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { + @Override + public Mono writeWith(Publisher body) { + HttpStatus status = getStatusCode() != null ? getStatusCode() : HttpStatus.INTERNAL_SERVER_ERROR; + if (!status.isError()) { + return super.writeWith(body); + } + if (status == HttpStatus.UNAUTHORIZED) { + // 设置新的状态码为 200 + setStatusCode(HttpStatus.OK); + // 设置响应内容类型为 JSON + getHeaders().setContentType(MediaType.APPLICATION_JSON); + // 清理Sentinel失效token + redisService.deleteObject(CacheConstants.SENTINEL_TOKEN); + // 创建自定义的 JSON 响应内容 + String jsonBody = JSON.toJSONString(AjaxResult.error(ExceptionMsgConstants.RETRY_ERROR)); + byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8); + getHeaders().setContentLength(bytes.length); + DataBuffer dataBuffer = bufferFactory.wrap(bytes); + + // 返回新的响应内容 + return super.writeWith(Mono.just(dataBuffer)); + } + + return Flux.from(body).handle((dataBuffer, synchronousSink) -> { + if (status.isError()) { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + //释放掉内存 + DataBufferUtils.release(dataBuffer); + String result = new String(bytes, StandardCharsets.UTF_8); + synchronousSink.next(result); + } + synchronousSink.complete(); + }).flatMap(resStr -> { + log.error("Sentinel响应处理异常,异常信息:{}", resStr); + byte[] bytes; + bytes = JSON.toJSONBytes(AjaxResult.error(ExceptionMsgConstants.SYSTEM_EXEC_ERROR)); + setStatusCode(HttpStatus.OK); + + getHeaders().setContentLength(bytes.length); + DataBuffer buffer = bufferFactory.wrap(bytes); + return super.writeWith(Mono.just(buffer)); + }).then(); + } + }; + + return chain.filter(exchange.mutate().response(decoratedResponse).build()); + } return chain.filter(exchange); } From 8dec06e52010ac895c6c95f7e963a8b39c966b47 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:49:29 +0800 Subject: [PATCH 185/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=BC=82=E5=B8=B8=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 记录鉴权异常信息 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/gateway/filter/GlobalResponseFilter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index 1057a4f5c..5007553a4 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -53,6 +53,7 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { return super.writeWith(body); } if (status == HttpStatus.FORBIDDEN) { + log.error("nacos鉴权异常,已清理redis中nacos token"); // 设置新的状态码为 200 setStatusCode(HttpStatus.OK); // 设置响应内容类型为 JSON @@ -64,7 +65,6 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8); getHeaders().setContentLength(bytes.length); DataBuffer dataBuffer = bufferFactory.wrap(bytes); - // 返回新的响应内容 return super.writeWith(Mono.just(dataBuffer)); } @@ -123,6 +123,7 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { JSONObject resJson = JSONObject.parseObject(resStr); if (resJson.containsKey("message")) { String message = resJson.getString("message"); + log.error("Portainer鉴权异常,已清理redis中Portainer token"); if (StringUtils.isNotBlank(message) && message.contains("A valid authorisation token is missing")) { //token失效清除redis缓存 redisService.deleteObject(CacheConstants.PORTAINER_TOKEN); @@ -155,6 +156,7 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { return super.writeWith(body); } if (status == HttpStatus.UNAUTHORIZED) { + log.error("sentinel鉴权异常,已清理redis中sentinel token"); // 设置新的状态码为 200 setStatusCode(HttpStatus.OK); // 设置响应内容类型为 JSON @@ -166,7 +168,6 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8); getHeaders().setContentLength(bytes.length); DataBuffer dataBuffer = bufferFactory.wrap(bytes); - // 返回新的响应内容 return super.writeWith(Mono.just(dataBuffer)); } From 209c96bc48b10237bb4d0ec7c349c1252d0ca40f Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 6 Mar 2025 16:52:03 +0800 Subject: [PATCH 186/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E6=95=88=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/service/impl/ThirdPartyToolServiceImpl.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index 7520d037d..af76cc522 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -49,8 +49,6 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { public String portainerUsername; @Value("${thirdPartyTools.portainer.auth.password:}") public String portainerPassword; - @Value("${thirdPartyTools.portainer.endpoints:}") - public Integer portainerEndpoints; ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; @Lazy @Autowired From d81093a51a6603681e9adb61126b6c420b07c8aa Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 7 Mar 2025 08:55:44 +0800 Subject: [PATCH 187/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=BC=82=E5=B8=B8=E6=8B=A6=E6=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当Nacos返回异常状态码时,且body数据类型为JSON时,从JSON中取出message字段作为异常响应信息,若不存在该字段则返回默认的错误信息 Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/filter/GlobalResponseFilter.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index 5007553a4..30c5a7905 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -76,17 +76,26 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { //释放掉内存 DataBufferUtils.release(dataBuffer); String result = new String(bytes, StandardCharsets.UTF_8); - if (!JSON.isValid(result)) { - synchronousSink.next(result); - return; - } + synchronousSink.next(result); + return; } synchronousSink.complete(); - }).flatMap(resBody -> { + }).flatMap(resStr -> { // 保留原始状态码 originalResponse.setStatusCode(HttpStatus.OK); - byte[] bytes = JSON.toJSONBytes(AjaxResult.error(resBody)); + String errMsg; + if (!JSON.isValid(resStr)) { + errMsg = resStr; + } else { + JSONObject resJson = JSONObject.parseObject(resStr); + if (resJson.containsKey("message")) { + errMsg = resJson.getString("message"); + } else { + errMsg = ExceptionMsgConstants.SYSTEM_EXEC_ERROR; + } + } + byte[] bytes = JSON.toJSONBytes(AjaxResult.error(errMsg)); getHeaders().setContentLength(bytes.length); DataBuffer buffer = bufferFactory.wrap(bytes); return super.writeWith(Mono.just(buffer)); From 5dbed2684cc8a666a9b23d4b5833e90b9a492d9d Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 7 Mar 2025 09:56:36 +0800 Subject: [PATCH 188/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../main/java/com/microservices/gateway/filter/AuthFilter.java | 2 +- .../gateway/service/impl/ThirdPartyToolServiceImpl.java | 2 +- .../gateway/{ => utils}/CustomExecutorFactory.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename microservices-gateway/src/main/java/com/microservices/gateway/{ => utils}/CustomExecutorFactory.java (96%) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java index ba6f31a77..4d6ac1316 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/AuthFilter.java @@ -10,9 +10,9 @@ import com.microservices.common.core.utils.JwtUtils; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; -import com.microservices.gateway.CustomExecutorFactory; import com.microservices.gateway.config.properties.IgnoreWhiteProperties; import com.microservices.gateway.service.ThirdPartyToolService; +import com.microservices.gateway.utils.CustomExecutorFactory; import com.microservices.system.api.RemoteUserService; import com.microservices.system.api.domain.SysUserDeptRole; import com.microservices.system.api.utils.FeignUtils; diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index af76cc522..784410533 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -10,8 +10,8 @@ import com.microservices.common.core.utils.CookieUtil; import com.microservices.common.core.utils.ServletUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.redis.service.RedisService; -import com.microservices.gateway.CustomExecutorFactory; import com.microservices.gateway.service.ThirdPartyToolService; +import com.microservices.gateway.utils.CustomExecutorFactory; import com.microservices.system.api.RemoteGatewayService; import feign.Response; import org.apache.commons.io.IOUtils; diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java b/microservices-gateway/src/main/java/com/microservices/gateway/utils/CustomExecutorFactory.java similarity index 96% rename from microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java rename to microservices-gateway/src/main/java/com/microservices/gateway/utils/CustomExecutorFactory.java index c18c39865..7a47fe94b 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/CustomExecutorFactory.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/utils/CustomExecutorFactory.java @@ -1,4 +1,4 @@ -package com.microservices.gateway; +package com.microservices.gateway.utils; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.threadPool.ThreadPoolExecutorWrap; From c179173b74941659c2e4cf655cdacdcc5dd0c827 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 7 Mar 2025 11:07:05 +0800 Subject: [PATCH 189/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96port?= =?UTF-8?q?ainer=E8=BD=AC=E5=8F=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 清理用户Cookie中携带的portainer_api_key参数,防止该参数转发到portainer后导致的JWT Token无效的问题 2. 处理portainer指定endpoints的问题:拦截portainer中URL中携带endpoints的请求,将请求中的endpoints替换为Nacos中配置的参数,防止环境变更导致数据失效 Signed-off-by: OTTO <731554297@qq.com> --- .../common/core/constant/TokenConstants.java | 1 + .../impl/ThirdPartyToolServiceImpl.java | 36 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java index e9349b3aa..2dd66640b 100644 --- a/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java +++ b/microservices-common/microservices-common-core/src/main/java/com/microservices/common/core/constant/TokenConstants.java @@ -22,6 +22,7 @@ public class TokenConstants { * Sentinel令牌标识 */ public static final String Sentinel_Token_Key = "sentinel_dashboard_cookie"; + public static final String Portainer_Token_Key = "portainer_api_key"; /** * Sentinel令牌标识 */ diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index 784410533..fcee50528 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -27,9 +27,13 @@ import reactor.core.publisher.Mono; import java.io.IOException; import java.io.StringWriter; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author OTTO @@ -49,6 +53,8 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { public String portainerUsername; @Value("${thirdPartyTools.portainer.auth.password:}") public String portainerPassword; + @Value("${thirdPartyTools.portainer.endpoints:}") + public Integer portainerEndpoints; ThreadPoolExecutor threadPoolExecutor = CustomExecutorFactory.threadPoolExecutor; @Lazy @Autowired @@ -61,7 +67,8 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { */ @Override public Mono handleRequestForThirdPartyTools(ServerWebExchange exchange, ServerHttpRequest request, ServerHttpRequest.Builder mutate) { - String lowerUrl = request.getURI().getPath().toLowerCase(); + String url = request.getURI().getPath(); + String lowerUrl = url.toLowerCase(); if (StringUtils.isEmpty(lowerUrl)) { return null; } @@ -141,8 +148,32 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { // 处理portainer请求 if (lowerUrl.startsWith("/portainer")) { + // 处理portainer指定endpoints的问题 + if (lowerUrl.startsWith("/portainer/api/endpoints/")) { + String regex = "^/portainer/api/endpoints/\\d+/.*$"; + if (Pattern.matches(regex, lowerUrl)) { + // 替换掉endpoints + regex = "(^/portainer/api/endpoints/)(\\d+)(/.*$)"; + Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(url); + if (matcher.find()) { + // 替换数字部分 + url = matcher.replaceAll(matcher.group(1) + portainerEndpoints + matcher.group(3)); + try { + mutate.uri(new URI(url)); + } catch (URISyntaxException e) { + log.error("替换Portainer请求中Endpoints时发生异常:{}", e.getMessage()); + } + } + } + } String portainerToken = null; + String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); + if (StringUtils.isNotEmpty(CookieUtil.getCookieValue(cookie, TokenConstants.Portainer_Token_Key))) { + cookie = CookieUtil.removeCookieKey(cookie, TokenConstants.Portainer_Token_Key); + } + if (redisService.hasKey(CacheConstants.PORTAINER_TOKEN)) { portainerToken = redisService.getCacheObject(CacheConstants.PORTAINER_TOKEN); } else { @@ -181,7 +212,10 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { } } if (StringUtils.isNotEmpty(portainerToken)) { + ServletUtils.removeHeader(mutate, TokenConstants.Cookie); + ServletUtils.removeHeader(mutate, TokenConstants.AUTHENTICATION); mutate.header(TokenConstants.AUTHENTICATION, TokenConstants.PREFIX + portainerToken); + mutate.header(TokenConstants.Cookie, String.format("%s;%s;", cookie, portainerToken)); } else { throw new ServiceException("Portainer服务获取Token失败"); } From 4c8be09a7218b80d2676d19aedf397063ed5c6bd Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 7 Mar 2025 14:00:16 +0800 Subject: [PATCH 190/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96port?= =?UTF-8?q?ainer=E8=BD=AC=E5=8F=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复拦截portainer中URL中携带endpoints的请求时,未考虑endpoints在末尾的情况 Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/gateway/filter/GlobalResponseFilter.java | 2 +- .../gateway/service/impl/ThirdPartyToolServiceImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java index 30c5a7905..2baa6963a 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/filter/GlobalResponseFilter.java @@ -132,8 +132,8 @@ public class GlobalResponseFilter implements GlobalFilter, Ordered { JSONObject resJson = JSONObject.parseObject(resStr); if (resJson.containsKey("message")) { String message = resJson.getString("message"); - log.error("Portainer鉴权异常,已清理redis中Portainer token"); if (StringUtils.isNotBlank(message) && message.contains("A valid authorisation token is missing")) { + log.error("Portainer鉴权异常,已清理redis中Portainer token"); //token失效清除redis缓存 redisService.deleteObject(CacheConstants.PORTAINER_TOKEN); bytes = JSON.toJSONBytes(AjaxResult.error(ExceptionMsgConstants.RETRY_ERROR)); diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index fcee50528..bb60f28ba 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -150,10 +150,10 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { if (lowerUrl.startsWith("/portainer")) { // 处理portainer指定endpoints的问题 if (lowerUrl.startsWith("/portainer/api/endpoints/")) { - String regex = "^/portainer/api/endpoints/\\d+/.*$"; + String regex = "^/portainer/api/endpoints/\\d+(/?.*)"; if (Pattern.matches(regex, lowerUrl)) { // 替换掉endpoints - regex = "(^/portainer/api/endpoints/)(\\d+)(/.*$)"; + regex = "(^/portainer/api/endpoints/)(\\d+)(/?.*)"; Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(url); if (matcher.find()) { From e40d58ae9d4a56a608f5fb63d18a97bfcbcd659f Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 7 Mar 2025 15:33:22 +0800 Subject: [PATCH 191/270] =?UTF-8?q?feat(=E5=BE=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=B2=BB=E7=90=86=E5=B7=A5=E5=85=B7):=20=E4=BC=98=E5=8C=96Sent?= =?UTF-8?q?inel=E5=85=8D=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sentinel登录状态默认30分钟失效,将Sentinel Token缓存过期时间调整为28分钟 Signed-off-by: OTTO <731554297@qq.com> --- .../gateway/service/impl/ThirdPartyToolServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java index bb60f28ba..0cf7dfea7 100644 --- a/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java +++ b/microservices-gateway/src/main/java/com/microservices/gateway/service/impl/ThirdPartyToolServiceImpl.java @@ -90,7 +90,8 @@ public class ThirdPartyToolServiceImpl implements ThirdPartyToolService { Map> header = response.headers(); if (header != null && header.containsKey("set-cookie")) { sentinelCookie = header.get("set-cookie").iterator().next(); - redisService.setCacheObject(CacheConstants.SENTINEL_TOKEN, sentinelCookie, 12L, TimeUnit.HOURS); + //Sentinel登录状态默认30分钟失效,将Sentinel Token缓存过期时间调整为28分钟 + redisService.setCacheObject(CacheConstants.SENTINEL_TOKEN, sentinelCookie, 28L, TimeUnit.MINUTES); } } catch (TimeoutException e) { log.error("获取Sentinel Token超时"); From 7a4abfa7e9299f2aa416a836c705535a789232bd Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Tue, 11 Mar 2025 15:12:42 +0800 Subject: [PATCH 192/270] =?UTF-8?q?feat(=E8=BD=AF=E4=BB=B6=E5=B7=A5?= =?UTF-8?q?=E5=8E=82=E7=BB=9F=E8=AE=A1):=20=E4=BB=8A=E6=97=A5=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=80=81=E5=8A=BF=E3=80=81=E5=91=A8=E6=9C=88=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=80=81=E5=8A=BF=E3=80=81=E9=A1=B9=E7=9B=AE=E7=A0=94?= =?UTF-8?q?=E5=8F=91=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/specialArea/constant/Constant.java | 30 ++ .../SoftwareFactStatisticsController.java | 38 +++ .../pms/specialArea/domain/ForgeProject.java | 25 ++ .../specialArea/domain/ZonePmsProject.java | 42 +++ .../pms/specialArea/domain/vo/KeyValVO.java | 9 + .../domain/vo/ProjectSituationVO.java | 19 ++ .../mapper/SoftwareFactStatisForgeMapper.java | 19 ++ .../mapper/SoftwareFactStatisPmsMapper.java | 30 ++ .../SoftwareFactStatisticsServiceImpl.java | 276 ++++++++++++++++++ .../pms/SoftwareFactStatisForgeMapper.xml | 82 ++++++ .../pms/SoftwareFactStatisPmsMapper.xml | 89 ++++++ 11 files changed, 659 insertions(+) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java new file mode 100644 index 000000000..bd9227093 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java @@ -0,0 +1,30 @@ +package com.microservices.pms.specialArea.constant; + +import java.util.Arrays; +import java.util.List; + +public class Constant { + + private Constant() {} + + public static final List ISSUE_NOT_FINISHED = Arrays.asList(1,2); + public static final List ISSUE_FINISHED = Arrays.asList(3,5,6); + + public static final Integer NEED = 1; + public static final Integer TASK = 2; + public static final Integer BUG = 3; + + + public static final Integer TASK_CASE_STATUS_NOT_EXEC = 0; + public static final Integer TASK_CASE_STATUS_PASS = 1; + public static final Integer TASK_CASE_STATUS_FAIL = 2; + public static final Integer TASK_CASE_STATUS_BLOCK = 3; + public static final Integer TASK_CASE_STATUS_SKIP = 4; + + + public static final Integer SPRINT_STATUS_CLOSED = 2; + public static final Integer SPRINT_STATUS_PROCESSING = 1; + public static final Integer SPRINT_STATUS_NOT_START = 0; + + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java new file mode 100644 index 000000000..90953edcf --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java @@ -0,0 +1,38 @@ +package com.microservices.pms.specialArea.controller; + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.pms.specialArea.service.SoftwareFactStatisticsServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController() +@RequestMapping("/specialArea/softwareFact/statis") +@Api(tags = "项目管理-软件工厂统计相关接口") +@RequiredArgsConstructor +public class SoftwareFactStatisticsController { + + private final SoftwareFactStatisticsServiceImpl softwareFactStatisticsService; + + @ApiOperation(value = "今日工作态势") + @GetMapping("/todayWorkSituation") + public AjaxResult todayWorkSituation(){ + return AjaxResult.success(softwareFactStatisticsService.todayWorkSituation()); + } + + @ApiOperation(value = "周、月工作态势") + @GetMapping("/weekMonthWorkSituation") + public AjaxResult weekMonthWorkSituation(String type){ + return AjaxResult.success(softwareFactStatisticsService.weekMonthWorkSituation(type)); + } + + @ApiOperation(value = "项目研发状态") + @GetMapping("/projectSituation") + public AjaxResult projectSituation(){ + return AjaxResult.success(softwareFactStatisticsService.projectSituation()); + } + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java new file mode 100644 index 000000000..e111a1ef3 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java @@ -0,0 +1,25 @@ +package com.microservices.pms.specialArea.domain; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class ForgeProject { + + //项目ID + private Long pmProjectId; + // 需求1 任务2 缺陷3,默认为 1 + private Integer pmIssueType; + + //状态ID + private List statusIds; + //创建时间开始 + private Date createTimeS; + //创建时间结束 + private Date createTimeE; + //更新时间开始 + private Date updateTimeS; + private Date updateTimeE; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java new file mode 100644 index 000000000..619ed55e4 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java @@ -0,0 +1,42 @@ +package com.microservices.pms.specialArea.domain; + +import com.microservices.common.core.annotation.Excel; +import lombok.Data; + +@Data +public class ZonePmsProject { + + /** 项目ID */ + private Long id; + + /** + * 组织Id + */ + private Long deptId; + + /** 项目标识 */ + @Excel(name = "项目标识") + private String projectIdentifier; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 项目负责人 */ + @Excel(name = "项目负责人") + private Long projectAssigneeId; + + /** 项目负责人 */ + @Excel(name = "项目负责人") + private String projectAssigneeName; + /** 所属企业ID */ + @Excel(name = "所属企业ID") + private Long pmsEnterpriseId; + /** 所属企业ID */ + @Excel(name = "所属企业") + private String pmsEnterpriseName; + + /** 状态 0关闭 1开启 2暂停 */ + @Excel(name = "状态 0关闭 1开启 2暂停") + private String status; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java new file mode 100644 index 000000000..c45ea9b8b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java @@ -0,0 +1,9 @@ +package com.microservices.pms.specialArea.domain.vo; + +import lombok.Data; + +@Data +public class KeyValVO { + private Integer key; + private Long val; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java new file mode 100644 index 000000000..f90e70baa --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java @@ -0,0 +1,19 @@ +package com.microservices.pms.specialArea.domain.vo; + +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ProjectSituationVO extends ZonePmsProject { + private Long needCount; + private Long needFinishedCount; + private Long taskCount; + private Long taskFinishedCount; + private Long sprintCount; + private Long sprintFinishedCount; + private Long testCaseCount; + private Long testBugCount; + private Long notExecTestCaseCount; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java new file mode 100644 index 000000000..a58a5e647 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java @@ -0,0 +1,19 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Slave; +import com.microservices.pms.specialArea.domain.ForgeProject; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +@Slave +public interface SoftwareFactStatisForgeMapper { + + List selectForgeProject(ForgeProject forgeProject); + + Long countForgeProject(ForgeProject forgeProject); + Long countForgeProjectByCUES(ForgeProject forgeProject); + Long countForgeProjectByProject(ForgeProject forgeProject); + Long countForgeProjectByAssigner(ForgeProject forgeProject); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java new file mode 100644 index 000000000..a9f75432f --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java @@ -0,0 +1,30 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Master; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Master +@Mapper +public interface SoftwareFactStatisPmsMapper { + + List selectPmsProjectList(); + + ZonePmsProject selectPmsProjectById(@Param("id") Long id); + // 状态 0待开始 1进行中 2已关闭 + List countSprintByStatus(Long projectId); + Long countSprintByCUES(ForgeProject forgeProject); + Long countTestCaseBy(Long projectId); + Long countTestCaseInSheet(ForgeProject forgeProject); + Long countTestCaseByCUES(ForgeProject forgeProject); + + String selectPmsUserByGitlinkId(@Param("gitlinkId") Long gitlinkId); + + List selectPmsProjectListByDict(); + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java new file mode 100644 index 000000000..3f216f91b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java @@ -0,0 +1,276 @@ +package com.microservices.pms.specialArea.service; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import com.microservices.pms.specialArea.domain.vo.ProjectSituationVO; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisForgeMapper; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisPmsMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +import static com.microservices.pms.specialArea.constant.Constant.*; + +@Service +@RequiredArgsConstructor +public class SoftwareFactStatisticsServiceImpl extends BaseController { + + private final SoftwareFactStatisPmsMapper statisPmsMapper; + private final SoftwareFactStatisForgeMapper statisForgeMapper; + + public static Date[] getDayStartAndEnd(int days) { + // 获取今天的日期 + LocalDate today = LocalDate.now(); + today = today.plusDays(days); + // 获取今天的开始时间(00:00:00) + LocalDateTime startOfDay = today.atStartOfDay(); + + // 获取今天的结束时间(23:59:59.999999999) + LocalDateTime endOfDay = today.atTime(LocalTime.MAX); + + // 转换为 Date 对象 + Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); + Date endDate = Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()); + + return new Date[]{startDate, endDate}; + } + + public static Date[] getCurrentWeek() { + LocalDate today = LocalDate.now(); + LocalDate startOfWeek = today.with(java.time.DayOfWeek.MONDAY); + LocalDate endOfWeek = today.with(java.time.DayOfWeek.SUNDAY); + + LocalDateTime startDateTime = startOfWeek.atStartOfDay(); + LocalDateTime endDateTime = endOfWeek.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + + public static Date[] getCurrentMonth() { + LocalDate today = LocalDate.now(); + LocalDate startOfMonth = today.withDayOfMonth(1); + LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth()); + + LocalDateTime startDateTime = startOfMonth.atStartOfDay(); + LocalDateTime endDateTime = endOfMonth.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + + public Map todayWorkSituation() { + + Map res = new HashMap<>(); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setStatusIds(ISSUE_NOT_FINISHED); + + //需求待评审 + forgeProject.setPmIssueType(NEED); + Long needNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("needNotFinishCount", needNotFinishCount); + + //任务待完成 + forgeProject.setPmIssueType(TASK); + Long taskNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("taskNotFinishCount", taskNotFinishCount); + + //缺陷待修复 + forgeProject.setPmIssueType(BUG); + Long bugNotFinishCount = statisForgeMapper.countForgeProject(forgeProject); + res.put("bugNotFinishCount", bugNotFinishCount); + //测试用例未执行数 + forgeProject.setStatusIds(Collections.singletonList(TASK_CASE_STATUS_NOT_EXEC)); + Long notExecTestCaseCount = statisPmsMapper.countTestCaseInSheet(forgeProject); + res.put("notExecTestCaseCount", notExecTestCaseCount); + + ForgeProject f2 = new ForgeProject(); + f2.setStatusIds(ISSUE_NOT_FINISHED); + f2.setPmIssueType(TASK); + //任务最多项目 + Long taskMaxProjectId = statisForgeMapper.countForgeProjectByProject(f2); + ZonePmsProject taskMaxProject = statisPmsMapper.selectPmsProjectById(taskMaxProjectId); + res.put("taskMaxProject", taskMaxProject == null ?"": taskMaxProject.getProjectName()); + //任务最多个人 + Long taskMaxAssignerId = statisForgeMapper.countForgeProjectByAssigner(f2); + String taskMaxAssigner = statisPmsMapper.selectPmsUserByGitlinkId(taskMaxAssignerId); + res.put("taskMaxAssigner", taskMaxAssigner); + f2.setPmIssueType(BUG); + //缺陷最多项目 + Long bugMaxProjectId = statisForgeMapper.countForgeProjectByProject(f2); + ZonePmsProject bugMaxProject = statisPmsMapper.selectPmsProjectById(bugMaxProjectId); + res.put("bugMaxProject", bugMaxProject == null ?"": bugMaxProject.getProjectName()); + //缺陷最多个人 + Long bugMaxAssignerId = statisForgeMapper.countForgeProjectByAssigner(f2); + String bugMaxAssigner = statisPmsMapper.selectPmsUserByGitlinkId(bugMaxAssignerId); + res.put("bugMaxAssigner", bugMaxAssigner); + + + // 昨日完成、昨日新增 + Date[] dayStartAndEnd = getDayStartAndEnd(-1); + ForgeProject forgeProjectTime = new ForgeProject(); + forgeProjectTime.setCreateTimeS(dayStartAndEnd[0]); + forgeProjectTime.setCreateTimeE(dayStartAndEnd[1]); + buildDayWeekMonthData(forgeProjectTime, res, dayStartAndEnd); + + return res; + } + + private void buildDayWeekMonthData(ForgeProject forgeProjectTime, Map res, Date[] dayStartAndEnd) { + // 昨日新增需求 + forgeProjectTime.setPmIssueType(NEED); + Long yesterdayAddNeed = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddNeed", yesterdayAddNeed); +//昨日新增 任务 + forgeProjectTime.setPmIssueType(TASK); + Long yesterdayAddTask = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddTask", yesterdayAddTask); +//昨日新增 缺陷 + forgeProjectTime.setPmIssueType(BUG); + Long yesterdayAddBug = statisForgeMapper.countForgeProject(forgeProjectTime); + res.put("yesterdayAddBug", yesterdayAddBug); + + ForgeProject forgeProjectFinish = new ForgeProject(); + forgeProjectFinish.setStatusIds(ISSUE_FINISHED); + forgeProjectFinish.setUpdateTimeS(dayStartAndEnd[0]); + forgeProjectFinish.setUpdateTimeE(dayStartAndEnd[1]); + //昨日任务完结 + forgeProjectFinish.setPmIssueType(TASK); + Long yesterdayFinishTask = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishTask", yesterdayFinishTask); + //昨日缺陷关闭数 + forgeProjectFinish.setPmIssueType(BUG); + Long yesterdayFinishBug = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishBug", yesterdayFinishBug); +// 昨日需求评审数 + forgeProjectFinish.setPmIssueType(NEED); + Long yesterdayFinishNeed = statisForgeMapper.countForgeProject(forgeProjectFinish); + res.put("yesterdayFinishNeed", yesterdayFinishNeed); + //昨日测试用例执行 + ForgeProject forgeProjectTest = new ForgeProject(); + forgeProjectFinish.setStatusIds(Arrays.asList(TASK_CASE_STATUS_PASS, TASK_CASE_STATUS_FAIL, TASK_CASE_STATUS_BLOCK, TASK_CASE_STATUS_SKIP)); + forgeProjectFinish.setUpdateTimeS(dayStartAndEnd[0]); + forgeProjectFinish.setUpdateTimeE(dayStartAndEnd[1]); + Long yesterdayTestCase = statisPmsMapper.countTestCaseInSheet(forgeProjectTest); + res.put("yesterdayTestCase", yesterdayTestCase); + + // 昨日最活跃项目 + List zonePmsProjects = statisPmsMapper.selectPmsProjectList(); + long pmsProjectIdMax = 0L, maxVal = -1L; + for (ZonePmsProject p : zonePmsProjects) { + ForgeProject f = new ForgeProject(); + f.setCreateTimeS(dayStartAndEnd[0]); + f.setCreateTimeE(dayStartAndEnd[1]); + f.setUpdateTimeS(dayStartAndEnd[0]); + f.setUpdateTimeE(dayStartAndEnd[1]); + f.setPmProjectId(p.getId()); + + f.setPmIssueType(NEED); + Long a = statisForgeMapper.countForgeProjectByCUES(f); + f.setPmIssueType(TASK); + Long b = statisForgeMapper.countForgeProjectByCUES(f); + f.setPmIssueType(BUG); + Long c = statisForgeMapper.countForgeProjectByCUES(f); + Long d = statisPmsMapper.countSprintByCUES(f); + Long e = statisPmsMapper.countTestCaseByCUES(f); + + long total = a + b + c + d + e; + if (total > maxVal) { + pmsProjectIdMax = p.getId(); + maxVal = total; + } + } + + ZonePmsProject zonePmsProjectMax = statisPmsMapper.selectPmsProjectById(pmsProjectIdMax); + res.put("zonePmsProjectMax", zonePmsProjectMax==null? "": zonePmsProjectMax.getProjectName()); + } + + public List projectSituation() { + + List zonePmsProjects = statisPmsMapper.selectPmsProjectList(); + List showProjectList = statisPmsMapper.selectPmsProjectListByDict() + .stream().filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (!showProjectList.isEmpty()) { + zonePmsProjects = zonePmsProjects.stream().filter(e->showProjectList.contains(e.getId())) + .collect(Collectors.toList()); + } + List res = new ArrayList<>(); + zonePmsProjects.forEach(zonePmsProject -> { + + ProjectSituationVO vo = new ProjectSituationVO(); + BeanUtils.copyProperties(zonePmsProject, vo); + + Map sprintCountMap = statisPmsMapper.countSprintByStatus(zonePmsProject.getId()) + .stream() + .collect(Collectors.toMap(KeyValVO::getKey, KeyValVO::getVal, (o, n) -> n)); + + vo.setSprintFinishedCount(sprintCountMap.getOrDefault(SPRINT_STATUS_CLOSED,0L)); + vo.setSprintCount(sprintCountMap.values().stream().reduce(0L, Long::sum)); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setPmProjectId(zonePmsProject.getId()); + forgeProject.setPmIssueType(NEED); + Long planCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedCount(planCount); + forgeProject.setStatusIds(ISSUE_FINISHED); + Long planFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedFinishedCount(planFinishCount); + forgeProject.setPmIssueType(TASK); + Long taskFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskFinishedCount(taskFinishCount); + forgeProject.setStatusIds(new ArrayList<>()); + Long taskCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskCount(taskCount); + + // 测试相关 + //测试用例数 + Long testCaseCount = statisPmsMapper.countTestCaseBy(zonePmsProject.getId()); + forgeProject.setPmIssueType(BUG); + forgeProject.setStatusIds(ISSUE_NOT_FINISHED); + vo.setTestCaseCount(testCaseCount); +// 测试缺陷数 + Long testBugCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTestBugCount(testBugCount); +// 测试用例未执行数 + forgeProject.setStatusIds(Collections.singletonList(TASK_CASE_STATUS_NOT_EXEC)); + Long notExecTestCaseCount = statisPmsMapper.countTestCaseInSheet(forgeProject); + vo.setNotExecTestCaseCount(notExecTestCaseCount); + + res.add(vo); + }); + + return res; + } + + public Map weekMonthWorkSituation(String type) { + Map res = new HashMap<>(); + Date[] dayStartAndEnd = getDayStartAndEnd(-1); + if (Objects.equals(type, "week")) { + dayStartAndEnd = getCurrentWeek(); + } else if (Objects.equals(type, "month")) { + dayStartAndEnd = getCurrentMonth(); + } + ForgeProject forgeProjectTime = new ForgeProject(); + forgeProjectTime.setCreateTimeS(dayStartAndEnd[0]); + forgeProjectTime.setCreateTimeE(dayStartAndEnd[1]); + buildDayWeekMonthData(forgeProjectTime, res, dayStartAndEnd); + + return res; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml new file mode 100644 index 000000000..d82bf9417 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml new file mode 100644 index 000000000..964903987 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b8fbf94be61a201a55054d9376cb008449675b6f Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Thu, 13 Mar 2025 14:28:20 +0800 Subject: [PATCH 193/270] =?UTF-8?q?feat(=E4=B8=93=E5=8C=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=9F=E8=AE=A1=E8=83=BD=E5=8A=9B=E4=B8=8A=E7=BA=BF?= =?UTF-8?q?):=20=E8=BF=91=E4=B8=80=E5=91=A8=E7=9A=84=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=91=E5=B8=83=E6=95=B0=E3=80=81=E8=BF=91?= =?UTF-8?q?=E4=B8=80=E5=91=A8PV=E6=95=B0=EF=BC=88=E6=80=BB=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E9=87=8F=EF=BC=89=E3=80=81=E8=BF=91=E4=B8=80=E5=91=A8?= =?UTF-8?q?UV=E6=95=B0=EF=BC=88=E7=82=B9=E5=87=BB=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/domain/vo/ZoneDetailDataVo.java | 18 + .../zone/detail/mapper/ZoneDetailMapper.java | 22 + .../service/impl/ZoneDetailServiceImpl.java | 37 +- .../mapper/zone/ZoneDetailMapper.xml | 432 +++++++++--------- 4 files changed, 299 insertions(+), 210 deletions(-) diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java index 28d2e6f53..7a1fe28d2 100644 --- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java +++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/domain/vo/ZoneDetailDataVo.java @@ -247,4 +247,22 @@ public class ZoneDetailDataVo extends BaseEntity { */ @ApiModelProperty(value = "数据集板块标题") private String sectionDataSetTitle; + + /** + * 近一周的文章新增发布数 + */ + @ApiModelProperty(value = "近一周的文章新增发布数") + private Long weekArticles = 0L; + + /** + * 近一周UV数(点击去重) + */ + @ApiModelProperty(value = "近一周UV数(点击去重)") + private Long weekUV = 0L; + + /** + * 近一周PV数(总访问量) + */ + @ApiModelProperty(value = "近一周PV数(总访问量)") + private Long weekPV = 0L; } diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/mapper/ZoneDetailMapper.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/mapper/ZoneDetailMapper.java index 4b92aa8ad..b2a0eda48 100644 --- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/mapper/ZoneDetailMapper.java +++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/mapper/ZoneDetailMapper.java @@ -2,9 +2,13 @@ package com.microservices.zone.detail.mapper; import com.microservices.common.datascope.annotation.DataScope; import com.microservices.zone.detail.domain.ZoneDetail; +import com.microservices.zone.detail.domain.vo.ZoneDetailDataVo; import com.microservices.zone.detail.domain.vo.ZoneDetailSearchVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.security.access.method.P; +import java.util.Date; import java.util.List; /** @@ -95,4 +99,22 @@ public interface ZoneDetailMapper { * @return */ ZoneDetail selectZoneDetailByName(String name); + + /** + * 专区文章数统计 + * @param createTimeS + * @param createTimeE + * @param key + * @return + */ + ZoneDetailDataVo countArticlesGroupByKey(@Param("createTimeS") Date createTimeS, @Param("createTimeE") Date createTimeE, @Param("key") String key); + + /** + * 专区浏览数据统计 + * @param createTimeS + * @param createTimeE + * @param key + * @return + */ + ZoneDetailDataVo countPUVsGroupByKey(@Param("createTimeS") Date createTimeS, @Param("createTimeE") Date createTimeE, @Param("key") String key); } diff --git a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java index 7eb151787..a84b8dc0d 100644 --- a/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java +++ b/microservices-modules/microservices-modules-zone/src/main/java/com/microservices/zone/detail/service/impl/ZoneDetailServiceImpl.java @@ -57,10 +57,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; import java.util.stream.Collectors; /** @@ -198,6 +198,22 @@ public class ZoneDetailServiceImpl implements IZoneDetailService { gitLinkRequestHelper.gitLinkUrl + "/zone/" + zoneDetail.getKey() ) ); + + Date[] lastWeek = getLastWeek(); + //专区文章数统计 + ZoneDetailDataVo articlesGroupByKey = zoneDetailMapper + .countArticlesGroupByKey(lastWeek[0],lastWeek[1],zoneDetail.getKey()) ; + if (articlesGroupByKey != null) { + zoneDetailDataVo.setWeekArticles(articlesGroupByKey.getWeekArticles()); + } + //专区浏览数据统计 + ZoneDetailDataVo puVsGroupByKey = zoneDetailMapper + .countPUVsGroupByKey(lastWeek[0],lastWeek[1],zoneDetail.getKey()) ; + if (puVsGroupByKey != null) { + zoneDetailDataVo.setWeekPV(puVsGroupByKey.getWeekPV()); + zoneDetailDataVo.setWeekUV(puVsGroupByKey.getWeekUV()); + } + return zoneDetailDataVo; } @@ -776,4 +792,17 @@ public class ZoneDetailServiceImpl implements IZoneDetailService { return zoneStatisticsVo; } + public Date[] getLastWeek() { + LocalDate today = LocalDate.now(); + LocalDate startOfWeek = today.with(java.time.DayOfWeek.MONDAY).minusDays(7); + LocalDate endOfWeek = today.with(java.time.DayOfWeek.SUNDAY).minusDays(7); + + LocalDateTime startDateTime = startOfWeek.atStartOfDay(); + LocalDateTime endDateTime = endOfWeek.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } } diff --git a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml index 9bdfbe0df..c7cddd80d 100644 --- a/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml +++ b/microservices-modules/microservices-modules-zone/src/main/resources/mapper/zone/ZoneDetailMapper.xml @@ -192,215 +192,235 @@ - - - - - + + + + + - - insert into zone_detail - - name, - `key`, - dept_id, - del_flag, - create_by, - create_time, - update_by, - update_time, - main_title, - sub_title, - first_title, - banner_list, - introduction_title, - introduction_content, - introduction_image, - homepage_membership_size, - homepage_cms_size, - homepage_project_size, - cms_project_id, - gitlink_project_keys, - cms_show, - project_show, - member_show, - partners_show, - special_project_show, - homepage_special_project_title, - resource_show, - homepage_resource_title, - homepage_cms_title, - homepage_project_title, - homepage_member_title, - homepage_partners_title, - template, - helper_title, - helper_show, - doc_need_audit, - resource_need_audit, - is_lock_cms, - section_cms_show, - section_project_show, - section_member_show, - section_helper_show, - section_homepage_show, - section_resource_show, - section_dataset_show, - section_cms_title, - section_project_title, - section_member_title, - section_helper_title, - section_homepage_title, - section_resource_title, - section_dataset_title, - - - #{name}, - #{key}, - #{deptId}, - #{delFlag}, - #{createBy}, - #{createTime}, - #{updateBy}, - #{updateTime}, - #{mainTitle}, - #{subTitle}, - #{firstTitle}, - #{bannerList}, - #{introductionTitle}, - #{introductionContent}, - #{introductionImage}, - #{homepageMembershipSize}, - #{homepageCmsSize}, - #{homepageProjectSize}, - #{cmsProjectId}, - #{gitlinkProjectKeys}, - #{cmsShow}, - #{projectShow}, - #{memberShow}, - #{partnersShow}, - #{specialProjectShow}, - #{homepageSpecialProjectTitle}, - #{resourceShow}, - #{homepageResourceTitle}, - #{homepageCmsTitle}, - #{homepageProjectTitle}, - #{homepageMemberTitle}, - #{homepagePartnersTitle}, - #{template}, - #{helperTitle}, - #{helperShow}, - #{docNeedAudit}, - #{resourceNeedAudit}, - #{isLockCms}, - #{sectionCmsShow}, - #{sectionProjectShow}, - #{sectionMemberShow}, - #{sectionHelperShow}, - #{sectionHomepageShow}, - #{sectionResourceShow}, - #{sectionDataSetShow}, - #{sectionCmsTitle}, - #{sectionProjectTitle}, - #{sectionMemberTitle}, - #{sectionHelperTitle}, - #{sectionHomepageTitle}, - #{sectionResourceTitle}, - #{sectionDataSetTitle}, - - + - - update zone_detail - - name = #{name}, - `key` = #{key}, - dept_id = #{deptId}, - del_flag = #{delFlag}, - create_by = #{createBy}, - create_time = #{createTime}, - update_by = #{updateBy}, - update_time = #{updateTime}, - main_title = #{mainTitle}, - sub_title = #{subTitle}, - first_title = #{firstTitle}, - banner_list = #{bannerList}, - introduction_title = #{introductionTitle}, - introduction_content = #{introductionContent}, - introduction_image = #{introductionImage}, - homepage_membership_size = #{homepageMembershipSize}, - homepage_cms_size = #{homepageCmsSize}, - homepage_project_size = #{homepageProjectSize}, - cms_project_id = #{cmsProjectId}, - gitlink_project_keys = #{gitlinkProjectKeys}, - is_publish = #{isPublish}, - cms_show = #{cmsShow}, - project_show = #{projectShow}, - member_show = #{memberShow}, - partners_show = #{partnersShow}, - special_project_show = #{specialProjectShow}, - homepage_special_project_title = - #{homepageSpecialProjectTitle}, - - resource_show = #{resourceShow}, - homepage_resource_title = - #{homepageResourceTitle}, - - homepage_cms_title = #{homepageCmsTitle}, - homepage_project_title = #{homepageProjectTitle}, - homepage_member_title = #{homepageMemberTitle}, - homepage_partners_title = #{homepagePartnersTitle}, - template = #{template}, - helper_show = #{helperShow}, - helper_title = #{helperTitle}, - doc_need_audit = #{docNeedAudit}, - resource_need_audit = #{resourceNeedAudit}, - is_lock_cms = #{isLockCms}, - section_cms_show = #{sectionCmsShow}, - section_project_show = #{sectionProjectShow}, - section_member_show = #{sectionMemberShow}, - section_helper_show = #{sectionHelperShow}, - section_homepage_show = #{sectionHomepageShow}, - section_resource_show = #{sectionResourceShow}, - section_dataset_show = #{sectionDataSetShow}, - section_cms_title = #{sectionCmsTitle}, - section_project_title = #{sectionProjectTitle}, - section_member_title = #{sectionMemberTitle}, - section_helper_title = #{sectionHelperTitle}, - section_homepage_title = #{sectionHomepageTitle}, - section_resource_title = #{sectionResourceTitle}, - section_dataset_title = #{sectionDataSetTitle}, - + + + + insert into zone_detail + + name, + `key`, + dept_id, + del_flag, + create_by, + create_time, + update_by, + update_time, + main_title, + sub_title, + first_title, + banner_list, + introduction_title, + introduction_content, + introduction_image, + homepage_membership_size, + homepage_cms_size, + homepage_project_size, + cms_project_id, + gitlink_project_keys, + cms_show, + project_show, + member_show, + partners_show, + special_project_show, + homepage_special_project_title, + resource_show, + homepage_resource_title, + homepage_cms_title, + homepage_project_title, + homepage_member_title, + homepage_partners_title, + template, + helper_title, + helper_show, + doc_need_audit, + resource_need_audit, + is_lock_cms, + section_cms_show, + section_project_show, + section_member_show, + section_helper_show, + section_homepage_show, + section_resource_show, + section_dataset_show, + section_cms_title, + section_project_title, + section_member_title, + section_helper_title, + section_homepage_title, + section_resource_title, + section_dataset_title, + + + #{name}, + #{key}, + #{deptId}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{mainTitle}, + #{subTitle}, + #{firstTitle}, + #{bannerList}, + #{introductionTitle}, + #{introductionContent}, + #{introductionImage}, + #{homepageMembershipSize}, + #{homepageCmsSize}, + #{homepageProjectSize}, + #{cmsProjectId}, + #{gitlinkProjectKeys}, + #{cmsShow}, + #{projectShow}, + #{memberShow}, + #{partnersShow}, + #{specialProjectShow}, + #{homepageSpecialProjectTitle}, + #{resourceShow}, + #{homepageResourceTitle}, + #{homepageCmsTitle}, + #{homepageProjectTitle}, + #{homepageMemberTitle}, + #{homepagePartnersTitle}, + #{template}, + #{helperTitle}, + #{helperShow}, + #{docNeedAudit}, + #{resourceNeedAudit}, + #{isLockCms}, + #{sectionCmsShow}, + #{sectionProjectShow}, + #{sectionMemberShow}, + #{sectionHelperShow}, + #{sectionHomepageShow}, + #{sectionResourceShow}, + #{sectionDataSetShow}, + #{sectionCmsTitle}, + #{sectionProjectTitle}, + #{sectionMemberTitle}, + #{sectionHelperTitle}, + #{sectionHomepageTitle}, + #{sectionResourceTitle}, + #{sectionDataSetTitle}, + + + + + update zone_detail + + name = #{name}, + `key` = #{key}, + dept_id = #{deptId}, + del_flag = #{delFlag}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + main_title = #{mainTitle}, + sub_title = #{subTitle}, + first_title = #{firstTitle}, + banner_list = #{bannerList}, + introduction_title = #{introductionTitle}, + introduction_content = #{introductionContent}, + introduction_image = #{introductionImage}, + homepage_membership_size = #{homepageMembershipSize}, + homepage_cms_size = #{homepageCmsSize}, + homepage_project_size = #{homepageProjectSize}, + cms_project_id = #{cmsProjectId}, + gitlink_project_keys = #{gitlinkProjectKeys}, + is_publish = #{isPublish}, + cms_show = #{cmsShow}, + project_show = #{projectShow}, + member_show = #{memberShow}, + partners_show = #{partnersShow}, + special_project_show = #{specialProjectShow}, + homepage_special_project_title = + #{homepageSpecialProjectTitle}, + + resource_show = #{resourceShow}, + homepage_resource_title = + #{homepageResourceTitle}, + + homepage_cms_title = #{homepageCmsTitle}, + homepage_project_title = #{homepageProjectTitle}, + homepage_member_title = #{homepageMemberTitle}, + homepage_partners_title = #{homepagePartnersTitle}, + template = #{template}, + helper_show = #{helperShow}, + helper_title = #{helperTitle}, + doc_need_audit = #{docNeedAudit}, + resource_need_audit = #{resourceNeedAudit}, + is_lock_cms = #{isLockCms}, + section_cms_show = #{sectionCmsShow}, + section_project_show = #{sectionProjectShow}, + section_member_show = #{sectionMemberShow}, + section_helper_show = #{sectionHelperShow}, + section_homepage_show = #{sectionHomepageShow}, + section_resource_show = #{sectionResourceShow}, + section_dataset_show = #{sectionDataSetShow}, + section_cms_title = #{sectionCmsTitle}, + section_project_title = #{sectionProjectTitle}, + section_member_title = #{sectionMemberTitle}, + section_helper_title = #{sectionHelperTitle}, + section_homepage_title = #{sectionHomepageTitle}, + section_resource_title = #{sectionResourceTitle}, + section_dataset_title = #{sectionDataSetTitle}, + - where id = #{id} - + where id = #{id} + - - delete - from zone_detail - where id = #{id} - + + delete + from zone_detail + where id = #{id} + - - delete from zone_detail where id in - - #{id} - - - \ No newline at end of file + + delete from zone_detail where id in + + #{id} + + + \ No newline at end of file From 99c029c59327f6a320a9152f67995623f405a2d8 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 14 Mar 2025 09:22:17 +0800 Subject: [PATCH 194/270] =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=A7=BB=E8=87=B3?= =?UTF-8?q?OpenController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pms/common/controller/OpenController.java | 24 ++++++++++++ .../SoftwareFactStatisticsController.java | 38 ------------------- 2 files changed, 24 insertions(+), 38 deletions(-) delete mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java index 6b14dde11..b9a1bedb6 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java @@ -3,8 +3,10 @@ package com.microservices.pms.common.controller; import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.pms.specialArea.service.SoftwareFactStatisticsServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; @@ -23,6 +25,9 @@ public class OpenController extends BaseController { @Value("${http.gitLinkUrl}") public String gitLinkUrl; + @Autowired + private SoftwareFactStatisticsServiceImpl softwareFactStatisticsService; + /** * 查询项目管理企业列表 */ @@ -33,4 +38,23 @@ public class OpenController extends BaseController { (Object) EscapeUtil.removeExtraSlashOfUrl(gitLinkUrl + "/login") ); } + + @ApiOperation(value = "今日工作态势") + @GetMapping("/specialArea/softwareFact/statis/todayWorkSituation") + public AjaxResult todayWorkSituation(){ + return AjaxResult.success(softwareFactStatisticsService.todayWorkSituation()); + } + + @ApiOperation(value = "周、月工作态势") + @GetMapping("/specialArea/softwareFact/statis/weekMonthWorkSituation") + public AjaxResult weekMonthWorkSituation(String type){ + return AjaxResult.success(softwareFactStatisticsService.weekMonthWorkSituation(type)); + } + + @ApiOperation(value = "项目研发状态") + @GetMapping("/specialArea/softwareFact/statis/projectSituation") + public AjaxResult projectSituation(){ + return AjaxResult.success(softwareFactStatisticsService.projectSituation()); + } + } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java deleted file mode 100644 index 90953edcf..000000000 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/controller/SoftwareFactStatisticsController.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.microservices.pms.specialArea.controller; - -import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.pms.specialArea.service.SoftwareFactStatisticsServiceImpl; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController() -@RequestMapping("/specialArea/softwareFact/statis") -@Api(tags = "项目管理-软件工厂统计相关接口") -@RequiredArgsConstructor -public class SoftwareFactStatisticsController { - - private final SoftwareFactStatisticsServiceImpl softwareFactStatisticsService; - - @ApiOperation(value = "今日工作态势") - @GetMapping("/todayWorkSituation") - public AjaxResult todayWorkSituation(){ - return AjaxResult.success(softwareFactStatisticsService.todayWorkSituation()); - } - - @ApiOperation(value = "周、月工作态势") - @GetMapping("/weekMonthWorkSituation") - public AjaxResult weekMonthWorkSituation(String type){ - return AjaxResult.success(softwareFactStatisticsService.weekMonthWorkSituation(type)); - } - - @ApiOperation(value = "项目研发状态") - @GetMapping("/projectSituation") - public AjaxResult projectSituation(){ - return AjaxResult.success(softwareFactStatisticsService.projectSituation()); - } - -} From 509de16d62746d870b9386d9df4f1943aa5f2fb1 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Mar 2025 10:20:26 +0800 Subject: [PATCH 195/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E9=A1=B9=E7=9B=AE=E8=8B=A5=E5=B7=B2=E5=85=B3=E8=81=94?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E4=B8=8D=E5=85=81=E8=AE=B8=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E6=88=96=E4=BF=AE=E6=94=B9=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/project/service/impl/PmsProjectServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java index 1208e9350..ab4c215b4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/impl/PmsProjectServiceImpl.java @@ -283,6 +283,12 @@ public class PmsProjectServiceImpl implements IPmsProjectService { Long updatedPmsProjectId = pmsProjectUpdateVo.getId(); PmsProject oldProject = selectAndCheckPmsProjectById(updatedPmsProjectId); PmsUtils.validStartTimeAndEndTime(pmsProjectUpdateVo.getStartTime(), pmsProjectUpdateVo.getEndTime()); + // 项目若已关联产品不允许取消或修改关联 + if (oldProject.getPmsProductId() != null) { + if (!oldProject.getPmsProductId().equals(pmsProjectUpdateVo.getPmsProductId())) { + throw new ServiceException("项目已关联产品,不允许取消或修改关联"); + } + } pmsProjectUpdateVo.setUpdateTime(DateUtils.getNowDate()); int count = pmsProjectMapper.updatePmsProjectByUpdateInput(pmsProjectUpdateVo); From 06bf1c291076e2127e655ce75d8b4bae666f8e0b Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Mar 2025 14:12:50 +0800 Subject: [PATCH 196/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E9=A1=B9=E7=9B=AE=E8=AE=A1=E5=88=92=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 若项目未关联产品允许新增项目计划 2. 若项目未关联产品允许编辑项目计划 Signed-off-by: OTTO <731554297@qq.com> --- .../controller/PmsProjectIssuesController.java | 6 ------ .../project/service/PmsProjectIssuesService.java | 14 +++++++++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java index 23eccf9f5..96e7e686a 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java @@ -2,7 +2,6 @@ package com.microservices.pms.project.controller; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; -import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; @@ -11,7 +10,6 @@ import com.microservices.common.security.annotation.RequiresPermissions; import com.microservices.pms.project.domain.vo.*; import com.microservices.pms.project.service.IPmsProjectTestsheetIssuesService; import com.microservices.pms.project.service.PmsProjectIssuesService; -import com.microservices.pms.utils.PmsConstants; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -58,10 +56,6 @@ public class PmsProjectIssuesController extends BaseController { @PostMapping("/add") @ApiOperation(value = "新增项目工作项") public AjaxResult add(@RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { - if (PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(String.valueOf(pmsProjectIssuesInputVo.getPmIssueType())) - && pmsProjectIssuesInputVo.getRootId() == null) { - throw new ServiceException("项目计划仅能基于产品需求创建"); - } JSONObject result = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); return success(result); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java index f380df1cd..ff1a6cd76 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java @@ -100,14 +100,19 @@ public class PmsProjectIssuesService { } public JSONObject insertPmsProjectIssues(PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { - pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); + PmsProject pmsProject = pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); + if (pmsProject.getPmsProductId() != null + && PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(String.valueOf(pmsProjectIssuesInputVo.getPmIssueType())) + && pmsProjectIssuesInputVo.getRootId() == null) { + throw new ServiceException("项目计划仅能基于产品需求创建"); + } JSONObject issueInput = convertPmsProjectIssuesInputVoToIssueInputJSON(pmsProjectIssuesInputVo); return gitLinkRequestHelper.doPost(PmsGitLinkRequestUrl.CREATE_ISSUE(), issueInput); } @Transactional(rollbackFor = Exception.class) public JSONObject updatePmsProjectIssues(Long id, PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { - pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); + PmsProject pmsProject = pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); JSONObject updatedIssue; try { updatedIssue = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE(id, pmsProjectIssuesInputVo.getPmProjectId())); @@ -115,7 +120,8 @@ public class PmsProjectIssuesService { throw new RuntimeException(e); } // 项目计划不允许编辑标题、正文和附件 - if (PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(updatedIssue.getString("pm_issue_type")) + if (pmsProject.getPmsProductId() != null + && PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(updatedIssue.getString("pm_issue_type")) && updatedIssue.getString("root_id") == null) { if (pmsProjectIssuesInputVo.isChangeContent(updatedIssue)) { throw new ServiceException("项目计划不允许编辑标题、正文和附件"); @@ -140,8 +146,6 @@ public class PmsProjectIssuesService { } } } - - } if (PmsConstants.PROJECT_ISSUE_TYPE_WEEKLY_REPORT.equals(updatedIssue.getString("pm_issue_type")) && updatedIssue.getString("root_id") != null From 689229801c109590bc4dbeb1b01824969ad6a1e8 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Tue, 18 Mar 2025 17:07:55 +0800 Subject: [PATCH 197/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E5=90=88=E5=B9=B6=E4=B8=BB=E5=B9=B2=E5=88=86=E6=94=AF?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/pipeline/service/IPmsCiPipelinesService.java | 2 -- .../com/microservices/pms/utils/PmsGitLinkRequestUrl.java | 5 ----- 2 files changed, 7 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java index 40dd2f9f0..023b73fa2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/pipeline/service/IPmsCiPipelinesService.java @@ -104,8 +104,6 @@ public interface IPmsCiPipelinesService JSONObject getPipelineRunResults(Long id, String run); - JSONObject getPipelineRunResults(Long id, String run); - JSONObject getPipelineRubyIdByJavaId(Long javaId); JSONObject getPipelineId(String repoOwner, String repoIdentifier, String fileName); diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java index 588cc470c..0fb7f7861 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/utils/PmsGitLinkRequestUrl.java @@ -439,9 +439,4 @@ public class PmsGitLinkRequestUrl extends GitLinkRequestUrl { public static GitLinkRequestUrl GET_ACTION_RUN_DATA(String owner, String workflows) { return getGitLinkRequestUrl(String.format("/api/pm/action_runs?owner_id=%s&workflows=%s", owner, workflows), "data"); } - - - public static GitLinkRequestUrl GET_PIPELINE_RUN_RESULTS(String owner, String repoIdentifier, String run){ - return getGitLinkRequestUrl(String.format("/api/v1/%s/%s/pipelines/run_results.json?run_id=%s", owner, repoIdentifier, run)); - } } From 729cdb80172e0f86f243f38657667ce945a3227f Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 19 Mar 2025 10:47:28 +0800 Subject: [PATCH 198/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E4=BF=AE=E5=A4=8D=E5=9F=BA=E4=BA=8E=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=88=9B=E5=BB=BA=E9=A1=B9=E7=9B=AE=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/project/controller/PmsProjectIssuesController.java | 2 +- .../pms/project/service/PmsProjectIssuesService.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java index 96e7e686a..c1e4aedf2 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/controller/PmsProjectIssuesController.java @@ -56,7 +56,7 @@ public class PmsProjectIssuesController extends BaseController { @PostMapping("/add") @ApiOperation(value = "新增项目工作项") public AjaxResult add(@RequestBody PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { - JSONObject result = pmsProjectIssuesService.insertPmsProjectIssues(pmsProjectIssuesInputVo); + JSONObject result = pmsProjectIssuesService.insertPmsProjectIssuesRestricted(pmsProjectIssuesInputVo); return success(result); } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java index ff1a6cd76..0b779aca9 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/project/service/PmsProjectIssuesService.java @@ -99,13 +99,18 @@ public class PmsProjectIssuesService { return issueListResult; } - public JSONObject insertPmsProjectIssues(PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { + public JSONObject insertPmsProjectIssuesRestricted(PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { PmsProject pmsProject = pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); if (pmsProject.getPmsProductId() != null && PmsConstants.PROJECT_ISSUE_TYPE_REQUIREMENT.equals(String.valueOf(pmsProjectIssuesInputVo.getPmIssueType())) && pmsProjectIssuesInputVo.getRootId() == null) { throw new ServiceException("项目计划仅能基于产品需求创建"); } + return insertPmsProjectIssues(pmsProjectIssuesInputVo); + } + + public JSONObject insertPmsProjectIssues(PmsProjectIssuesInputVo pmsProjectIssuesInputVo) { + pmsProjectService.selectAndCheckPmsProjectById(pmsProjectIssuesInputVo.getPmProjectId()); JSONObject issueInput = convertPmsProjectIssuesInputVoToIssueInputJSON(pmsProjectIssuesInputVo); return gitLinkRequestHelper.doPost(PmsGitLinkRequestUrl.CREATE_ISSUE(), issueInput); } From 123d967254e8a3cfff2f664a317e57c7bca9a5d2 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Wed, 19 Mar 2025 11:11:19 +0800 Subject: [PATCH 199/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E4=BF=AE=E5=A4=8D=E5=8F=98=E6=9B=B4=E6=97=B6=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=88=A0=E9=99=A4=E9=99=84=E4=BB=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/pms/product/domain/PmsProductRequirement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java index ef4480318..dd7da6355 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java @@ -199,7 +199,7 @@ public class PmsProductRequirement extends BaseEntity if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getContent())) { target.setContent(productReqSpecsChangeVo.getContent()); } - if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getFileIdentifiers())) { + if (productReqSpecsChangeVo.getFileIdentifiers() != null) { target.setFileIdentifiers(productReqSpecsChangeVo.getFileIdentifiers()); } return target; From f0e01ecaf6281b96664af9589b1859f055c28494 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Thu, 20 Mar 2025 14:10:32 +0800 Subject: [PATCH 200/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=80=82=E9=85=8D=E7=BA=BF=E4=B8=8A=E7=8E=AF=E5=A2=83?= =?UTF-8?q?):=20=E6=89=93=E5=8D=B0=E8=AF=B7=E6=B1=82Forge=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E5=BC=82=E5=B8=B8=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../microservices/common/httpClient/service/HttpAPIService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java index 53fd61202..58a2e9503 100644 --- a/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java +++ b/microservices-common/microservices-common-httpClient/src/main/java/com/microservices/common/httpClient/service/HttpAPIService.java @@ -283,6 +283,7 @@ public class HttpAPIService { if (length != 0L) { String result = EntityUtils.toString(httpEntity); if (!JSON.isValid(result)) { + logger.error("平台接口响应格式异常,状态码:{},响应内容:{}", httpStatusCode, result); throw new ServiceException("平台接口响应格式异常"); } Object resultObj = JSON.parse(result); From f798cae717d22851e9a1b87fdfee46e197e6424e Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 21 Mar 2025 09:00:15 +0800 Subject: [PATCH 201/270] =?UTF-8?q?feat(=E4=BB=BB=E5=8A=A1=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=BA=93):=20=E4=BB=BB=E5=8A=A1=E4=B8=8E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A1=8C=E4=B8=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../microservices-modules-dms/pom.xml | 147 ++++++++++ .../dms/MicroservicesDmsApplication.java | 25 ++ .../dms/common/controller/OpenController.java | 30 ++ .../dms/constant/TaskConstant.java | 11 + .../CollectUserActDataController.java | 41 +++ .../TaskResourceLibraryController.java | 83 ++++++ .../dms/task/domain/Clicker.java | 19 ++ .../dms/task/domain/Downloader.java | 16 ++ .../dms/task/domain/Searcher.java | 18 ++ .../dms/task/domain/vo/TaskListVo.java | 22 ++ .../dms/task/domain/vo/UserActionDataVo.java | 18 ++ .../mapper/TaskResourceLibraryMapper.java | 45 +++ .../service/TaskResourceLibraryService.java | 86 ++++++ .../dms/utils/CustomExecutorFactory.java | 37 +++ .../microservices/dms/utils/DmsConstants.java | 5 + .../com/microservices/dms/utils/DmsUtils.java | 82 ++++++ .../com/microservices/dms/utils/YamlUtil.java | 58 ++++ .../src/main/resources/banner.txt | 10 + .../src/main/resources/bootstrap-prod.yml | 34 +++ .../src/main/resources/bootstrap.yml | 32 +++ .../src/main/resources/logback.xml | 101 +++++++ .../mapper/dms/TaskResourceLibraryMapper.xml | 267 ++++++++++++++++++ .../pms/test/PmsProjectTestSheetTest.java | 63 +++++ microservices-modules/pom.xml | 1 + 24 files changed, 1251 insertions(+) create mode 100644 microservices-modules/microservices-modules-dms/pom.xml create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/MicroservicesDmsApplication.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/CustomExecutorFactory.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsUtils.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/YamlUtil.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/banner.txt create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/bootstrap-prod.yml create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/bootstrap.yml create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/logback.xml create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml create mode 100644 microservices-modules/microservices-modules-dms/src/main/test/com/microservices/pms/test/PmsProjectTestSheetTest.java diff --git a/microservices-modules/microservices-modules-dms/pom.xml b/microservices-modules/microservices-modules-dms/pom.xml new file mode 100644 index 000000000..4b47b7dd6 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/pom.xml @@ -0,0 +1,147 @@ + + + + com.microservices + microservices-modules + 3.6.2 + + 4.0.0 + + microservices-modules-dms + + + microservices-modules-dms数据管理体系模块 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + mysql + mysql-connector-java + + + + + com.microservices + microservices-common-async + + + + + com.microservices + microservices-common-datasource + + + + + com.microservices + microservices-common-datascope + + + + + com.microservices + microservices-common-log + + + + + com.microservices + microservices-common-swagger + + + com.microservices + microservices-common-security + + + com.microservices + microservices-common-swagger + + + org.springframework.security + spring-security-core + + + com.microservices + microservices-common-log + + + com.microservices + microservices-common-core + + + org.projectlombok + lombok + + + + org.apache.httpcomponents + httpclient + 4.5.14 + + + com.microservices + microservices-common-httpClient + 3.6.2 + compile + + + net.coobird + thumbnailator + 0.4.8 + compile + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/MicroservicesDmsApplication.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/MicroservicesDmsApplication.java new file mode 100644 index 000000000..c89588cec --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/MicroservicesDmsApplication.java @@ -0,0 +1,25 @@ +package com.microservices.dms; + +import com.microservices.common.security.annotation.EnableCustomConfig; +import com.microservices.common.security.annotation.EnableRyFeignClients; +import com.microservices.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * 项目管理模块 + * + * @author otto + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableRyFeignClients +@SpringBootApplication +@EnableScheduling +public class MicroservicesDmsApplication { + public static void main(String[] args) { + SpringApplication.run(MicroservicesDmsApplication.class, args); + System.out.println("(♥◠‿◠)ノ゙ 数据管理体系模块启动成功 ლ(´ڡ`ლ)゙ \n"); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java new file mode 100644 index 000000000..07e0ee6cb --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java @@ -0,0 +1,30 @@ +package com.microservices.dms.common.controller; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author otto + */ +@RestController +@Api(tags = "数据管理体系-公开接口") +@RequestMapping("/open") +@RefreshScope +public class OpenController extends BaseController { + + + + @GetMapping("/loginUrl") + @ApiOperation(value = "获取登录地址") + public AjaxResult loginUrl() { + return success( ); + } + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java new file mode 100644 index 000000000..e8b545c47 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java @@ -0,0 +1,11 @@ +package com.microservices.dms.constant; + +public class TaskConstant { + + public static final String TASK_TYPE_WATCHERS = "MakerTask"; + public static final String TASK_TYPE_JOURNALS = "makerSpaceTask"; + public static final String TASK_TYPE_PAPERS = ""; + public static final String TASK_TYPE_OTHER = "makerSpaceTask"; + private TaskConstant() { + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java new file mode 100644 index 000000000..54f9470f9 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java @@ -0,0 +1,41 @@ +package com.microservices.dms.task.controller; + + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.dms.task.domain.Clicker; +import com.microservices.dms.task.domain.Downloader; +import com.microservices.dms.task.domain.Searcher; +import com.microservices.dms.task.service.TaskResourceLibraryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "数据管理体系-用户行为信息接口") +@RestController +@RequestMapping("/collectUserActData") +@RequiredArgsConstructor +public class CollectUserActDataController { + + private final TaskResourceLibraryService taskResourceLibraryService; + + @PostMapping("/addClicker") + @ApiOperation(value = "记录点击次数") + public AjaxResult addTaskClick(Clicker clicker) { + return AjaxResult.success(taskResourceLibraryService.addClick(clicker)); + } + + @PostMapping("/addDownloader") + @ApiOperation(value = "记录下载次数") + public AjaxResult addDownloader(Downloader downloader) { + return AjaxResult.success(taskResourceLibraryService.addDownloader(downloader)); + } + + @PostMapping("/addSearcher") + @ApiOperation(value = "记录搜索次数") + public AjaxResult addSearcher(Searcher searcher) { + return AjaxResult.success(taskResourceLibraryService.addSearcher(searcher)); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java new file mode 100644 index 000000000..19b9da742 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java @@ -0,0 +1,83 @@ +package com.microservices.dms.task.controller; + +import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.dms.task.domain.vo.TaskListVo; +import com.microservices.dms.task.domain.vo.UserActionDataVo; +import com.microservices.dms.task.service.TaskResourceLibraryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +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 java.util.List; + +@Api(tags = "数据管理体系-任务资源库接口") +@RestController +@RequestMapping("/taskResourceLibrary") +@RequiredArgsConstructor +public class TaskResourceLibraryController extends BaseController { + + private final TaskResourceLibraryService taskResourceLibraryService; + + + @GetMapping("/selectTaskJournalsCondition") + @ApiOperation(value = "查询用户评论") + public GenericsTableDataInfo selectTaskJournalsCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectTaskJournalsCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectClickerCondition") + @ApiOperation(value = "查询用户点击") + public GenericsTableDataInfo selectClickerCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectClickerCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectDownloaderCondition") + @ApiOperation(value = "查询用户下载") + public GenericsTableDataInfo selectDownloaderCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectDownloaderCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectPapersCondition") + @ApiOperation(value = "查询用户交稿") + public GenericsTableDataInfo selectPapersCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectPapersCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectWatcherCondition") + @ApiOperation(value = "查询用户关注") + public GenericsTableDataInfo selectWatcherCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectWatcherCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectSearcherCondition") + @ApiOperation(value = "查询用户搜索") + public GenericsTableDataInfo selectSearcherCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectSearcherCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectTaskListCondition") + @ApiOperation(value = "查询任务列表") + public GenericsTableDataInfo selectTaskListCondition(@RequestParam TaskListVo taskListVo) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectTaskListCondition(taskListVo); + return PageUtils.toPage(userActionDataVos); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java new file mode 100644 index 000000000..68f652193 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java @@ -0,0 +1,19 @@ +package com.microservices.dms.task.domain; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class Clicker{ + private Long id; + private String clickType; + private Long clickId; + private Long userId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; + private String extInfo; +} + diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java new file mode 100644 index 000000000..5c83f04f0 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java @@ -0,0 +1,16 @@ +package com.microservices.dms.task.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import java.util.Date; + +@Data +public class Downloader { + private Long id; + private String downloadType; + private Long downloadId; + private Long userId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; + private String extInfo; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java new file mode 100644 index 000000000..aa0de994a --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java @@ -0,0 +1,18 @@ +package com.microservices.dms.task.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class Searcher { + private Long id; + private String clickType; + private Long clickId; + private Long userId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; + private String extInfo; + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java new file mode 100644 index 000000000..cebb53e33 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java @@ -0,0 +1,22 @@ +package com.microservices.dms.task.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class TaskListVo { + private Long id; + private String name; + private String categoryName; + private Long categoryId; + private BigDecimal bounty; + private Long totalTaskDays; + + private Long taskClickCount; + private Long taskWatcherCount; + private Long taskPapersCount; + private Long taskJournalCount; + private Long taskSearchCount; + private Long taskDownloadCount; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java new file mode 100644 index 000000000..a33ded0ea --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java @@ -0,0 +1,18 @@ +package com.microservices.dms.task.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class UserActionDataVo { + private Long id; + private String itemType; + private Integer itemId; + private String itemName; + private Integer userId; + private String userName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java new file mode 100644 index 000000000..7c40bb3c1 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java @@ -0,0 +1,45 @@ +package com.microservices.dms.task.mapper; + +import com.microservices.dms.task.domain.Clicker; +import com.microservices.dms.task.domain.Downloader; +import com.microservices.dms.task.domain.Searcher; +import com.microservices.dms.task.domain.vo.TaskListVo; +import com.microservices.dms.task.domain.vo.UserActionDataVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface TaskResourceLibraryMapper { + + int insertClicker(Clicker record); + + int insertSearcher(Searcher record); + + int insertDownloader(Downloader record); + + List selectClickerCondition(UserActionDataVo clicker); + + List selectSearcherCondition(UserActionDataVo searcher); + + List selectDownloaderCondition(UserActionDataVo downloader); + + List selectWatcherCondition(UserActionDataVo watcher); + + List selectPapersCondition(UserActionDataVo paper); + + List selectTaskJournalsCondition(UserActionDataVo taskJournals); + + List selectTaskListCondition(TaskListVo taskListVo); + + long countClickerCondition(UserActionDataVo clicker); + + long countSearcherCondition(UserActionDataVo searcher); + + long countDownloaderCondition(UserActionDataVo downloader); + + long countWatcherCondition(UserActionDataVo watcher); + + long countPapersCondition(UserActionDataVo paper); + long countTaskJournalsCondition(UserActionDataVo taskJournals); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java new file mode 100644 index 000000000..9bc9e4bc1 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java @@ -0,0 +1,86 @@ +package com.microservices.dms.task.service; + +import com.microservices.common.core.utils.DateUtils; +import com.microservices.dms.constant.TaskConstant; +import com.microservices.dms.task.domain.Clicker; +import com.microservices.dms.task.domain.Downloader; +import com.microservices.dms.task.domain.Searcher; +import com.microservices.dms.task.domain.vo.TaskListVo; +import com.microservices.dms.task.domain.vo.UserActionDataVo; +import com.microservices.dms.task.mapper.TaskResourceLibraryMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class TaskResourceLibraryService { + private final TaskResourceLibraryMapper taskResourceLibraryMapper; + + public int addClick(Clicker click) { + click.setCreatedAt(DateUtils.getNowDate()); + return taskResourceLibraryMapper.insertClicker(click); + } + + public int addSearcher(Searcher searcher) { + searcher.setCreatedAt(DateUtils.getNowDate()); + return taskResourceLibraryMapper.insertSearcher(searcher); + } + + public int addDownloader(Downloader downloader) { + downloader.setCreatedAt(DateUtils.getNowDate()); + return taskResourceLibraryMapper.insertDownloader(downloader); + } + + public List selectClickerCondition(UserActionDataVo actionDataVo) { + return taskResourceLibraryMapper.selectClickerCondition(actionDataVo); + } + + public List selectSearcherCondition(UserActionDataVo searcher) { + return taskResourceLibraryMapper.selectSearcherCondition(searcher); + } + + public List selectDownloaderCondition(UserActionDataVo downloader) { + return taskResourceLibraryMapper.selectDownloaderCondition(downloader); + } + + public List selectWatcherCondition(UserActionDataVo watcher) { + return taskResourceLibraryMapper.selectWatcherCondition(watcher); + } + + public List selectPapersCondition(UserActionDataVo paper) { + return taskResourceLibraryMapper.selectPapersCondition(paper); + } + + public List selectTaskJournalsCondition(UserActionDataVo taskJournals) { + return taskResourceLibraryMapper.selectTaskJournalsCondition(taskJournals); + } + + public List selectTaskListCondition(TaskListVo taskListVo) { + List taskListVos = taskResourceLibraryMapper.selectTaskListCondition(taskListVo); + for (TaskListVo vo : taskListVos) { + UserActionDataVo c = new UserActionDataVo(); + c.setId(vo.getId()); + c.setItemType(TaskConstant.TASK_TYPE_PAPERS); + long papers = taskResourceLibraryMapper.countPapersCondition(c); + c.setItemType(TaskConstant.TASK_TYPE_WATCHERS); + long watcher = taskResourceLibraryMapper.countWatcherCondition(c); + c.setItemType(TaskConstant.TASK_TYPE_JOURNALS); + long clicker = taskResourceLibraryMapper.countClickerCondition(c); + long downloader = taskResourceLibraryMapper.countDownloaderCondition(c); + long taskJournals = taskResourceLibraryMapper.countTaskJournalsCondition(c); + long searcher = taskResourceLibraryMapper.countSearcherCondition(c); + + vo.setTaskClickCount(clicker); + vo.setTaskWatcherCount(watcher); + vo.setTaskPapersCount(papers); + vo.setTaskDownloadCount(downloader); + vo.setTaskJournalCount(taskJournals); + vo.setTaskSearchCount(searcher); + } + return taskListVos; + } + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/CustomExecutorFactory.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/CustomExecutorFactory.java new file mode 100644 index 000000000..c14a300bd --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/CustomExecutorFactory.java @@ -0,0 +1,37 @@ +package com.microservices.dms.utils; + +import com.microservices.common.core.exception.ServiceException; +import com.microservices.common.core.threadPool.ThreadPoolExecutorWrap; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * 线程池工厂 + * + * @author OTTO + */ +public class CustomExecutorFactory { + /** + * 创建线程池 + * 存在并发处理的情况,设置核心线程为2,设置有界队列长度为100,最大线程数为10 + * 当超出队列已满且达到最大线程数时抛出异常 + * Ncpu=CPU数量 + * Ucpu=目标CPU的使用率,0<=Ucpu<=1 + * W/C=任务等待时间与任务计算时间的比率 + * Nthreads =Ncpu*Ucpu*(1+W/C) + */ + public static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutorWrap( + 4 + , 10 + , 10 + , TimeUnit.SECONDS + , new ArrayBlockingQueue<>(100) + , Executors.defaultThreadFactory() + , (r, executor) -> { + throw new ServiceException("目前处理的人太多了,请稍后再试"); + } + ); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java new file mode 100644 index 000000000..83bdcc2bd --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java @@ -0,0 +1,5 @@ +package com.microservices.dms.utils; + +public class DmsConstants { + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsUtils.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsUtils.java new file mode 100644 index 000000000..8522ba0d2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsUtils.java @@ -0,0 +1,82 @@ +package com.microservices.dms.utils; + +import com.microservices.common.core.exception.ServiceException; + +import java.util.Date; +import java.util.HashMap; +import java.util.UUID; +import java.util.function.Function; + +/** + * @author otto + */ +public class DmsUtils { + /** + * 产品标识使用六位随机值 + * + * @return 产品标识 + */ + public static String generateRandomProductIdentifier() { + UUID uuid = UUID.randomUUID(); + // 截取UUID的一部分,例如前6个字符 + return uuid.toString().substring(0, 6).toUpperCase(); + } + + /** + * 校验开始时间和结束时间 + * + * @param startDate 开始时间 + * @param endDate 结束时间 + */ + public static void validStartTimeAndEndTime(Date startDate, Date endDate) { + if (startDate != null && endDate != null) { + if (endDate.before(startDate)) { + throw new ServiceException("结束时间不能早于开始时间"); + } + } + } + + /** + * 从HashMap中获取缓存数据,当HashMap中不存在时执行传入的数据查询方法获取数据并存入缓存(当HashMap为null时直接返回执行数据查询的结果) + * 使用方法名和输入参数作为缓存Key,简化代码 + * + * @param hashMap 缓存 + * @param dataRetrievalFunction 数据查询方法 + * @param args 查询方法输入参数 + * @param 查询方法输入参数类型 + * @param 返回数据类型 + * @return 结果 + */ + public static R getSelectObjectInCache(HashMap hashMap, Function dataRetrievalFunction, T args) { + if (dataRetrievalFunction == null) { + return null; + } + String cacheKey = dataRetrievalFunction.getClass().getSimpleName() + "-" + args; + if (hashMap == null) { + return dataRetrievalFunction.apply(args); + } else if (hashMap.containsKey(cacheKey)) { + @SuppressWarnings("unchecked") + R r = (R) hashMap.get(cacheKey); + return r; + } else { + R r = dataRetrievalFunction.apply(args); + hashMap.put(cacheKey, r); + return r; + } + } + + /** + * 获取文件路径中文件所在的文件夹 + * + * @return 文件夹 + */ + public static String parseDirectory(String filePath) { + // 找到最后一个"/"的位置 + int lastSlashIndex = filePath.lastIndexOf('/'); + if (lastSlashIndex > 0) { + // 截取到"/"之前的所有字符作为文件夹路径 + return filePath.substring(0, lastSlashIndex); + } + return ""; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/YamlUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/YamlUtil.java new file mode 100644 index 000000000..e381bf502 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/YamlUtil.java @@ -0,0 +1,58 @@ +package com.microservices.dms.utils; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; +import com.microservices.common.core.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.io.StringWriter; + +@Slf4j +public class YamlUtil { + /** + * 将yaml字符串转成类对象 + * + * @param yamlStr 字符串 + * @param clazz 目标类 + * @param 泛型 + * @return 目标类 + */ + public static T toObject(String yamlStr, Class clazz) { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + try { + return mapper.readValue(yamlStr, clazz); + } catch (JsonProcessingException e) { + log.error("yaml文本解析成java对象错误:", e); + throw new ServiceException("yaml文本解析成java对象错误!"); + } + } + + /** + * 将类对象转yaml字符串 + * + * @param object 对象 + * @return yaml字符串 + */ + public static String toYaml(Object object) { + ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + mapper.findAndRegisterModules(); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper = new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)); + StringWriter stringWriter = new StringWriter(); + try { + mapper.writeValue(stringWriter, object); + return stringWriter.toString(); + } catch (IOException e) { + log.error("Java对象解析成Yaml文本错误", e); + } + return null; + } +} + + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/banner.txt b/microservices-modules/microservices-modules-dms/src/main/resources/banner.txt new file mode 100644 index 000000000..59ae9965a --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/banner.txt @@ -0,0 +1,10 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + _ + (_) + _ __ _ _ ___ _ _ _ ______ _ __ _ __ ___ ___ +| '__|| | | | / _ \ | | | || ||______|| '_ \ | '_ ` _ \ / __| +| | | |_| || (_) || |_| || | | |_) || | | | | |\__ \ +|_| \__,_| \___/ \__, ||_| | .__/ |_| |_| |_||___/ + __/ | | | + |___/ |_| \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap-prod.yml b/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap-prod.yml new file mode 100644 index 000000000..b222e5964 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap-prod.yml @@ -0,0 +1,34 @@ +# Tomcat +server: + port: 9118 + +# Spring +spring: + application: + # 应用名称 + name: microservices-dms + config: + activate: + # 环境配置 + on-profile: + prod + cloud: + sentinel: + # 取消控制台懒加载 + eager: true + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos_ip}:${nacos_port} + username: ${nacos_username} + password: ${nacos_password} + config: + # 配置中心地址 + server-addr: ${nacos_ip}:${nacos_port} + username: ${nacos_username} + password: ${nacos_password} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - { dataId: "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}",refresh: true } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap.yml b/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap.yml new file mode 100644 index 000000000..ac90e2bb5 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/bootstrap.yml @@ -0,0 +1,32 @@ +# Tomcat +server: + port: 9118 + +# Spring +spring: + application: + # 应用名称 + name: microservices-dms + profiles: + # 环境配置 + active: dev + cloud: + sentinel: + # 取消控制台懒加载 + eager: true + nacos: + discovery: + # 服务注册地址 + server-addr: 127.0.0.1:8848 + username: nacos + password: nacos + config: + # 配置中心地址 + server-addr: 127.0.0.1:8848 + username: nacos + password: nacos + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - { dataId: "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}",refresh: true } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml b/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml new file mode 100644 index 000000000..8d66f2a37 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + { + "level": "%level", + "tid": "%tid", + "skyWalkingContext": "%sw_ctx", + "thread": "%thread", + "class": "%logger{1.}:%L", + "message": "%message", + "stackTrace": "%exception{10}" + } + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml new file mode 100644 index 000000000..89af203c8 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -0,0 +1,267 @@ + + + + + + INSERT INTO clickers + + + click_type, + + + click_id, + + + user_id, + + + created_at, + + + ext_info + + + + + #{clickType}, + + + #{clickId}, + + + #{userId}, + + + #{createdAt}, + + + #{extInfo} + + + + + + INSERT INTO searchers + + + search_type, + + + search_id, + + + user_id, + + + created_at, + + + ext_info + + + + + #{searchType}, + + + #{searchId}, + + + #{userId}, + + + #{createdAt}, + + + #{extInfo} + + + + + + INSERT INTO downloaders + + + download_type, + + + download_id, + + + user_id, + + + created_at, + + + ext_info + + + + + #{downloadType}, + + + #{downloadId}, + + + #{userId}, + + + #{createdAt}, + + + #{extInfo} + + + + + + + + + + + + + + + + + + + + + + diff --git a/microservices-modules/microservices-modules-dms/src/main/test/com/microservices/pms/test/PmsProjectTestSheetTest.java b/microservices-modules/microservices-modules-dms/src/main/test/com/microservices/pms/test/PmsProjectTestSheetTest.java new file mode 100644 index 000000000..8a38b37c2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/test/com/microservices/pms/test/PmsProjectTestSheetTest.java @@ -0,0 +1,63 @@ +package com.microservices.pms.test; + +import com.alibaba.fastjson2.JSON; +import com.microservices.pms.enums.TestCaseStatus; +import com.microservices.pms.project.domain.PmsProjectTestsheetCases; +import com.microservices.pms.project.domain.vo.PmsProjectTestcaseStepDataVo; +import com.microservices.pms.project.domain.vo.PmsProjectTestsheetCaseStepVo; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +public class PmsProjectTestSheetTest { + + public static void main(String[] args) { + List testsheetCasesList= new ArrayList(); + PmsProjectTestsheetCases a = new PmsProjectTestsheetCases(); + a.setTestStatus(1l); + PmsProjectTestsheetCases b = new PmsProjectTestsheetCases(); + b.setTestStatus(1l); + PmsProjectTestsheetCases c = new PmsProjectTestsheetCases(); + c.setTestStatus(3l); + PmsProjectTestsheetCases d = new PmsProjectTestsheetCases(); + d.setTestStatus(3l); + + testsheetCasesList.add(a); + testsheetCasesList.add(b); + testsheetCasesList.add(c); + testsheetCasesList.add(d); + Map listMap = Optional.ofNullable(testsheetCasesList).orElse(Collections.emptyList()).stream() + .collect(Collectors.groupingBy(PmsProjectTestsheetCases::getTestStatus, Collectors.summingInt(value -> 1))); + listMap.forEach((key, value) -> System.out.println("" + key + ":" + value)); + + Long passCount = Optional.ofNullable(testsheetCasesList).orElse(Collections.emptyList()).stream() + .filter(testCase -> testCase.getTestStatus().intValue() == 1).count(); + // 总 = 失败+通过+阻塞+未执行(或者排除跳过的) + Long execTotalCount = Optional.ofNullable(testsheetCasesList).orElse(Collections.emptyList()).stream() + .filter(testCase -> testCase.getTestStatus().intValue() != 2).count(); + //Long execTotalCount = testsheetCasesList.stream().filter(testCase -> new HashSet<>(Arrays.asList(0L, 1L, 2L, 3L)).contains(testCase.getTestStatus())).count(); + // 通过率s + System.out.println(passCount); + System.out.println(execTotalCount); + System.out.println(BigDecimal.valueOf(passCount / execTotalCount.doubleValue()).setScale(2, BigDecimal.ROUND_HALF_UP)); +// System.out.println(BigDecimal.valueOf(0 / 0d).setScale(2, BigDecimal.ROUND_HALF_UP)); + System.out.println(BigDecimal.valueOf(new Double("0.1114"))); + + List testcaseStepList = new ArrayList<>(); + PmsProjectTestsheetCaseStepVo aaa = new PmsProjectTestsheetCaseStepVo(); + aaa.setStepId(1l); + aaa.setStepStatus(1); + PmsProjectTestsheetCaseStepVo bbb = new PmsProjectTestsheetCaseStepVo(); + bbb.setStepId(2l); + bbb.setStepStatus(1); + testcaseStepList.add(aaa); + testcaseStepList.add(bbb); + + System.out.println(JSON.toJSONString(Optional.ofNullable(testcaseStepList).orElse(Collections.emptyList()))); + System.out.println(JSON.parseArray("[{\"stepId\":1,\"stepStatus\":1},{\"stepId\":2,\"stepStatus\":1}]", PmsProjectTestcaseStepDataVo.class)); + System.out.println(JSON.parseArray("[{\"stepId\":1,\"stepStatus\":1},{\"stepId\":2,\"stepStatus\":1}]", HashMap.class)); + + Long[] testsheetCasesIds = testsheetCasesList.stream().map(PmsProjectTestsheetCases::getTestStatus).toArray(Long[]::new); + } +} diff --git a/microservices-modules/pom.xml b/microservices-modules/pom.xml index 70605677d..8d77d8614 100644 --- a/microservices-modules/pom.xml +++ b/microservices-modules/pom.xml @@ -18,6 +18,7 @@ microservices-modules-pms microservices-modules-wiki microservices-modules-dss + microservices-modules-dms microservices-modules From 7b8c8694ff70d73627f5d6a430fc68d531358f27 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 21 Mar 2025 10:55:07 +0800 Subject: [PATCH 202/270] =?UTF-8?q?feat(=E7=AB=9E=E8=B5=9B=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=BA=93):=20=E7=AB=9E=E8=B5=9B=E4=B8=8E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A1=8C=E4=B8=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/constant/TaskConstant.java | 9 ++- .../CollectUserActDataController.java | 10 +-- .../CompetitionResourceLibraryController.java | 51 ++++++++++++++ .../TaskResourceLibraryController.java | 8 +-- .../domain/Clicker.java | 2 +- .../domain/Downloader.java | 2 +- .../domain/Searcher.java | 2 +- .../domain/vo/CompetitionListVo.java | 21 ++++++ .../domain/vo/TaskListVo.java | 2 +- .../domain/vo/UserActionDataVo.java | 7 +- .../CompetitionResourceLibraryMapper.java | 22 ++++++ .../mapper/TaskResourceLibraryMapper.java | 12 ++-- .../CompetitionResourceLibraryService.java | 45 +++++++++++++ .../service/TaskResourceLibraryService.java | 16 ++--- .../dms/CompetitionResourceLibraryMapper.xml | 67 +++++++++++++++++++ .../mapper/dms/TaskResourceLibraryMapper.xml | 37 +++++----- 16 files changed, 265 insertions(+), 48 deletions(-) rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/controller/CollectUserActDataController.java (80%) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/controller/TaskResourceLibraryController.java (93%) rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/domain/Clicker.java (86%) rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/domain/Downloader.java (86%) rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/domain/Searcher.java (86%) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/CompetitionListVo.java rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/domain/vo/TaskListVo.java (89%) rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/domain/vo/UserActionDataVo.java (71%) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/mapper/TaskResourceLibraryMapper.java (75%) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java rename microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/{task => resourceLibrary}/service/TaskResourceLibraryService.java (86%) create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java index e8b545c47..a41875939 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java @@ -2,10 +2,15 @@ package com.microservices.dms.constant; public class TaskConstant { + private TaskConstant() {} + public static final String TASK_TYPE_WATCHERS = "MakerTask"; public static final String TASK_TYPE_JOURNALS = "makerSpaceTask"; public static final String TASK_TYPE_PAPERS = ""; public static final String TASK_TYPE_OTHER = "makerSpaceTask"; - private TaskConstant() { - } + + public static final String COMPETITION_TYPE_WATCHERS = "CompetitionInfo"; + public static final String COMPETITION_TYPE_CLICK = "CompetitionInfo"; + public static final String COMPETITION_TYPE_DOWNLOAD = "CompetitionOpusDownload"; + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java similarity index 80% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index 54f9470f9..dde64fe70 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -1,11 +1,11 @@ -package com.microservices.dms.task.controller; +package com.microservices.dms.resourceLibrary.controller; import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.dms.task.domain.Clicker; -import com.microservices.dms.task.domain.Downloader; -import com.microservices.dms.task.domain.Searcher; -import com.microservices.dms.task.service.TaskResourceLibraryService; +import com.microservices.dms.resourceLibrary.domain.Clicker; +import com.microservices.dms.resourceLibrary.domain.Downloader; +import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java new file mode 100644 index 000000000..44042cea7 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java @@ -0,0 +1,51 @@ +package com.microservices.dms.resourceLibrary.controller; + +import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.dms.resourceLibrary.domain.vo.CompetitionListVo; +import com.microservices.dms.resourceLibrary.service.CompetitionResourceLibraryService; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +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 java.util.List; + +@Api(tags = "数据管理体系-竞赛资源库接口") +@RestController +@RequestMapping("/competitionResourceLibrary") +@RequiredArgsConstructor +public class CompetitionResourceLibraryController { + + private final TaskResourceLibraryService taskResourceLibraryService; + private final CompetitionResourceLibraryService competitionResourceLibraryService; + + @GetMapping("/selectRegisterCondition") + @ApiOperation(value = "查询用户报名") + public GenericsTableDataInfo selectRegisterCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = competitionResourceLibraryService.selectRegisterCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("/selectOpusCondition") + @ApiOperation(value = "查询用户作品") + public GenericsTableDataInfo selectOpusCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = competitionResourceLibraryService.selectOpusCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("/selectCompetitionListCondition") + @ApiOperation(value = "查询竞赛作品列表") + public GenericsTableDataInfo selectCompetitionListCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = competitionResourceLibraryService.selectCompetitionListCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java similarity index 93% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java index 19b9da742..0a9d88892 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/controller/TaskResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java @@ -1,11 +1,11 @@ -package com.microservices.dms.task.controller; +package com.microservices.dms.resourceLibrary.controller; import com.microservices.common.core.utils.PageUtils; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.page.GenericsTableDataInfo; -import com.microservices.dms.task.domain.vo.TaskListVo; -import com.microservices.dms.task.domain.vo.UserActionDataVo; -import com.microservices.dms.task.service.TaskResourceLibraryService; +import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Clicker.java similarity index 86% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Clicker.java index 68f652193..1140ecfa4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Clicker.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Clicker.java @@ -1,4 +1,4 @@ -package com.microservices.dms.task.domain; +package com.microservices.dms.resourceLibrary.domain; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Downloader.java similarity index 86% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Downloader.java index 5c83f04f0..96209fa7a 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Downloader.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Downloader.java @@ -1,4 +1,4 @@ -package com.microservices.dms.task.domain; +package com.microservices.dms.resourceLibrary.domain; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java similarity index 86% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java index aa0de994a..288adc626 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/Searcher.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java @@ -1,4 +1,4 @@ -package com.microservices.dms.task.domain; +package com.microservices.dms.resourceLibrary.domain; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/CompetitionListVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/CompetitionListVo.java new file mode 100644 index 000000000..9b99feda2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/CompetitionListVo.java @@ -0,0 +1,21 @@ +package com.microservices.dms.resourceLibrary.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class CompetitionListVo { + + private Long id; + private String name; + private String categoryName; + private Long status; + private Long totalTaskDays; + + private Long visits; + private Long watchersCount; + private Long registrationsCount; + private Long opusCount; + private Long opusDownloadCount; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/TaskListVo.java similarity index 89% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/TaskListVo.java index cebb53e33..879921443 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/TaskListVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/TaskListVo.java @@ -1,4 +1,4 @@ -package com.microservices.dms.task.domain.vo; +package com.microservices.dms.resourceLibrary.domain.vo; import lombok.Data; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/UserActionDataVo.java similarity index 71% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/UserActionDataVo.java index a33ded0ea..9b2491b2c 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/domain/vo/UserActionDataVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/UserActionDataVo.java @@ -1,4 +1,4 @@ -package com.microservices.dms.task.domain.vo; +package com.microservices.dms.resourceLibrary.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; @@ -9,10 +9,11 @@ import java.util.Date; public class UserActionDataVo { private Long id; private String itemType; - private Integer itemId; + private Long itemId; private String itemName; - private Integer userId; + private Long userId; private String userName; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") private Date createdAt; + private Integer status; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java new file mode 100644 index 000000000..e3f311fdc --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java @@ -0,0 +1,22 @@ +package com.microservices.dms.resourceLibrary.mapper; + +import com.microservices.dms.resourceLibrary.domain.vo.CompetitionListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CompetitionResourceLibraryMapper { + + List selectRegisterCondition(UserActionDataVo clicker); + + List selectOpusCondition(UserActionDataVo searcher); + + Long countRegisterCondition(UserActionDataVo clicker); + + Long countOpusCondition(UserActionDataVo searcher); + + List selectCompetitionListCondition(UserActionDataVo downloader); + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java similarity index 75% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 7c40bb3c1..415a4d4d2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -1,10 +1,10 @@ -package com.microservices.dms.task.mapper; +package com.microservices.dms.resourceLibrary.mapper; -import com.microservices.dms.task.domain.Clicker; -import com.microservices.dms.task.domain.Downloader; -import com.microservices.dms.task.domain.Searcher; -import com.microservices.dms.task.domain.vo.TaskListVo; -import com.microservices.dms.task.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.domain.Clicker; +import com.microservices.dms.resourceLibrary.domain.Downloader; +import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java new file mode 100644 index 000000000..de8b9e632 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java @@ -0,0 +1,45 @@ +package com.microservices.dms.resourceLibrary.service; + +import com.microservices.dms.resourceLibrary.domain.vo.CompetitionListVo; +import com.microservices.dms.resourceLibrary.mapper.CompetitionResourceLibraryMapper; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.microservices.dms.constant.TaskConstant.COMPETITION_TYPE_DOWNLOAD; + +@Service +@RequiredArgsConstructor +public class CompetitionResourceLibraryService { + private final CompetitionResourceLibraryMapper competitionResourceLibraryMapper; + private final TaskResourceLibraryMapper taskResourceLibraryMapper; + + public List selectRegisterCondition(UserActionDataVo vo) { + return competitionResourceLibraryMapper.selectRegisterCondition(vo); + } + + public List selectOpusCondition(UserActionDataVo vo) { + return competitionResourceLibraryMapper.selectOpusCondition(vo); + } + + public List selectCompetitionListCondition(UserActionDataVo dataVo) { + List competitionListVos = competitionResourceLibraryMapper.selectCompetitionListCondition(dataVo); + for (CompetitionListVo vo : competitionListVos) { + UserActionDataVo c = new UserActionDataVo(); + c.setItemId(vo.getId()); + c.setItemType(COMPETITION_TYPE_DOWNLOAD); + long opusDownload = taskResourceLibraryMapper.countDownloaderCondition(c); + vo.setOpusDownloadCount(opusDownload); + Long register = competitionResourceLibraryMapper.countRegisterCondition(c); + vo.setRegistrationsCount(register); + c.setStatus(3); + Long opus = competitionResourceLibraryMapper.countOpusCondition(c); + vo.setOpusCount(opus); + } + + return competitionListVos; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java similarity index 86% rename from microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java rename to microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 9bc9e4bc1..3769420b8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/task/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -1,13 +1,13 @@ -package com.microservices.dms.task.service; +package com.microservices.dms.resourceLibrary.service; import com.microservices.common.core.utils.DateUtils; import com.microservices.dms.constant.TaskConstant; -import com.microservices.dms.task.domain.Clicker; -import com.microservices.dms.task.domain.Downloader; -import com.microservices.dms.task.domain.Searcher; -import com.microservices.dms.task.domain.vo.TaskListVo; -import com.microservices.dms.task.domain.vo.UserActionDataVo; -import com.microservices.dms.task.mapper.TaskResourceLibraryMapper; +import com.microservices.dms.resourceLibrary.domain.Clicker; +import com.microservices.dms.resourceLibrary.domain.Downloader; +import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -61,7 +61,7 @@ public class TaskResourceLibraryService { List taskListVos = taskResourceLibraryMapper.selectTaskListCondition(taskListVo); for (TaskListVo vo : taskListVos) { UserActionDataVo c = new UserActionDataVo(); - c.setId(vo.getId()); + c.setItemId(vo.getId()); c.setItemType(TaskConstant.TASK_TYPE_PAPERS); long papers = taskResourceLibraryMapper.countPapersCondition(c); c.setItemType(TaskConstant.TASK_TYPE_WATCHERS); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml new file mode 100644 index 000000000..a837ce0b7 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 89af203c8..ee23b9c1b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -1,10 +1,10 @@ - + + parameterType="com.microservices.dms.resourceLibrary.domain.Clicker"> INSERT INTO clickers @@ -43,7 +43,7 @@ + parameterType="com.microservices.dms.resourceLibrary.domain.Searcher"> INSERT INTO searchers @@ -82,7 +82,7 @@ + parameterType="com.microservices.dms.resourceLibrary.domain.Downloader"> INSERT INTO downloaders @@ -120,7 +120,7 @@ - select click_type as itemType, click_id as itemId, user_id as userId, created_at as createAt, (select login from users where id = user_id) as userName from clickers @@ -132,8 +132,9 @@ - + select search_type as itemType, search_id as itemId, user_id as userId, created_at as createAt, + (select login from users where id = user_id) as userName from searchers AND search_type = #{itemType} @@ -143,8 +144,9 @@ - + select download_type as itemType, download_id as itemId, user_id as userId, created_at as createAt, + (select login from users where id = user_id) as userName from downloaders AND download_type = #{itemType} @@ -154,8 +156,9 @@ - + select watchable_type as itemType, watchable_id as itemId, user_id as userId, created_at as createAt, + (select login from users where id = user_id) as userName from downloaders AND download_type = #{itemType} @@ -165,8 +168,9 @@ - + select journalized_type as itemType, journalized_id as itemId, user_id as userId, created_at as createAt, + (select login from users where id = user_id) as userName from task_journals AND journalized_type = #{itemType} @@ -176,8 +180,9 @@ - + select task_id as itemId, user_id as userId, created_at as createAt, + (select login from users where id = user_id) as userName from papers AND task_id = #{itemId} @@ -185,7 +190,7 @@ - select name,id,bounty,category_id,DATEDIFF(expired_at, published_at) as totalTaskDays, (select c.name from categories c where id = category_id) as categoryName from tasks From 40b62562049e1de71fd691af664aca3240bb778c Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 21 Mar 2025 11:20:09 +0800 Subject: [PATCH 203/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=80=BB=E8=A7=88=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= =?UTF-8?q?):=20=E5=AE=8C=E6=88=90=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=80=BB=E8=A7=88=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/common/controller/OpenController.java | 17 +++ .../pms/specialArea/constant/Constant.java | 25 ++++ .../pms/specialArea/domain/ForgeProject.java | 25 ++++ .../specialArea/domain/ZonePmsProject.java | 58 ++++++++ .../pms/specialArea/domain/vo/KeyValVO.java | 9 ++ .../domain/vo/ProductPlanSituationVO.java | 19 +++ .../domain/vo/ProjectSituationVO.java | 16 +++ .../mapper/SoftwareFactStatisForgeMapper.java | 22 +++ .../mapper/SoftwareFactStatisPmsMapper.java | 36 +++++ .../SoftwareFactStatisticsServiceImpl.java | 134 ++++++++++++++++++ .../pms/SoftwareFactStatisForgeMapper.xml | 84 +++++++++++ .../pms/SoftwareFactStatisPmsMapper.xml | 112 +++++++++++++++ 12 files changed, 557 insertions(+) create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProductPlanSituationVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml create mode 100644 microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java index 6b14dde11..9acf9460c 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/common/controller/OpenController.java @@ -3,11 +3,14 @@ package com.microservices.pms.common.controller; import com.microservices.common.core.utils.html.EscapeUtil; import com.microservices.common.core.web.controller.BaseController; import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.pms.specialArea.service.SoftwareFactStatisticsServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -23,6 +26,8 @@ public class OpenController extends BaseController { @Value("${http.gitLinkUrl}") public String gitLinkUrl; + @Autowired + private SoftwareFactStatisticsServiceImpl softwareFactStatisticsService; /** * 查询项目管理企业列表 */ @@ -33,4 +38,16 @@ public class OpenController extends BaseController { (Object) EscapeUtil.removeExtraSlashOfUrl(gitLinkUrl + "/login") ); } + + @ApiOperation(value = "获取指定组织的项目研发状态") + @GetMapping("/{enterpriseIdentifier}/specialArea/softwareFact/statis/projectSituation") + public AjaxResult theEnterpriseProjectSituation(@PathVariable String enterpriseIdentifier) { + return AjaxResult.success(softwareFactStatisticsService.projectSituation(enterpriseIdentifier)); + } + + @ApiOperation(value = "获取指定组织的产品里程碑状态") + @GetMapping("/{enterpriseIdentifier}/specialArea/softwareFact/statis/productPlanSituation") + public AjaxResult theEnterpriseProductPlanSituation(@PathVariable String enterpriseIdentifier) { + return AjaxResult.success(softwareFactStatisticsService.productPlanSituation(enterpriseIdentifier)); + } } diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java new file mode 100644 index 000000000..e59327c8d --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/constant/Constant.java @@ -0,0 +1,25 @@ +package com.microservices.pms.specialArea.constant; + +import java.util.Arrays; +import java.util.List; + +public class Constant { + + public static final List ISSUE_NOT_FINISHED = Arrays.asList(1, 2); + public static final List ISSUE_FINISHED = Arrays.asList(3, 5, 6); + public static final Integer NEED = 1; + public static final Integer TASK = 2; + public static final Integer BUG = 3; + public static final Integer TASK_CASE_STATUS_NOT_EXEC = 0; + public static final Integer TASK_CASE_STATUS_PASS = 1; + public static final Integer TASK_CASE_STATUS_FAIL = 2; + public static final Integer TASK_CASE_STATUS_BLOCK = 3; + public static final Integer TASK_CASE_STATUS_SKIP = 4; + public static final Integer SPRINT_STATUS_CLOSED = 2; + public static final Integer SPRINT_STATUS_PROCESSING = 1; + public static final Integer SPRINT_STATUS_NOT_START = 0; + private Constant() { + } + + +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java new file mode 100644 index 000000000..e111a1ef3 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ForgeProject.java @@ -0,0 +1,25 @@ +package com.microservices.pms.specialArea.domain; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class ForgeProject { + + //项目ID + private Long pmProjectId; + // 需求1 任务2 缺陷3,默认为 1 + private Integer pmIssueType; + + //状态ID + private List statusIds; + //创建时间开始 + private Date createTimeS; + //创建时间结束 + private Date createTimeE; + //更新时间开始 + private Date updateTimeS; + private Date updateTimeE; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java new file mode 100644 index 000000000..d758fa3cd --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java @@ -0,0 +1,58 @@ +package com.microservices.pms.specialArea.domain; + +import com.microservices.common.core.annotation.Excel; +import lombok.Data; + +@Data +public class ZonePmsProject { + + /** + * 项目ID + */ + private Long id; + + /** + * 组织Id + */ + private Long deptId; + + /** + * 项目标识 + */ + @Excel(name = "项目标识") + private String projectIdentifier; + + /** + * 项目名称 + */ + @Excel(name = "项目名称") + private String projectName; + + /** + * 项目负责人 + */ + @Excel(name = "项目负责人") + private Long projectAssigneeId; + + /** + * 项目负责人 + */ + @Excel(name = "项目负责人") + private String projectAssigneeName; + /** + * 所属企业ID + */ + @Excel(name = "所属企业ID") + private Long pmsEnterpriseId; + /** + * 所属企业ID + */ + @Excel(name = "所属企业") + private String pmsEnterpriseName; + + /** + * 状态 0关闭 1开启 2暂停 + */ + @Excel(name = "状态 0关闭 1开启 2暂停") + private String status; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java new file mode 100644 index 000000000..c45ea9b8b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/KeyValVO.java @@ -0,0 +1,9 @@ +package com.microservices.pms.specialArea.domain.vo; + +import lombok.Data; + +@Data +public class KeyValVO { + private Integer key; + private Long val; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProductPlanSituationVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProductPlanSituationVO.java new file mode 100644 index 000000000..baabd0452 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProductPlanSituationVO.java @@ -0,0 +1,19 @@ +package com.microservices.pms.specialArea.domain.vo; + +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ProductPlanSituationVO extends ZonePmsProject { + private String startTime; + private String endTime; + private Long taskCount; + private Long taskFinishedCount; + private Long sprintCount; + private Long sprintFinishedCount; + private Long testCaseCount; + private Long testBugCount; + private Long notExecTestCaseCount; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java new file mode 100644 index 000000000..fee41ae68 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/vo/ProjectSituationVO.java @@ -0,0 +1,16 @@ +package com.microservices.pms.specialArea.domain.vo; + +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class ProjectSituationVO extends ZonePmsProject { + private Long needCount; + private Long needFinishedCount; + private Long taskCount; + private Long taskFinishedCount; + private Long sprintCount; + private Long sprintFinishedCount; +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java new file mode 100644 index 000000000..64032a2a1 --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisForgeMapper.java @@ -0,0 +1,22 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Slave; +import com.microservices.pms.specialArea.domain.ForgeProject; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +@Slave +public interface SoftwareFactStatisForgeMapper { + + List selectForgeProject(ForgeProject forgeProject); + + Long countForgeProject(ForgeProject forgeProject); + + Long countForgeProjectByCUES(ForgeProject forgeProject); + + Long countForgeProjectByProject(ForgeProject forgeProject); + + Long countForgeProjectByAssigner(ForgeProject forgeProject); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java new file mode 100644 index 000000000..38241b8da --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/mapper/SoftwareFactStatisPmsMapper.java @@ -0,0 +1,36 @@ +package com.microservices.pms.specialArea.mapper; + +import com.microservices.common.datasource.annotation.Master; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Master +@Mapper +public interface SoftwareFactStatisPmsMapper { + + List selectPmsProjectList(); + + ZonePmsProject selectPmsProjectById(@Param("id") Long id); + + // 状态 0待开始 1进行中 2已关闭 + List countSprintByStatus(Long projectId); + + Long countSprintByCUES(ForgeProject forgeProject); + + Long countTestCaseBy(Long projectId); + + Long countTestCaseInSheet(ForgeProject forgeProject); + + Long countTestCaseByCUES(ForgeProject forgeProject); + + String selectPmsUserByGitlinkId(@Param("gitlinkId") Long gitlinkId); + + List selectPmsProjectListByDict(); + + List selectPmsProjectListByEnterpriseId(@Param("enterpriseId") Long enterpriseId); +} diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java new file mode 100644 index 000000000..dddfb435d --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java @@ -0,0 +1,134 @@ +package com.microservices.pms.specialArea.service; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.pms.enterprise.domain.PmsEnterprise; +import com.microservices.pms.enterprise.mapper.PmsEnterpriseMapper; +import com.microservices.pms.product.domain.PmsProduct; +import com.microservices.pms.product.domain.PmsProductPlan; +import com.microservices.pms.product.domain.vo.PmsProductPlanDataVo; +import com.microservices.pms.product.domain.vo.PmsProductSearchVo; +import com.microservices.pms.product.mapper.PmsProductMapper; +import com.microservices.pms.product.mapper.PmsProductPlanMapper; +import com.microservices.pms.product.service.IPmsProductPriorityService; +import com.microservices.pms.product.service.IPmsProductStatusService; +import com.microservices.pms.specialArea.domain.ForgeProject; +import com.microservices.pms.specialArea.domain.ZonePmsProject; +import com.microservices.pms.specialArea.domain.vo.KeyValVO; +import com.microservices.pms.specialArea.domain.vo.ProjectSituationVO; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisForgeMapper; +import com.microservices.pms.specialArea.mapper.SoftwareFactStatisPmsMapper; +import com.microservices.pms.utils.PmsUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static com.microservices.pms.specialArea.constant.Constant.*; + +@Service +@RequiredArgsConstructor +public class SoftwareFactStatisticsServiceImpl extends BaseController { + + private final SoftwareFactStatisPmsMapper statisPmsMapper; + private final SoftwareFactStatisForgeMapper statisForgeMapper; + @Autowired + private PmsEnterpriseMapper pmsEnterpriseMapper; + @Autowired + private PmsProductMapper pmsProductMapper; + @Autowired + private PmsProductPlanMapper pmsProductPlanMapper; + @Autowired + private IPmsProductStatusService pmsProductStatusService; + @Autowired + private IPmsProductPriorityService pmsProductPriorityService; + + public List projectSituation(String enterpriseIdentifier) { + PmsEnterprise pmsEnterprise = pmsEnterpriseMapper.selectPmsEnterpriseByIdentifier(enterpriseIdentifier); + List zonePmsProjects = statisPmsMapper.selectPmsProjectListByEnterpriseId(pmsEnterprise.getId()); + + List res = new ArrayList<>(); + zonePmsProjects.forEach(zonePmsProject -> { + + ProjectSituationVO vo = new ProjectSituationVO(); + BeanUtils.copyProperties(zonePmsProject, vo); + + Map sprintCountMap = statisPmsMapper.countSprintByStatus(zonePmsProject.getId()) + .stream() + .collect(Collectors.toMap(KeyValVO::getKey, KeyValVO::getVal, (o, n) -> n)); + + vo.setSprintFinishedCount(sprintCountMap.getOrDefault(SPRINT_STATUS_CLOSED, 0L)); + vo.setSprintCount(sprintCountMap.values().stream().reduce(0L, Long::sum)); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setPmProjectId(zonePmsProject.getId()); + forgeProject.setPmIssueType(NEED); + Long planCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedCount(planCount); + forgeProject.setStatusIds(ISSUE_FINISHED); + Long planFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedFinishedCount(planFinishCount); + forgeProject.setPmIssueType(TASK); + Long taskFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskFinishedCount(taskFinishCount); + forgeProject.setStatusIds(new ArrayList<>()); + Long taskCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskCount(taskCount); + + res.add(vo); + }); + + return res; + } + + public List productPlanSituation(String enterpriseIdentifier) { + HashMap selectCache = new HashMap<>(); + List pmsProductPlanDataList = new ArrayList<>(); + PmsProductSearchVo pmsProductSearchVo = new PmsProductSearchVo(); + pmsProductSearchVo.setPmsEnterpriseIdentifier(enterpriseIdentifier); + List pmsProductList = pmsProductMapper.selectPmsProductList(pmsProductSearchVo); + for (PmsProduct pmsProduct : pmsProductList) { + if (pmsProduct.getIsTop().equals(1)) { + PmsProductPlan pmsProductPlan = new PmsProductPlan(); + pmsProductPlan.setPmsProductIdentifier(pmsProduct.getProductIdentifier()); + List productPlanList = pmsProductPlanMapper.selectPmsProductPlanList(pmsProductPlan); + if (productPlanList != null && !pmsProductList.isEmpty()) { + pmsProductPlanDataList.addAll( + productPlanList.stream().map( + x -> toPmsProductPlanDataVo(x, selectCache) + ).collect(Collectors.toList()) + ); + } + } + } + return pmsProductPlanDataList; + } + + private PmsProductPlanDataVo toPmsProductPlanDataVo(PmsProductPlan pmsProductPlan, HashMap hashMap) { + PmsProductPlanDataVo pmsProductPlanDataVo = pmsProductPlan.toPmsProductPlanDataVo(); + // 设置优先级 + pmsProductPlanDataVo.setPriority( + PmsUtils.getSelectObjectInCache( + hashMap + , pmsProductPriorityService::selectPmsProductPriorityById + , pmsProductPlan.getPriorityId())); + // 设置状态 + pmsProductPlanDataVo.setStatus( + PmsUtils.getSelectObjectInCache( + hashMap + , pmsProductStatusService::selectPmsProductStatusById + , pmsProductPlan.getStatusId())); + // 设置产品 + pmsProductPlanDataVo.setPmsProduct( + PmsUtils.getSelectObjectInCache( + hashMap + , pmsProductMapper::selectPmsProductByIdentifier + , pmsProductPlan.getPmsProductIdentifier())); + return pmsProductPlanDataVo; + } +} diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml new file mode 100644 index 000000000..7738367ea --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisForgeMapper.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml new file mode 100644 index 000000000..2362f782b --- /dev/null +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 8da6005d9f3fc54289d3f16a3d60b885c3dd3083 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Fri, 21 Mar 2025 14:29:54 +0800 Subject: [PATCH 204/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=80=BB=E8=A7=88=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= =?UTF-8?q?):=20=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=88=90=E5=91=98?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=B1=9E=E6=80=A7=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../pms/specialArea/domain/ZonePmsProject.java | 1 + .../mapper/pms/SoftwareFactStatisPmsMapper.xml | 17 ++++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java index d758fa3cd..d9432ead4 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/domain/ZonePmsProject.java @@ -55,4 +55,5 @@ public class ZonePmsProject { */ @Excel(name = "状态 0关闭 1开启 2暂停") private String status; + private Long projectMemberCount; } diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml index 2362f782b..a4bd28794 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/SoftwareFactStatisPmsMapper.xml @@ -20,14 +20,17 @@ From 40a1374c40e70878ad13a406e0ebe450680481e7 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 21 Mar 2025 16:55:04 +0800 Subject: [PATCH 205/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=BA=93):=20=E9=A1=B9=E7=9B=AE=E4=B8=8E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A1=8C=E4=B8=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectResourceLibraryController.java | 84 +++++++++++++++ .../TaskResourceLibraryController.java | 8 ++ .../domain/vo/ProjectListVo.java | 26 +++++ .../mapper/ProjectResourceLibraryMapper.java | 26 +++++ .../mapper/TaskResourceLibraryMapper.java | 5 + .../ProjectResourceLibraryService.java | 45 ++++++++ .../service/TaskResourceLibraryService.java | 4 + .../dms/ProjectResourceLibraryMapper.xml | 102 ++++++++++++++++++ .../mapper/dms/TaskResourceLibraryMapper.xml | 25 ++++- 9 files changed, 324 insertions(+), 1 deletion(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ProjectListVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java new file mode 100644 index 000000000..4c40293c8 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java @@ -0,0 +1,84 @@ +package com.microservices.dms.resourceLibrary.controller; + +import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; +import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.service.ProjectResourceLibraryService; +import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +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 java.util.List; + +@Api(tags = "数据管理体系-项目资源库接口") +@RestController +@RequestMapping("/projectResourceLibrary/") +@RequiredArgsConstructor +public class ProjectResourceLibraryController extends BaseController { + + private final ProjectResourceLibraryService projectResourceLibraryService; + + @GetMapping("selectSearcherCondition") + @ApiOperation(value = "查询用户搜索") + public GenericsTableDataInfo selectSearcherCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectSearchCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectSearcherCondition") + @ApiOperation(value = "查询用户提交") + public GenericsTableDataInfo selectCodeCommitCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectCodeCommitCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectForkCondition") + @ApiOperation(value = "查询用户Fork") + public GenericsTableDataInfo selectForkCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectForkCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectIssueCondition") + @ApiOperation(value = "查询用户Issue") + public GenericsTableDataInfo selectIssueCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectIssueCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectPRCondition") + @ApiOperation(value = "查询用户PR") + public GenericsTableDataInfo selectPRCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectPRCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectPraisesCondition") + @ApiOperation(value = "查询用户点赞") + public GenericsTableDataInfo selectPraisesCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectPraisesCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + + @GetMapping("selectProjectListCondition") + @ApiOperation(value = "查询任务列表") + public GenericsTableDataInfo selectTaskListCondition(@RequestParam ProjectListVo projectListVo) { + PageUtils.startPage(); + List userActionDataVos = projectResourceLibraryService.selectProjectListCondition(projectListVo); + return PageUtils.toPage(userActionDataVos); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java index 0a9d88892..3d9422eee 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java @@ -41,6 +41,14 @@ public class TaskResourceLibraryController extends BaseController { return PageUtils.toPage(userActionDataVos); } + @GetMapping("selectVisitCondition") + @ApiOperation(value = "查询用户点击") + public GenericsTableDataInfo selectVisitCondition(@RequestParam UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectVisitCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + @GetMapping("selectDownloaderCondition") @ApiOperation(value = "查询用户下载") public GenericsTableDataInfo selectDownloaderCondition(@RequestParam UserActionDataVo taskJournals) { diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ProjectListVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ProjectListVo.java new file mode 100644 index 000000000..39924f32a --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ProjectListVo.java @@ -0,0 +1,26 @@ +package com.microservices.dms.resourceLibrary.domain.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class ProjectListVo { + + private Long id; + private String name; + private Date createdOn; + private String versionReleasesCount; + private String projectLanguages; + private String projectCategories; + private Long praisesCount; + private Long watchersCount; + private Long forkedCount; + private Long issuesCount; + private Long pullRequestsCount; + private Long commitsCount; + private Long licenseId; + private Long membersCount; + private Long membersMonthAddCount; + private Long projectSearchCount; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java new file mode 100644 index 000000000..7e1337386 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java @@ -0,0 +1,26 @@ +package com.microservices.dms.resourceLibrary.mapper; + +import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ProjectResourceLibraryMapper { + + List selectProjectListCondition(ProjectListVo projectListVo); + + List selectCodeCommitCondition(UserActionDataVo userActionDataVo); + + List selectForkCondition(UserActionDataVo userActionDataVo); + + List selectIssueCondition(UserActionDataVo userActionDataVo); + + List selectPRCondition(UserActionDataVo userActionDataVo); + + List selectPraisesCondition(UserActionDataVo userActionDataVo); + + List selectSearchCondition(UserActionDataVo userActionDataVo); + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 415a4d4d2..f0fd5b0aa 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -20,6 +20,8 @@ public interface TaskResourceLibraryMapper { List selectClickerCondition(UserActionDataVo clicker); + List selectVisitCondition(UserActionDataVo clicker); + List selectSearcherCondition(UserActionDataVo searcher); List selectDownloaderCondition(UserActionDataVo downloader); @@ -34,6 +36,8 @@ public interface TaskResourceLibraryMapper { long countClickerCondition(UserActionDataVo clicker); + long countVisitCondition(UserActionDataVo clicker); + long countSearcherCondition(UserActionDataVo searcher); long countDownloaderCondition(UserActionDataVo downloader); @@ -41,5 +45,6 @@ public interface TaskResourceLibraryMapper { long countWatcherCondition(UserActionDataVo watcher); long countPapersCondition(UserActionDataVo paper); + long countTaskJournalsCondition(UserActionDataVo taskJournals); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java new file mode 100644 index 000000000..b072c28fd --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -0,0 +1,45 @@ +package com.microservices.dms.resourceLibrary.service; + + +import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; +import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; +import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ProjectResourceLibraryService { + + private final ProjectResourceLibraryMapper projectResourceLibraryMapper; + + public List selectProjectListCondition(ProjectListVo projectListVo) { + return projectResourceLibraryMapper.selectProjectListCondition(projectListVo); + } + + public List selectCodeCommitCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectCodeCommitCondition(userActionDataVo); + } + + public List selectForkCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectForkCondition(userActionDataVo); + } + + public List selectIssueCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectIssueCondition(userActionDataVo); + } + + public List selectPRCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectPRCondition(userActionDataVo); + } + + public List selectPraisesCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectPraisesCondition(userActionDataVo); + } + + public List selectSearchCondition(UserActionDataVo userActionDataVo) { + return projectResourceLibraryMapper.selectSearchCondition(userActionDataVo); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 3769420b8..50658b05d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -37,6 +37,10 @@ public class TaskResourceLibraryService { return taskResourceLibraryMapper.selectClickerCondition(actionDataVo); } + public List selectVisitCondition(UserActionDataVo actionDataVo) { + return taskResourceLibraryMapper.selectVisitCondition(actionDataVo); + } + public List selectSearcherCondition(UserActionDataVo searcher) { return taskResourceLibraryMapper.selectSearcherCondition(searcher); } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml new file mode 100644 index 000000000..9724ce067 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index ee23b9c1b..970bc1a0f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -132,6 +132,18 @@ + select name,id,bounty,category_id,DATEDIFF(expired_at, published_at) as totalTaskDays, - (select c.name from categories c where id = category_id) as categoryName + (select c.name from categories c where id = category_id) as categoryName,visits from tasks @@ -215,6 +227,17 @@ + From 67318f6d0f22f411693b4ec2be4389eab291bc90 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 26 Mar 2025 09:08:03 +0800 Subject: [PATCH 207/270] =?UTF-8?q?fixed=20=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=9F=A5=E8=AF=A2=E6=97=B6repo=5Fname?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml index 9b287af8e..88dc71a5e 100644 --- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml +++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsCiPipelinesMapper.xml @@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${params.dataScope} - GROUP BY owner,repo_identifier,repo_name + GROUP BY owner,repo_identifier,file_name - select name,id,`status`,visits,watchers_count,DATEDIFF(upload_date, start_at) as totalTaskDays, + select title as name,id,`status`,visits,watchers_count,DATEDIFF(upload_date, start_at) as totalTaskDays from competition_infos AND `status` = #{status} - AND `name` like concat('%', #{name}, '%') + AND `title` like concat('%', #{name}, '%') diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index 9724ce067..637ae76e2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -10,7 +10,7 @@ (select c.name from project_categories c where id = project_category_id) as projectCategories, forked_count,praises_count,watchers_count,issues_count,pull_requests_count,license_id,visits, (select count(*) from user_actions where action_type='project_search' and action_id=projects.id) as - projectSearchCount, + projectSearchCount,created_on, (select count(*) from commit_logs where project_id=projects.id) as commitsCount, (select count(*) from members where project_id=projects.id) as membersCount, (select count(*) from members where (created_on >= NOW() - INTERVAL 1 MONTH ) and project_id=projects.id) as diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml new file mode 100644 index 000000000..7b79cf0e2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 970bc1a0f..fe9315e28 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -170,13 +170,13 @@ @@ -261,13 +261,13 @@ @@ -277,7 +277,7 @@ AND journalized_type = #{itemType} - + AND journalized_id = #{itemId} @@ -285,7 +285,7 @@ + + + \ No newline at end of file From 125c068e6921133b98fd2ba24d9a8495984bd8ea Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Tue, 1 Apr 2025 15:50:13 +0800 Subject: [PATCH 217/270] =?UTF-8?q?feat(PR=E6=8E=A8=E8=8D=90):=20PR?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TalentReferralController.java | 6 + .../referral/mapper/TalentReferralMapper.java | 6 + .../dms/referral/service/IssuesService.java | 53 ----- .../service/TalentReferralService.java | 206 ++++++++++++++++-- .../dms/referral/vo/IssueDto.java | 60 +++++ .../dms/referral/vo/PullRequestVo.java | 18 ++ .../dms/utils/DmsGitLinkRequestUrl.java | 21 ++ .../dms/utils/DmsRequestHelper.java | 99 +++++++++ .../mapper/dms/TalentReferralMapper.xml | 28 ++- 9 files changed, 418 insertions(+), 79 deletions(-) delete mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/IssuesService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/IssueDto.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/PullRequestVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsRequestHelper.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/controller/TalentReferralController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/controller/TalentReferralController.java index 881767f2c..44a961a46 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/controller/TalentReferralController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/controller/TalentReferralController.java @@ -23,4 +23,10 @@ public class TalentReferralController { public AjaxResult issueTalentReferral(@RequestParam("issueId") Long issueId, @RequestParam("projectId") Long projectId) { return AjaxResult.success(talentReferralService.issueTalentReferral(issueId, projectId)); } + + @GetMapping("/pullRequestTalentReferral") + @ApiOperation(value = "PR人才推荐") + public AjaxResult pullRequestTalentReferral(@RequestParam("prId") Long prId, @RequestParam("projectId") Long projectId) { + return AjaxResult.success(talentReferralService.PRTalentReferral(prId, projectId)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java index 1ef05c68a..14445e1b2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java @@ -1,6 +1,7 @@ package com.microservices.dms.referral.mapper; import com.microservices.dms.referral.vo.IssuesVo; +import com.microservices.dms.referral.vo.PullRequestVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -13,10 +14,15 @@ public interface TalentReferralMapper { List countIssuesAssigner(@Param("projectId") Long projectId); + List countPRUser(@Param("projectId") Long projectId); + IssuesVo selectIssuesById(@Param("id") Long id); + PullRequestVo selectPRById(@Param("id") Long id); + List selectIssuesAssigners(@Param("issueId") Long issueId); String selectRepositoriesUrl(@Param("id") Long id); + Long selectIdByLogin(@Param("login") String login); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/IssuesService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/IssuesService.java deleted file mode 100644 index c2796a2fb..000000000 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/IssuesService.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.microservices.dms.referral.service; - -import com.microservices.dms.constant.ReferralConstant; -import com.microservices.dms.referral.mapper.TalentReferralMapper; -import com.microservices.dms.referral.vo.IssuesVo; -import com.microservices.dms.utils.SimilarityService; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; - -@Service -@RequiredArgsConstructor -public class IssuesService { - - @Autowired - private TalentReferralMapper talentReferralMapper; - - public List> talentReferral(Long projectId, Long issueId) { - - IssuesVo curIssue = talentReferralMapper.selectIssuesById(issueId); - IssuesVo vo = new IssuesVo(); - vo.setProjectId(projectId); - vo.setStatusIds(Collections.singletonList(ReferralConstant.ISSUE_CLOSED)); - List issuesVos = talentReferralMapper.selectIssuesCondition(vo); - Map userFractionMap = new HashMap<>(); - // 计算与解决issue的相似度, 标题+描述 - for (IssuesVo v : issuesVos) { - String subject = v.getSubject(); - String description = v.getDescription(); - double subjectFraction = SimilarityService.sentence(subject, curIssue.getSubject()); - double descFraction = SimilarityService.text(description, curIssue.getDescription()); - //这个数据可以缓存下来 - List assigners = talentReferralMapper.selectIssuesAssigners(v.getId()); - for (Long assigner : assigners) { - userFractionMap.merge(assigner, (subjectFraction + descFraction) * 60D, Double::sum); - } - } - - // 计算每个负责人关闭的issues数量 - List assIs = talentReferralMapper.countIssuesAssigner(projectId); - for (IssuesVo a : assIs) { - userFractionMap.merge(a.getId(), a.getNum() * 40D, Double::sum); - } - - List> entryList = new ArrayList<>(userFractionMap.entrySet()); - entryList.sort((entry1, entry2) -> Double.compare(entry2.getValue(), entry1.getValue())); - return entryList; - } - - -} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java index cbd966dd2..d547590af 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java @@ -5,19 +5,20 @@ import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.httpClient.util.GitLinkRequestHelper; +import com.microservices.dms.constant.ReferralConstant; import com.microservices.dms.referral.mapper.TalentReferralMapper; +import com.microservices.dms.referral.vo.IssueDto; +import com.microservices.dms.referral.vo.IssuesVo; +import com.microservices.dms.referral.vo.PullRequestVo; import com.microservices.dms.utils.DmsGitLinkRequestUrl; +import com.microservices.dms.utils.DmsRequestHelper; +import com.microservices.dms.utils.SimilarityService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.*; import java.util.stream.Collectors; /** @@ -26,7 +27,6 @@ import java.util.stream.Collectors; @Service public class TalentReferralService { - public static final String P_D_GIT = "/p\\d+/[^/]+(?=\\.git)"; @Autowired private GitLinkRequestHelper gitLinkRequestHelper; @@ -34,7 +34,7 @@ public class TalentReferralService { private TalentReferralMapper talentReferralMapper; @Autowired - private IssuesService issuesService; + private DmsRequestHelper dmsRequestHelper; private static final Logger logger = LoggerFactory.getLogger(TalentReferralService.class); @@ -43,7 +43,8 @@ public class TalentReferralService { // 获取项目贡献者数量 JSONArray contributorsArray = gitLinkRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.CONTRIBUTORS(projectFullName), "list"); - return contributorsArray.stream().map(o -> (JSONObject) o).map(s -> s.getString("contributions")).filter(StringUtils::isNotBlank).mapToLong(Long::parseLong).boxed().collect(Collectors.toSet()); + return contributorsArray.stream().map(o -> (JSONObject) o).map(s -> s.getString("contributions")).filter(StringUtils::isNotBlank) + .mapToLong(Long::parseLong).boxed().collect(Collectors.toSet()); } catch (ServiceException e) { logger.error("【{}】获取项目贡献者数量失败:{}", projectFullName, e.getMessage()); @@ -51,16 +52,24 @@ public class TalentReferralService { return new HashSet<>(); } + public Set getCollaborators(String projectFullName) { + try { + // 获取项目成员者数量 + JSONArray contributorsArray = gitLinkRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.QUERY_USER_FROM_PROJECT(projectFullName), "members"); + + return contributorsArray.stream().map(o -> (JSONObject) o).map(s -> s.getString("id")) + .filter(StringUtils::isNotBlank).mapToLong(Long::parseLong).boxed().collect(Collectors.toSet()); + + } catch (ServiceException e) { + logger.error("【{}】获取项目成员者数量失败:{}", projectFullName, e.getMessage()); + } + return new HashSet<>(); + } + public String getRepoName(Long projectId) { // 获取仓库的fullName,用来查询贡献者 String s = talentReferralMapper.selectRepositoriesUrl(projectId); - if (StringUtils.isNotBlank(s)) { - Pattern pattern = Pattern.compile(P_D_GIT); - Matcher matcher = pattern.matcher(s); - - return matcher.find() ? matcher.group() : ""; - } - return ""; + return StringUtils.isNotEmpty(s) ? s : ""; } public Set getContributorsByProjectId(Long projectId) { @@ -72,13 +81,164 @@ public class TalentReferralService { return contributors; } - - public List> issueTalentReferral(Long issueId, Long projectId) { - Set contributors = getContributorsByProjectId(projectId); - List> entries = issuesService.talentReferral(projectId,issueId); - if (!contributors.isEmpty() && !entries.isEmpty()) { - entries.removeIf(s -> contributors.contains(s.getKey())); + public Set getCollaboratorsByProjectId(Long projectId) { + Set collaborators = new HashSet<>(); + String repoName = getRepoName(projectId); + if (StringUtils.isNotBlank(repoName)) { + collaborators.addAll(getCollaborators(repoName)); } - return entries; + return collaborators; } + + public List> issueTalentReferral(Long projectId, Long issueId) { + + IssuesVo curIssue = talentReferralMapper.selectIssuesById(issueId); + if (curIssue == null) { + return new ArrayList<>(); + } + + List curIssueAssigners = talentReferralMapper.selectIssuesAssigners(curIssue.getId()); + if (!curIssueAssigners.isEmpty()) { + return new ArrayList<>(); + } + + IssuesVo vo = new IssuesVo(); + vo.setProjectId(projectId); + vo.setStatusIds(Collections.singletonList(ReferralConstant.ISSUE_CLOSED)); + List issuesVos = talentReferralMapper.selectIssuesCondition(vo); + Map userFractionMap = new HashMap<>(); + // 计算与解决issue的相似度, 标题+描述 + for (IssuesVo v : issuesVos) { + String subject = v.getSubject(); + String description = v.getDescription(); + double subjectFraction = SimilarityService.sentence(subject, curIssue.getSubject()); + double descFraction = SimilarityService.text(description, curIssue.getDescription()); + //这个数据可以缓存下来 + List assigners = talentReferralMapper.selectIssuesAssigners(v.getId()); + for (Long assigner : assigners) { + userFractionMap.merge(assigner, (subjectFraction + descFraction) * 60.0D, Double::sum); + } + } + + // 计算每个负责人关闭的issues数量 + List assIs = talentReferralMapper.countIssuesAssigner(projectId); + for (IssuesVo a : assIs) { + userFractionMap.merge(a.getId(), a.getNum() * 40.0D, Double::sum); + } + + List> entryList = new ArrayList<>(userFractionMap.entrySet()); + entryList.sort((entry1, entry2) -> Double.compare(entry2.getValue(), entry1.getValue())); + + Set contributors = getContributorsByProjectId(projectId); + if (!contributors.isEmpty() && !entryList.isEmpty()) { + entryList.removeIf(s -> !contributors.contains(s.getKey())); + } + return entryList; + } + + public List> PRTalentReferral(Long projectId, Long prId, List prs) { + + Map userFractionMap = new HashMap<>(); + Map userNameFractionMap = new HashMap<>(); + Map> PRFilesMap = new HashMap<>(); + List closedPullRequests = getPullRequests(projectId, "11"); + + for (IssueDto pr : prs) { + //关闭PR的对比 + for (IssueDto dto : closedPullRequests) { + List reviewers = dto.getReviewers(); + for (String reviewer : reviewers) { + Set prFiles = getPRFiles(projectId, dto.getPullRequestNumber()); + PRFilesMap.merge(reviewer, prFiles, (a, b) -> { + HashSet set = new HashSet<>(); + set.addAll(a); + set.addAll(b); + return set; + }); + } + } + + Set curPrFiles = getPRFiles(projectId, pr.getPullRequestNumber()); + for (String curPrFile : curPrFiles) { + PRFilesMap.forEach((k, v) -> { + if (v.contains(curPrFile)) { + userNameFractionMap.merge(k, 60.0D, Double::sum); + } + }); + } + + // 计算每个负责人关闭的 PR数量 + closedPullRequests.stream().map(IssueDto::getReviewers).flatMap(List::stream) + .forEach(s -> userNameFractionMap.merge(s, 40.0D, Double::sum)); + + + } + + userNameFractionMap.forEach((k, v) -> { + Long id = talentReferralMapper.selectIdByLogin(k); + userFractionMap.put(id, v); + }); + + List> entryList = new ArrayList<>(userFractionMap.entrySet()); + entryList.sort((entry1, entry2) -> Double.compare(entry2.getValue(), entry1.getValue())); + + //必须是项目成员 + Set collaborators = getCollaboratorsByProjectId(projectId); + if (!collaborators.isEmpty() && !entryList.isEmpty()) { + entryList.removeIf(s -> !collaborators.contains(s.getKey())); + } + + return entryList; + } + + public List getPullRequests(Long projectId, String statusType) { + + String projectFullName = getRepoName(projectId); + if (StringUtils.isEmpty(projectFullName)) { + return new ArrayList<>(); + } + + try { + return dmsRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.GET_PULL_REQUEST(projectFullName, statusType), "issues", IssueDto.class); + } catch (ServiceException e) { + logger.error("【{}】获取PR失败:{}", projectFullName, e.getMessage()); + } + return new ArrayList<>(); + } + + public Set getPRFiles(Long projectId, int PRNum) { + String projectFullName = getRepoName(projectId); + if (StringUtils.isEmpty(projectFullName)) { + return new HashSet<>(); + } + + try { + JSONArray allDataByPage = dmsRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.GET_PR_FILES(projectFullName, PRNum), "issues", "files"); + return allDataByPage.stream().map(o -> (JSONObject) o).map(o -> (String) o.get("filename")).collect(Collectors.toSet()); + } catch (ServiceException e) { + logger.error("【{}】获取PR文件失败:{}", projectFullName, e.getMessage()); + } + return new HashSet<>(); + } + + + public List> PRTalentReferral(Long projectId, Long prId) { + List openPullRequests = getPullRequests(projectId, "1"); + openPullRequests = openPullRequests.stream().filter(e -> e.getReviewers().isEmpty()) + .collect(Collectors.toList()); + + if (prId != null) { + openPullRequests = openPullRequests.stream().filter(e -> Objects.equals((long) (e.getId()), prId)) + .filter(e -> e.getReviewers().isEmpty()) + .collect(Collectors.toList()); + return PRTalentReferral(projectId, prId, openPullRequests); + } + + return PRTalentReferral(projectId, prId, openPullRequests); + } + + public void projectsStatistic(){ + + } + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/IssueDto.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/IssueDto.java new file mode 100644 index 000000000..aca2d184d --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/IssueDto.java @@ -0,0 +1,60 @@ +package com.microservices.dms.referral.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author otto + */ +@Data +public class IssueDto { + + @JsonProperty("pull_request_id") + private int pullRequestId; + @JsonProperty("pull_request_number") + private int pullRequestNumber; + @JsonProperty("pull_request_status") + private int pullRequestStatus; + @JsonProperty("pull_request_head") + private String pullRequestHead; + @JsonProperty("pull_request_base") + private String pullRequestBase; + @JsonProperty("pull_request_staus") + private String pullRequestStaus; + @JsonProperty("is_original") + private boolean isOriginal; + @JsonProperty("fork_project_id") + private String forkProjectId; + @JsonProperty("fork_project_identifier") + private String forkProjectIdentifier; + @JsonProperty("fork_project_user") + private String forkProjectUser; + @JsonProperty("fork_project_user_name") + private String forkProjectUserName; + private List reviewers; + private int id; + private String name; + @JsonProperty("pr_time") + private String prTime; + @JsonProperty("assign_user_name") + private String assignUserName; + @JsonProperty("assign_user_login") + private String assignUserLogin; + @JsonProperty("author_name") + private String authorName; + @JsonProperty("author_login") + private String authorLogin; + @JsonProperty("avatar_url") + private String avatarUrl; + private String priority; + private String version; + @JsonProperty("journals_count") + private int journalsCount; + @JsonProperty("issue_tags") + private String issueTags; + @JsonProperty("attached_issues") + private List attachedIssues; + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/PullRequestVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/PullRequestVo.java new file mode 100644 index 000000000..37720de35 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/vo/PullRequestVo.java @@ -0,0 +1,18 @@ +package com.microservices.dms.referral.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class PullRequestVo { + private Long id; + private Long projectId; + private Long userId; + private Long giteaNumber; + private String title; + private String description; + private Long statusId; + private List statusIds; + private Long num; +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsGitLinkRequestUrl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsGitLinkRequestUrl.java index 8877b4806..82f87fe70 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsGitLinkRequestUrl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsGitLinkRequestUrl.java @@ -10,4 +10,25 @@ public class DmsGitLinkRequestUrl extends GitLinkRequestUrl { public static String CONTRIBUTORS(String fullName) { return String.format("/api/%s/contributors.json", fullName); } + + /** + * 获取项目成员// + */ + public static String QUERY_USER_FROM_PROJECT(String fullName) { + return String.format("/api/%s/collaborators.json", fullName); + } + + /** + * 获取所有的PR + */ + public static String GET_PULL_REQUEST(String fullName, String statusType) { + return String.format("/api/%s/pulls.json?status_type=%s", fullName, statusType); + } + + /** + * 获取PR的文件 + */ + public static String GET_PR_FILES(String fullName, int PRNum) { + return String.format("/api/v1/%s/pulls/%s/files.json", fullName, PRNum); + } } \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsRequestHelper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsRequestHelper.java new file mode 100644 index 000000000..d2e7e4ee2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsRequestHelper.java @@ -0,0 +1,99 @@ +package com.microservices.dms.utils; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.microservices.common.httpClient.domain.GitLinkRequestUrl; +import com.microservices.common.httpClient.util.GitLinkRequestHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class DmsRequestHelper extends GitLinkRequestHelper { + + private static final Logger logger = LoggerFactory.getLogger(DmsRequestHelper.class); + + /** + * 循环分页获取Gitlink列表接口所有数据 + * + * @return 所有数据列表 + */ + public JSONArray getAllDataByPage(String url, String listKey) { + JSONArray jsonArray = new JSONArray(); + boolean isAllData = false; + int pageNum = 1; + // 循环分页获取gitlink组织下所有成员 + while (!isAllData) { + JSONObject result = doGet(GET_LIST_BY_PAGES(url, pageNum, 50) + ); + jsonArray.addAll(result.getJSONArray(listKey)); + long total = result.getLong("search_count"); + if (total <= jsonArray.size()) { + isAllData = true; + } else { + pageNum++; + } + } + return jsonArray; + } + + public List getAllDataByPage(String url, String listKey, Class tClass) { + List allList = new ArrayList<>(); + boolean isAllData = false; + int pageNum = 1; + // 循环分页获取gitlink组织下所有成员 + while (!isAllData) { + JSONObject result = doGet(GitLinkRequestUrl.GET_LIST_BY_PAGES(url, pageNum, 50) + ); + allList.addAll(result.getList(listKey, tClass)); + long total = result.getLong("search_count"); + if (total <= allList.size()) { + isAllData = true; + } else { + pageNum++; + } + } + return allList; + } + + /** + * 循环分页获取Gitlink列表接口所有数据 + * + * @return 所有数据列表 + */ + public JSONArray getAllDataByPage(String url, String listKey,String countKey) { + JSONArray jsonArray = new JSONArray(); + boolean isAllData = false; + int pageNum = 1; + while (!isAllData) { + JSONObject result = doGet(GET_LIST_BY_PAGES(url, pageNum, 50) + ); + jsonArray.addAll(result.getJSONArray(listKey)); + long total = result.getLong(countKey); + if (total <= jsonArray.size()) { + isAllData = true; + } else { + pageNum++; + } + } + return jsonArray; + } + + + public static GitLinkRequestUrl GET_LIST_BY_PAGES(String url, Integer page, Integer limit) { + String p = url.contains("?")? "&page=%d&limit=%d": "%s?page=%d&limit=%d"; + return getAdminGitLinkRequestUrl(String.format(p, url, page, limit)); + } + + + protected static GitLinkRequestUrl getAdminGitLinkRequestUrl(String path) { + GitLinkRequestUrl gitLinkRequestUrl = new GitLinkRequestUrl(); + gitLinkRequestUrl.setIsOpen(false); + gitLinkRequestUrl.setIsAdmin(true); + gitLinkRequestUrl.setPath(path); + return gitLinkRequestUrl; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml index 7b79cf0e2..1a425012a 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml @@ -23,8 +23,10 @@ + + + + + + From 346461a63c1f47c41fbf79d5915f30870f14f3bd Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Wed, 2 Apr 2025 17:14:38 +0800 Subject: [PATCH 218/270] =?UTF-8?q?feat(=E6=88=90=E6=9E=9C=E7=AE=A1?= =?UTF-8?q?=E7=90=86):=20=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 107 +++++ .../domain/Achievements.java | 380 ++++++++++++++++++ .../mapper/AchievementsMapper.java | 63 +++ .../service/IAchievementsService.java | 61 +++ .../service/impl/AchievementsServiceImpl.java | 99 +++++ .../referral/mapper/TalentReferralMapper.java | 2 + .../service/TalentReferralService.java | 8 +- .../CollectUserActDataController.java | 20 + .../CompetitionResourceLibraryController.java | 9 + .../ProjectResourceLibraryController.java | 23 ++ .../TaskResourceLibraryController.java | 42 +- .../dms/resourceLibrary/domain/Searcher.java | 5 +- .../CompetitionResourceLibraryMapper.java | 2 + .../mapper/ProjectResourceLibraryMapper.java | 2 + .../mapper/TaskResourceLibraryMapper.java | 3 + .../mapper/dms/AchievementsMapper.xml | 187 +++++++++ .../dms/ProjectResourceLibraryMapper.xml | 10 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 6 +- .../gen/controller/GenController.java | 22 +- 19 files changed, 1016 insertions(+), 35 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java new file mode 100644 index 000000000..f2224ec03 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -0,0 +1,107 @@ +package com.microservices.dms.achievementLibrary.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; + +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; +import com.microservices.common.security.annotation.RequiresPermissions; +import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.service.IAchievementsService; +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.core.utils.poi.ExcelUtil; +import com.microservices.common.core.web.page.TableDataInfo; + +/** + * 成果Controller + * + * @author microservices + * @date 2025-04-02 + */ +@RestController +@RequestMapping("/achievements") +@Api(tags = "数据管理体系-成果库接口") +public class AchievementsController extends BaseController +{ + @Autowired + private IAchievementsService achievementsService; + + /** + * 查询成果列表 + */ + @RequiresPermissions("dms:achievements:list") + @GetMapping("/list") + public TableDataInfo list(Achievements achievements) + { + startPage(); + List list = achievementsService.selectAchievementsList(achievements); + return getDataTable(list); + } + + /** + * 导出成果列表 + */ + @RequiresPermissions("dms:achievements:export") + @Log(title = "成果", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, Achievements achievements) + { + List list = achievementsService.selectAchievementsList(achievements); + ExcelUtil util = new ExcelUtil(Achievements.class); + util.exportExcel(response, list, "成果数据"); + } + + /** + * 获取成果详细信息 + */ + @RequiresPermissions("dms:achievements:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(achievementsService.selectAchievementsById(id)); + } + + /** + * 新增成果 + */ + @RequiresPermissions("dms:achievements:add") + @Log(title = "成果", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Achievements achievements) + { + return toAjax(achievementsService.insertAchievements(achievements)); + } + + /** + * 修改成果 + */ + @RequiresPermissions("dms:achievements:edit") + @Log(title = "成果", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Achievements achievements) + { + return toAjax(achievementsService.updateAchievements(achievements)); + } + + /** + * 删除成果 + */ + @RequiresPermissions("dms:achievements:remove") + @Log(title = "成果", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(achievementsService.deleteAchievementsByIds(ids)); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java new file mode 100644 index 000000000..aa1c655c1 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -0,0 +1,380 @@ +package com.microservices.dms.achievementLibrary.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.microservices.common.core.annotation.Excel; +import com.microservices.common.core.web.domain.BaseEntity; + +/** + * 成果对象 achievements + * + * @author microservices + * @date 2025-04-02 + */ +public class Achievements extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 成果唯一标识 */ + private Long id; + + /** 成果名称 */ + @Excel(name = "成果名称") + private String achievementName; + + /** 成果领域1 */ + @Excel(name = "成果领域1") + private String field1; + + /** 成果领域2 */ + @Excel(name = "成果领域2") + private String field2; + + /** 成果领域3 */ + @Excel(name = "成果领域3") + private String field3; + + /** 成果类型 */ + @Excel(name = "成果类型") + private String achievementType; + + /** 成果来源 */ + @Excel(name = "成果来源") + private String source; + + /** 成果来源ID */ + @Excel(name = "成果来源ID") + private String sourceId; + + /** 成果来源跳转链接 */ + @Excel(name = "成果来源跳转链接") + private String sourceLink; + + /** 成果标签 */ + @Excel(name = "成果标签") + private String tags; + + /** 成果摘要 */ + @Excel(name = "成果摘要") + private String summary; + + /** 发布单位 */ + @Excel(name = "发布单位") + private String publishingUnit; + + /** 成果地址 */ + @Excel(name = "成果地址") + private String address; + + /** 是否精选成果 */ + @Excel(name = "是否精选成果") + private Integer isFeatured; + + /** 联系人 */ + @Excel(name = "联系人") + private String contactPerson; + + /** 联系电话 */ + @Excel(name = "联系电话") + private String contactNumber; + + /** 成果所属人ID */ + @Excel(name = "成果所属人ID") + private String ownerId; + + /** 成果所属人名称 */ + @Excel(name = "成果所属人名称") + private String ownerName; + + /** 成果状态 */ + @Excel(name = "成果状态") + private String status; + + /** 成果详情 */ + @Excel(name = "成果详情") + private String details; + + /** 成果审核人 */ + @Excel(name = "成果审核人") + private String reviewer; + + /** 成果审核时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "成果审核时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date reviewDate; + + /** 成果审核意见 */ + @Excel(name = "成果审核意见") + private String reviewComments; + + /** 成果图片 */ + @Excel(name = "成果图片") + private String images; + + /** 成果附件 */ + @Excel(name = "成果附件") + private String attachments; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setAchievementName(String achievementName) + { + this.achievementName = achievementName; + } + + public String getAchievementName() + { + return achievementName; + } + public void setField1(String field1) + { + this.field1 = field1; + } + + public String getField1() + { + return field1; + } + public void setField2(String field2) + { + this.field2 = field2; + } + + public String getField2() + { + return field2; + } + public void setField3(String field3) + { + this.field3 = field3; + } + + public String getField3() + { + return field3; + } + public void setAchievementType(String achievementType) + { + this.achievementType = achievementType; + } + + public String getAchievementType() + { + return achievementType; + } + public void setSource(String source) + { + this.source = source; + } + + public String getSource() + { + return source; + } + public void setSourceId(String sourceId) + { + this.sourceId = sourceId; + } + + public String getSourceId() + { + return sourceId; + } + public void setSourceLink(String sourceLink) + { + this.sourceLink = sourceLink; + } + + public String getSourceLink() + { + return sourceLink; + } + public void setTags(String tags) + { + this.tags = tags; + } + + public String getTags() + { + return tags; + } + public void setSummary(String summary) + { + this.summary = summary; + } + + public String getSummary() + { + return summary; + } + public void setPublishingUnit(String publishingUnit) + { + this.publishingUnit = publishingUnit; + } + + public String getPublishingUnit() + { + return publishingUnit; + } + public void setAddress(String address) + { + this.address = address; + } + + public String getAddress() + { + return address; + } + public void setIsFeatured(Integer isFeatured) + { + this.isFeatured = isFeatured; + } + + public Integer getIsFeatured() + { + return isFeatured; + } + public void setContactPerson(String contactPerson) + { + this.contactPerson = contactPerson; + } + + public String getContactPerson() + { + return contactPerson; + } + public void setContactNumber(String contactNumber) + { + this.contactNumber = contactNumber; + } + + public String getContactNumber() + { + return contactNumber; + } + public void setOwnerId(String ownerId) + { + this.ownerId = ownerId; + } + + public String getOwnerId() + { + return ownerId; + } + public void setOwnerName(String ownerName) + { + this.ownerName = ownerName; + } + + public String getOwnerName() + { + return ownerName; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setDetails(String details) + { + this.details = details; + } + + public String getDetails() + { + return details; + } + public void setReviewer(String reviewer) + { + this.reviewer = reviewer; + } + + public String getReviewer() + { + return reviewer; + } + public void setReviewDate(Date reviewDate) + { + this.reviewDate = reviewDate; + } + + public Date getReviewDate() + { + return reviewDate; + } + public void setReviewComments(String reviewComments) + { + this.reviewComments = reviewComments; + } + + public String getReviewComments() + { + return reviewComments; + } + public void setImages(String images) + { + this.images = images; + } + + public String getImages() + { + return images; + } + public void setAttachments(String attachments) + { + this.attachments = attachments; + } + + public String getAttachments() + { + return attachments; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("achievementName", getAchievementName()) + .append("field1", getField1()) + .append("field2", getField2()) + .append("field3", getField3()) + .append("achievementType", getAchievementType()) + .append("source", getSource()) + .append("sourceId", getSourceId()) + .append("sourceLink", getSourceLink()) + .append("tags", getTags()) + .append("summary", getSummary()) + .append("publishingUnit", getPublishingUnit()) + .append("address", getAddress()) + .append("isFeatured", getIsFeatured()) + .append("contactPerson", getContactPerson()) + .append("contactNumber", getContactNumber()) + .append("ownerId", getOwnerId()) + .append("ownerName", getOwnerName()) + .append("status", getStatus()) + .append("details", getDetails()) + .append("reviewer", getReviewer()) + .append("reviewDate", getReviewDate()) + .append("reviewComments", getReviewComments()) + .append("images", getImages()) + .append("attachments", getAttachments()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java new file mode 100644 index 000000000..dd425eea2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -0,0 +1,63 @@ +package com.microservices.dms.achievementLibrary.mapper; + +import java.util.List; +import com.microservices.dms.achievementLibrary.domain.Achievements; +import org.apache.ibatis.annotations.Mapper; + +/** + * 成果Mapper接口 + * + * @author microservices + * @date 2025-04-02 + */ +@Mapper +public interface AchievementsMapper +{ + /** + * 查询成果 + * + * @param id 成果主键 + * @return 成果 + */ + public Achievements selectAchievementsById(Long id); + + /** + * 查询成果列表 + * + * @param achievements 成果 + * @return 成果集合 + */ + public List selectAchievementsList(Achievements achievements); + + /** + * 新增成果 + * + * @param achievements 成果 + * @return 结果 + */ + public int insertAchievements(Achievements achievements); + + /** + * 修改成果 + * + * @param achievements 成果 + * @return 结果 + */ + public int updateAchievements(Achievements achievements); + + /** + * 删除成果 + * + * @param id 成果主键 + * @return 结果 + */ + public int deleteAchievementsById(Long id); + + /** + * 批量删除成果 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteAchievementsByIds(Long[] ids); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java new file mode 100644 index 000000000..60c33e621 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -0,0 +1,61 @@ +package com.microservices.dms.achievementLibrary.service; + +import java.util.List; +import com.microservices.dms.achievementLibrary.domain.Achievements; + +/** + * 成果Service接口 + * + * @author microservices + * @date 2025-04-02 + */ +public interface IAchievementsService +{ + /** + * 查询成果 + * + * @param id 成果主键 + * @return 成果 + */ + public Achievements selectAchievementsById(Long id); + + /** + * 查询成果列表 + * + * @param achievements 成果 + * @return 成果集合 + */ + public List selectAchievementsList(Achievements achievements); + + /** + * 新增成果 + * + * @param achievements 成果 + * @return 结果 + */ + public int insertAchievements(Achievements achievements); + + /** + * 修改成果 + * + * @param achievements 成果 + * @return 结果 + */ + public int updateAchievements(Achievements achievements); + + /** + * 批量删除成果 + * + * @param ids 需要删除的成果主键集合 + * @return 结果 + */ + public int deleteAchievementsByIds(Long[] ids); + + /** + * 删除成果信息 + * + * @param id 成果主键 + * @return 结果 + */ + public int deleteAchievementsById(Long id); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java new file mode 100644 index 000000000..8d002095d --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -0,0 +1,99 @@ +package com.microservices.dms.achievementLibrary.service.impl; + +import java.util.List; +import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.security.utils.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; +import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.service.IAchievementsService; + +/** + * 成果Service业务层处理 + * + * @author microservices + * @date 2025-04-02 + */ +@Service +public class AchievementsServiceImpl implements IAchievementsService +{ + @Autowired + private AchievementsMapper achievementsMapper; + + /** + * 查询成果 + * + * @param id 成果主键 + * @return 成果 + */ + @Override + public Achievements selectAchievementsById(Long id) + { + return achievementsMapper.selectAchievementsById(id); + } + + /** + * 查询成果列表 + * + * @param achievements 成果 + * @return 成果 + */ + @Override + public List selectAchievementsList(Achievements achievements) + { + return achievementsMapper.selectAchievementsList(achievements); + } + + /** + * 新增成果 + * + * @param achievements 成果 + * @return 结果 + */ + @Override + public int insertAchievements(Achievements achievements) + { + achievements.setCreateTime(DateUtils.getNowDate()); + achievements.setCreateBy(SecurityUtils.getUsername()); + return achievementsMapper.insertAchievements(achievements); + } + + /** + * 修改成果 + * + * @param achievements 成果 + * @return 结果 + */ + @Override + public int updateAchievements(Achievements achievements) + { + achievements.setUpdateTime(DateUtils.getNowDate()); + achievements.setUpdateBy(SecurityUtils.getUsername()); + return achievementsMapper.updateAchievements(achievements); + } + + /** + * 批量删除成果 + * + * @param ids 需要删除的成果主键 + * @return 结果 + */ + @Override + public int deleteAchievementsByIds(Long[] ids) + { + return achievementsMapper.deleteAchievementsByIds(ids); + } + + /** + * 删除成果信息 + * + * @param id 成果主键 + * @return 结果 + */ + @Override + public int deleteAchievementsById(Long id) + { + return achievementsMapper.deleteAchievementsById(id); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java index 14445e1b2..15bd3eea1 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/mapper/TalentReferralMapper.java @@ -1,5 +1,6 @@ package com.microservices.dms.referral.mapper; +import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.referral.vo.IssuesVo; import com.microservices.dms.referral.vo.PullRequestVo; import org.apache.ibatis.annotations.Mapper; @@ -8,6 +9,7 @@ import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper +@Slave public interface TalentReferralMapper { List selectIssuesCondition(IssuesVo issuesVo); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java index d547590af..b1d2b043c 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/referral/service/TalentReferralService.java @@ -27,9 +27,6 @@ import java.util.stream.Collectors; @Service public class TalentReferralService { - @Autowired - private GitLinkRequestHelper gitLinkRequestHelper; - @Autowired private TalentReferralMapper talentReferralMapper; @@ -41,7 +38,7 @@ public class TalentReferralService { public Set getContributors(String projectFullName) { try { // 获取项目贡献者数量 - JSONArray contributorsArray = gitLinkRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.CONTRIBUTORS(projectFullName), "list"); + JSONArray contributorsArray = dmsRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.CONTRIBUTORS(projectFullName), "list","total_count"); return contributorsArray.stream().map(o -> (JSONObject) o).map(s -> s.getString("contributions")).filter(StringUtils::isNotBlank) .mapToLong(Long::parseLong).boxed().collect(Collectors.toSet()); @@ -55,7 +52,7 @@ public class TalentReferralService { public Set getCollaborators(String projectFullName) { try { // 获取项目成员者数量 - JSONArray contributorsArray = gitLinkRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.QUERY_USER_FROM_PROJECT(projectFullName), "members"); + JSONArray contributorsArray = dmsRequestHelper.getAllDataByPage(DmsGitLinkRequestUrl.QUERY_USER_FROM_PROJECT(projectFullName), "members","total_count"); return contributorsArray.stream().map(o -> (JSONObject) o).map(s -> s.getString("id")) .filter(StringUtils::isNotBlank).mapToLong(Long::parseLong).boxed().collect(Collectors.toSet()); @@ -237,6 +234,7 @@ public class TalentReferralService { return PRTalentReferral(projectId, prId, openPullRequests); } + //定时统计 public void projectsStatistic(){ } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index dde64fe70..76fd6bacd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -7,6 +7,8 @@ import com.microservices.dms.resourceLibrary.domain.Downloader; import com.microservices.dms.resourceLibrary.domain.Searcher; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -22,6 +24,12 @@ public class CollectUserActDataController { private final TaskResourceLibraryService taskResourceLibraryService; @PostMapping("/addClicker") + @ApiImplicitParams({ + @ApiImplicitParam(name = "clickType", value = "点击类型(任务:makerSpaceTask、竞赛:CompetitionInfo、项目:Project)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "clickId", value = "点击对象ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataType = "String") + }) @ApiOperation(value = "记录点击次数") public AjaxResult addTaskClick(Clicker clicker) { return AjaxResult.success(taskResourceLibraryService.addClick(clicker)); @@ -29,12 +37,24 @@ public class CollectUserActDataController { @PostMapping("/addDownloader") @ApiOperation(value = "记录下载次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "downloadType", value = "下载类型(任务:makerSpaceTask、竞赛作品:CompetitionOpusDownload)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "downloadId", value = "下载对象ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataType = "String") + }) public AjaxResult addDownloader(Downloader downloader) { return AjaxResult.success(taskResourceLibraryService.addDownloader(downloader)); } @PostMapping("/addSearcher") @ApiOperation(value = "记录搜索次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "searchType", value = "搜索类型(任务:makerSpaceTask、项目:Project、竞赛:CompetitionInfo)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "searchId", value = "搜索对象ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataType = "String") + }) public AjaxResult addSearcher(Searcher searcher) { return AjaxResult.success(taskResourceLibraryService.addSearcher(searcher)); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java index b32c01cc7..9a4e591bb 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java @@ -7,6 +7,8 @@ import com.microservices.dms.resourceLibrary.service.CompetitionResourceLibraryS import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -27,6 +29,9 @@ public class CompetitionResourceLibraryController { @GetMapping("/selectRegisterCondition") @ApiOperation(value = "查询用户报名") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectRegisterCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = competitionResourceLibraryService.selectRegisterCondition(taskJournals); @@ -35,6 +40,10 @@ public class CompetitionResourceLibraryController { @GetMapping("/selectOpusCondition") @ApiOperation(value = "查询用户作品") + @ApiImplicitParams({ + @ApiImplicitParam(name = "status", value = "状态3", paramType = "query", dataType = "Integer"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectOpusCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = competitionResourceLibraryService.selectOpusCondition(taskJournals); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java index dff7f5055..ff77f1aa2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java @@ -9,6 +9,8 @@ import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.service.ProjectResourceLibraryService; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -28,6 +30,10 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectSearcherCondition") @ApiOperation(value = "查询用户搜索") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(Project)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectSearcherCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectSearchCondition(taskJournals); @@ -36,6 +42,9 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectCodeCommitCondition") @ApiOperation(value = "查询用户提交") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectCodeCommitCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectCodeCommitCondition(taskJournals); @@ -44,6 +53,9 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectForkCondition") @ApiOperation(value = "查询用户Fork") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectForkCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectForkCondition(taskJournals); @@ -52,6 +64,9 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectIssueCondition") @ApiOperation(value = "查询用户Issue") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectIssueCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectIssueCondition(taskJournals); @@ -60,6 +75,9 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectPRCondition") @ApiOperation(value = "查询用户PR") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) public GenericsTableDataInfo selectPRCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectPRCondition(taskJournals); @@ -68,6 +86,11 @@ public class ProjectResourceLibraryController extends BaseController { @GetMapping("selectPraisesCondition") @ApiOperation(value = "查询用户点赞") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(Project)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "Integer"), + }) + public GenericsTableDataInfo selectPraisesCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectPraisesCondition(taskJournals); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java index d787c07e0..729b7f75f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java @@ -7,6 +7,8 @@ import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -27,6 +29,10 @@ public class TaskResourceLibraryController extends BaseController { @GetMapping("/selectTaskJournalsCondition") @ApiOperation(value = "查询用户评论") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(任务:makerSpaceTask)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + }) public GenericsTableDataInfo selectTaskJournalsCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = taskResourceLibraryService.selectTaskJournalsCondition(taskJournals); @@ -35,28 +41,40 @@ public class TaskResourceLibraryController extends BaseController { @GetMapping("selectClickerCondition") @ApiOperation(value = "查询用户点击") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(任务:makerSpaceTask)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + }) public GenericsTableDataInfo selectClickerCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = taskResourceLibraryService.selectClickerCondition(taskJournals); return PageUtils.toPage(userActionDataVos); } - @GetMapping("selectVisitCondition") - @ApiOperation(value = "查询用户点击") - public GenericsTableDataInfo selectVisitCondition(UserActionDataVo taskJournals) { - PageUtils.startPage(); - List userActionDataVos = taskResourceLibraryService.selectVisitCondition(taskJournals); - return PageUtils.toPage(userActionDataVos); - } - @GetMapping("selectDownloaderCondition") @ApiOperation(value = "查询用户下载") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemType", value = "类型(任务:makerSpaceTask)", paramType = "query", dataType = "String"), + }) public GenericsTableDataInfo selectDownloaderCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = taskResourceLibraryService.selectDownloaderCondition(taskJournals); return PageUtils.toPage(userActionDataVos); } + @GetMapping("selectVisitCondition") + @ApiOperation(value = "查询用户点击") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(任务:makerSpaceTask)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + }) + public GenericsTableDataInfo selectVisitCondition(UserActionDataVo taskJournals) { + PageUtils.startPage(); + List userActionDataVos = taskResourceLibraryService.selectVisitCondition(taskJournals); + return PageUtils.toPage(userActionDataVos); + } + @GetMapping("selectPapersCondition") @ApiOperation(value = "查询用户交稿") public GenericsTableDataInfo selectPapersCondition(UserActionDataVo taskJournals) { @@ -67,6 +85,10 @@ public class TaskResourceLibraryController extends BaseController { @GetMapping("selectWatcherCondition") @ApiOperation(value = "查询用户关注") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(任务:MakerTask)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + }) public GenericsTableDataInfo selectWatcherCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = taskResourceLibraryService.selectWatcherCondition(taskJournals); @@ -75,6 +97,10 @@ public class TaskResourceLibraryController extends BaseController { @GetMapping("selectSearcherCondition") @ApiOperation(value = "查询用户搜索") + @ApiImplicitParams({ + @ApiImplicitParam(name = "itemType", value = "类型(任务:makerSpaceTask)", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataType = "String"), + }) public GenericsTableDataInfo selectSearcherCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = taskResourceLibraryService.selectSearcherCondition(taskJournals); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java index 288adc626..d54012d06 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java @@ -8,11 +8,10 @@ import java.util.Date; @Data public class Searcher { private Long id; - private String clickType; - private Long clickId; + private String searchType; + private Long searchId; private Long userId; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") private Date createdAt; private String extInfo; - } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java index fd2d15381..f0ab2b376 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java @@ -1,5 +1,6 @@ package com.microservices.dms.resourceLibrary.mapper; +import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.vo.CompetitionListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; @@ -7,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper +@Slave public interface CompetitionResourceLibraryMapper { List selectRegisterCondition(UserActionDataVo clicker); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java index 7e1337386..bd29c097a 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java @@ -1,5 +1,6 @@ package com.microservices.dms.resourceLibrary.mapper; +import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; @@ -7,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper +@Slave public interface ProjectResourceLibraryMapper { List selectProjectListCondition(ProjectListVo projectListVo); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index f0fd5b0aa..29b0a6a71 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -1,5 +1,6 @@ package com.microservices.dms.resourceLibrary.mapper; +import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.Downloader; import com.microservices.dms.resourceLibrary.domain.Searcher; @@ -9,6 +10,8 @@ import org.apache.ibatis.annotations.Mapper; import java.util.List; + +@Slave @Mapper public interface TaskResourceLibraryMapper { diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml new file mode 100644 index 000000000..bcb82396a --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, achievement_name, field_1, field_2, field_3, achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from achievements + + + + + + + + insert into achievements + + achievement_name, + field_1, + field_2, + field_3, + achievement_type, + source, + source_id, + source_link, + tags, + summary, + publishing_unit, + address, + is_featured, + contact_person, + contact_number, + owner_id, + owner_name, + status, + details, + reviewer, + review_date, + review_comments, + images, + attachments, + create_by, + create_time, + update_by, + update_time, + + + #{achievementName}, + #{field1}, + #{field2}, + #{field3}, + #{achievementType}, + #{source}, + #{sourceId}, + #{sourceLink}, + #{tags}, + #{summary}, + #{publishingUnit}, + #{address}, + #{isFeatured}, + #{contactPerson}, + #{contactNumber}, + #{ownerId}, + #{ownerName}, + #{status}, + #{details}, + #{reviewer}, + #{reviewDate}, + #{reviewComments}, + #{images}, + #{attachments}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update achievements + + achievement_name = #{achievementName}, + field_1 = #{field1}, + field_2 = #{field2}, + field_3 = #{field3}, + achievement_type = #{achievementType}, + source = #{source}, + source_id = #{sourceId}, + source_link = #{sourceLink}, + tags = #{tags}, + summary = #{summary}, + publishing_unit = #{publishingUnit}, + address = #{address}, + is_featured = #{isFeatured}, + contact_person = #{contactPerson}, + contact_number = #{contactNumber}, + owner_id = #{ownerId}, + owner_name = #{ownerName}, + status = #{status}, + details = #{details}, + reviewer = #{reviewer}, + review_date = #{reviewDate}, + review_comments = #{reviewComments}, + images = #{images}, + attachments = #{attachments}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from achievements where id = #{id} + + + + delete from achievements where id in + + #{id} + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index 637ae76e2..bc0e10237 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -9,7 +9,7 @@ (select name from project_languages where id=project_language_id) as projectLanguages, (select c.name from project_categories c where id = project_category_id) as projectCategories, forked_count,praises_count,watchers_count,issues_count,pull_requests_count,license_id,visits, - (select count(*) from user_actions where action_type='project_search' and action_id=projects.id) as + (select count(*) from searchers where search_type='Project' and search_id=projects.id) as projectSearchCount,created_on, (select count(*) from commit_logs where project_id=projects.id) as commitsCount, (select count(*) from members where project_id=projects.id) as membersCount, @@ -87,14 +87,14 @@ diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index fe9315e28..1da5a019f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -83,7 +83,7 @@ - INSERT INTO downloaders + INSERT INTO downloads download_type, @@ -158,7 +158,7 @@ - + + + insert into achievements diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml new file mode 100644 index 000000000..abd9d4f5c --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, achievement_name, field_1, field_2, field_3, achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from school_enterprise_achievements + + + + + + + + + + insert into school_enterprise_achievements + + achievement_name, + field_1, + field_2, + field_3, + achievement_type, + source, + source_id, + source_link, + tags, + summary, + publishing_unit, + address, + is_featured, + contact_person, + contact_number, + owner_id, + owner_name, + status, + details, + reviewer, + review_date, + review_comments, + images, + attachments, + create_by, + create_time, + update_by, + update_time, + + + #{achievementName}, + #{field1}, + #{field2}, + #{field3}, + #{achievementType}, + #{source}, + #{sourceId}, + #{sourceLink}, + #{tags}, + #{summary}, + #{publishingUnit}, + #{address}, + #{isFeatured}, + #{contactPerson}, + #{contactNumber}, + #{ownerId}, + #{ownerName}, + #{status}, + #{details}, + #{reviewer}, + #{reviewDate}, + #{reviewComments}, + #{images}, + #{attachments}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update school_enterprise_achievements + + achievement_name = #{achievementName}, + field_1 = #{field1}, + field_2 = #{field2}, + field_3 = #{field3}, + achievement_type = #{achievementType}, + source = #{source}, + source_id = #{sourceId}, + source_link = #{sourceLink}, + tags = #{tags}, + summary = #{summary}, + publishing_unit = #{publishingUnit}, + address = #{address}, + is_featured = #{isFeatured}, + contact_person = #{contactPerson}, + contact_number = #{contactNumber}, + owner_id = #{ownerId}, + owner_name = #{ownerName}, + status = #{status}, + details = #{details}, + reviewer = #{reviewer}, + review_date = #{reviewDate}, + review_comments = #{reviewComments}, + images = #{images}, + attachments = #{attachments}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from school_enterprise_achievements where id = #{id} + + + + delete from school_enterprise_achievements where id in + + #{id} + + + \ No newline at end of file From ec3db4821442369480373b0e38cb9476ffbc92b4 Mon Sep 17 00:00:00 2001 From: OTTO <731554297@qq.com> Date: Mon, 7 Apr 2025 10:11:15 +0800 Subject: [PATCH 220/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=80=BB=E8=A7=88=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= =?UTF-8?q?):=20=E5=90=88=E5=B9=B6=E4=B8=BB=E5=B9=B2=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: OTTO <731554297@qq.com> --- .../SoftwareFactStatisticsServiceImpl.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java index 87b0dbbc4..84b2b65bf 100644 --- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java +++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/specialArea/service/SoftwareFactStatisticsServiceImpl.java @@ -23,10 +23,6 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -226,6 +222,44 @@ public class SoftwareFactStatisticsServiceImpl extends BaseController { res.put("zonePmsProjectMax", zonePmsProjectMax==null? "": zonePmsProjectMax.getProjectName()); } + public List projectSituation(String enterpriseIdentifier) { + PmsEnterprise pmsEnterprise = pmsEnterpriseMapper.selectPmsEnterpriseByIdentifier(enterpriseIdentifier); + List zonePmsProjects = statisPmsMapper.selectPmsProjectListByEnterpriseId(pmsEnterprise.getId()); + + List res = new ArrayList<>(); + zonePmsProjects.forEach(zonePmsProject -> { + + ProjectSituationVO vo = new ProjectSituationVO(); + BeanUtils.copyProperties(zonePmsProject, vo); + + Map sprintCountMap = statisPmsMapper.countSprintByStatus(zonePmsProject.getId()) + .stream() + .collect(Collectors.toMap(KeyValVO::getKey, KeyValVO::getVal, (o, n) -> n)); + + vo.setSprintFinishedCount(sprintCountMap.getOrDefault(SPRINT_STATUS_CLOSED, 0L)); + vo.setSprintCount(sprintCountMap.values().stream().reduce(0L, Long::sum)); + + ForgeProject forgeProject = new ForgeProject(); + forgeProject.setPmProjectId(zonePmsProject.getId()); + forgeProject.setPmIssueType(NEED); + Long planCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedCount(planCount); + forgeProject.setStatusIds(ISSUE_FINISHED); + Long planFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setNeedFinishedCount(planFinishCount); + forgeProject.setPmIssueType(TASK); + Long taskFinishCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskFinishedCount(taskFinishCount); + forgeProject.setStatusIds(new ArrayList<>()); + Long taskCount = statisForgeMapper.countForgeProject(forgeProject); + vo.setTaskCount(taskCount); + + res.add(vo); + }); + + return res; + } + public List projectSituation() { List zonePmsProjects = statisPmsMapper.selectPmsProjectList(); From e866c11d4639188b745eb33910763afc8f54173f Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Mon, 7 Apr 2025 10:35:47 +0800 Subject: [PATCH 221/270] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1):=E5=BC=80=E6=BA=90=E9=A1=B9=E7=9B=AE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=A5=E5=8F=A3=E8=AE=BF=E9=97=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20https://pm.osredm.com/osredm/projects/27/b?= =?UTF-8?q?ug/2380?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dss/projects/controller/ProjectDataController.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/microservices-modules/microservices-modules-dss/src/main/java/com/microservices/dss/projects/controller/ProjectDataController.java b/microservices-modules/microservices-modules-dss/src/main/java/com/microservices/dss/projects/controller/ProjectDataController.java index 08e9f4dab..c24466c3a 100644 --- a/microservices-modules/microservices-modules-dss/src/main/java/com/microservices/dss/projects/controller/ProjectDataController.java +++ b/microservices-modules/microservices-modules-dss/src/main/java/com/microservices/dss/projects/controller/ProjectDataController.java @@ -26,14 +26,12 @@ public class ProjectDataController extends BaseController { @ApiOperation("开源项目全局资源获取") @GetMapping(value = "/global-resources") - @GitlinkAdminAccessRequired public AjaxResult getGlobalResourcesData() throws ParseException, JsonProcessingException { return success(projectGlobalResourcesService.getProjectGlobalResourcesData()); } @ApiOperation("开源项目最新动态获取") @GetMapping(value = "/latestActivities") - @GitlinkAdminAccessRequired public AjaxResult getLatestActivitiesData(@ApiParam("分页数") @RequestParam(value = "page", defaultValue = "1") int page, @ApiParam("分页大小") @RequestParam(value = "limit", defaultValue = "6") int limit){ return success(projectGlobalResourcesService.getLatestActivitiesData(page, limit)); From 3650c914be3433aa705d3f449733b1ec91c25346 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Tue, 8 Apr 2025 08:34:46 +0800 Subject: [PATCH 222/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE):=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectResourceLibraryController.java | 76 +++++- .../domain/ProjectResourceLibrary.java | 206 +++++++++++++++ .../mapper/ProjectResourceLibraryMapper.java | 20 ++ .../ProjectResourceLibraryService.java | 50 ++++ .../dms/ProjectResourceLibraryMapper.xml | 239 ++++++++++++++++++ .../mapper/dms/TaskResourceLibraryMapper.xml | 4 +- 6 files changed, 588 insertions(+), 7 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java index 222bc4c1a..50e3717be 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java @@ -1,8 +1,12 @@ package com.microservices.dms.resourceLibrary.controller; import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.utils.poi.ExcelUtil; import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.core.web.page.TableDataInfo; +import com.microservices.dms.resourceLibrary.domain.ProjectResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; @@ -13,11 +17,9 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -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 org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.util.List; @Api(tags = "数据管理体系-项目资源库接口") @@ -98,10 +100,74 @@ public class ProjectResourceLibraryController extends BaseController { } @GetMapping("selectProjectListCondition") - @ApiOperation(value = "查询任务列表") + @ApiOperation(value = "查询项目统计列表") public GenericsTableDataInfo selectProjectListCondition(ProjectListVo projectListVo) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectProjectListCondition(projectListVo); return PageUtils.toPage(userActionDataVos); } + + @ApiOperation(value = "查询项目资源库-列表") + @GetMapping(value = "/list") + public TableDataInfo list(ProjectResourceLibrary projectResourceLibrary) { + startPage(); + List list = projectResourceLibraryService.selectProjectResourceLibraryList(projectResourceLibrary); + return getDataTable(list); + } + + + @PostMapping("/export") + public void export(HttpServletResponse response, ProjectResourceLibrary projectResourceLibrary) { + List list = projectResourceLibraryService.selectProjectResourceLibraryList(projectResourceLibrary); + ExcelUtil util = new ExcelUtil(ProjectResourceLibrary.class); + util.exportExcel(response, list, "数据"); + } + + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(projectResourceLibraryService.selectProjectResourceLibraryById(id)); + } + + @PostMapping + public AjaxResult add(@RequestBody ProjectResourceLibrary projectResourceLibrary) { + return toAjax(projectResourceLibraryService.insertProjectResourceLibrary(projectResourceLibrary)); + } + + + @PutMapping + public AjaxResult edit(@RequestBody ProjectResourceLibrary projectResourceLibrary) { + return toAjax(projectResourceLibraryService.updateProjectResourceLibrary(projectResourceLibrary)); + } + + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(projectResourceLibraryService.deleteProjectResourceLibraryByIds(ids)); + } + + + @ApiOperation(value = "项目转换成果数") + @GetMapping(value = "/getTotalConversionCount") + public AjaxResult getTotalConversionCount() { + return success(projectResourceLibraryService.getTotalConversionCount()); + } + + @ApiOperation(value = "项目公开数") + @GetMapping(value = "/getPublicProjectCount") + public AjaxResult getPublicProjectCount() { + return success(projectResourceLibraryService.getPublicProjectCount()); + } + + @ApiOperation(value = "项目发布版本数") + @GetMapping(value = "/getTotalReleaseCount") + public AjaxResult getTotalReleaseCount() { + return success(projectResourceLibraryService.getTotalReleaseCount()); + } + + @ApiOperation(value = "项目总数") + @GetMapping(value = "/getTotalProjectCount") + public AjaxResult getTotalProjectCount() { + return success(projectResourceLibraryService.getTotalProjectCount()); + } + + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java new file mode 100644 index 000000000..f472dd7d6 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -0,0 +1,206 @@ +package com.microservices.dms.resourceLibrary.domain; + +import java.util.Date; +import java.util.List; + +import com.microservices.common.core.web.domain.BaseEntity; + +/** + * 对象 project_resource_library + * + * @author microservices + * @date 2025-04-07 + */ +public class ProjectResourceLibrary extends BaseEntity { + private static final long serialVersionUID = 1L; + private Long id; + private String projectName; + private String identifier; + private Long projectId; + private Long repositoryId; + private Long versionReleasesId; + private Long isPublic; + private String releaseName; + private Date releaseDate; + private String releasePerson; + private String releaseType; + private String releaseUnit; + private String releaseSummary; + private String releaseDetails; + private String contactPerson; + private String contactPhone; + private Long isTransferredToAchievement; + private Date transferDate; + private Long isSelectedAchievement; + private String images; + private String attachments; + private List attachmentList; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + + public Long getProjectId() { + return projectId; + } + + public void setRepositoryId(Long repositoryId) { + this.repositoryId = repositoryId; + } + + public Long getRepositoryId() { + return repositoryId; + } + + public void setVersionReleasesId(Long versionReleasesId) { + this.versionReleasesId = versionReleasesId; + } + + public Long getVersionReleasesId() { + return versionReleasesId; + } + + public void setIsPublic(Long isPublic) { + this.isPublic = isPublic; + } + + public Long getIsPublic() { + return isPublic; + } + + public void setReleaseName(String releaseName) { + this.releaseName = releaseName; + } + + public String getReleaseName() { + return releaseName; + } + + public void setReleaseDate(Date releaseDate) { + this.releaseDate = releaseDate; + } + + public Date getReleaseDate() { + return releaseDate; + } + + public void setReleasePerson(String releasePerson) { + this.releasePerson = releasePerson; + } + + public String getReleasePerson() { + return releasePerson; + } + + public void setReleaseType(String releaseType) { + this.releaseType = releaseType; + } + + public String getReleaseType() { + return releaseType; + } + + public void setReleaseUnit(String releaseUnit) { + this.releaseUnit = releaseUnit; + } + + public String getReleaseUnit() { + return releaseUnit; + } + + public void setReleaseSummary(String releaseSummary) { + this.releaseSummary = releaseSummary; + } + + public String getReleaseSummary() { + return releaseSummary; + } + + public void setReleaseDetails(String releaseDetails) { + this.releaseDetails = releaseDetails; + } + + public String getReleaseDetails() { + return releaseDetails; + } + + public void setContactPerson(String contactPerson) { + this.contactPerson = contactPerson; + } + + public String getContactPerson() { + return contactPerson; + } + + public void setContactPhone(String contactPhone) { + this.contactPhone = contactPhone; + } + + public String getContactPhone() { + return contactPhone; + } + + public void setIsTransferredToAchievement(Long isTransferredToAchievement) { + this.isTransferredToAchievement = isTransferredToAchievement; + } + + public Long getIsTransferredToAchievement() { + return isTransferredToAchievement; + } + + public void setTransferDate(Date transferDate) { + this.transferDate = transferDate; + } + + public Date getTransferDate() { + return transferDate; + } + + public void setIsSelectedAchievement(Long isSelectedAchievement) { + this.isSelectedAchievement = isSelectedAchievement; + } + + public Long getIsSelectedAchievement() { + return isSelectedAchievement; + } + + public void setImages(String images) { + this.images = images; + } + + public String getImages() { + return images; + } + + public void setAttachments(String attachments) { + this.attachments = attachments; + } + + public String getAttachments() { + return attachments; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java index bd29c097a..71b663b17 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java @@ -1,6 +1,7 @@ package com.microservices.dms.resourceLibrary.mapper; import com.microservices.common.datasource.annotation.Slave; +import com.microservices.dms.resourceLibrary.domain.ProjectResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; @@ -25,4 +26,23 @@ public interface ProjectResourceLibraryMapper { List selectSearchCondition(UserActionDataVo userActionDataVo); + public ProjectResourceLibrary selectProjectResourceLibraryById(Long id); + + public List selectProjectResourceLibraryList(ProjectResourceLibrary projectResourceLibrary); + + public int insertProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary); + + public int updateProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary); + + public int deleteProjectResourceLibraryById(Long id); + + public int deleteProjectResourceLibraryByIds(Long[] ids); + + long getTotalProjectCount(); + + long getPublicProjectCount(); + + long getTotalReleaseCount(); + + long getTotalConversionCount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java index b072c28fd..882de1c5d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -1,6 +1,8 @@ package com.microservices.dms.resourceLibrary.service; +import com.microservices.common.core.utils.DateUtils; +import com.microservices.dms.resourceLibrary.domain.ProjectResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; @@ -42,4 +44,52 @@ public class ProjectResourceLibraryService { public List selectSearchCondition(UserActionDataVo userActionDataVo) { return projectResourceLibraryMapper.selectSearchCondition(userActionDataVo); } + + + public ProjectResourceLibrary selectProjectResourceLibraryById(Long id) { + return projectResourceLibraryMapper.selectProjectResourceLibraryById(id); + } + + + public List selectProjectResourceLibraryList(ProjectResourceLibrary projectResourceLibrary) { + return projectResourceLibraryMapper.selectProjectResourceLibraryList(projectResourceLibrary); + } + + + public int insertProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary) { + projectResourceLibrary.setCreateTime(DateUtils.getNowDate()); + return projectResourceLibraryMapper.insertProjectResourceLibrary(projectResourceLibrary); + } + + + public int updateProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary) { + projectResourceLibrary.setUpdateTime(DateUtils.getNowDate()); + return projectResourceLibraryMapper.updateProjectResourceLibrary(projectResourceLibrary); + } + + + public int deleteProjectResourceLibraryByIds(Long[] ids) { + return projectResourceLibraryMapper.deleteProjectResourceLibraryByIds(ids); + } + + + public int deleteProjectResourceLibraryById(Long id) { + return projectResourceLibraryMapper.deleteProjectResourceLibraryById(id); + } + + public long getTotalProjectCount() { + return projectResourceLibraryMapper.getTotalProjectCount(); + } + + public long getPublicProjectCount() { + return projectResourceLibraryMapper.getPublicProjectCount(); + } + + public long getTotalReleaseCount() { + return projectResourceLibraryMapper.getTotalReleaseCount(); + } + + public long getTotalConversionCount() { + return projectResourceLibraryMapper.getTotalConversionCount(); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index bc0e10237..b5f0bcb39 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -99,4 +99,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, + project_id, + repository_id, + version_releases_id, + is_public, + release_name, + release_date, + release_person, + release_type, + release_unit, + release_summary, + release_details, + contact_person, + contact_phone, + is_transferred_to_achievement, + transfer_date, + is_selected_achievement, + images, + attachments, + create_by, + create_time, + update_by, + update_time + from project_resource_library + + + + + + + + insert into project_resource_library + + + project_id, + repository_id, + version_releases_id, + is_public, + release_name, + release_date, + release_person, + release_type, + release_unit, + release_summary, + release_details, + contact_person, + contact_phone, + is_transferred_to_achievement, + transfer_date, + is_selected_achievement, + images, + attachments, + create_by, + create_time, + update_by, + update_time, + + + + #{projectId}, + #{repositoryId}, + #{versionReleasesId}, + #{isPublic}, + #{releaseName}, + #{releaseDate}, + #{releasePerson}, + #{releaseType}, + #{releaseUnit}, + #{releaseSummary}, + #{releaseDetails}, + #{contactPerson}, + #{contactPhone}, + #{isTransferredToAchievement}, + #{transferDate}, + #{isSelectedAchievement}, + #{images}, + #{attachments}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update project_resource_library + + project_id = #{projectId}, + repository_id = #{repositoryId}, + version_releases_id = #{versionReleasesId}, + is_public = #{isPublic}, + release_name = #{releaseName}, + release_date = #{releaseDate}, + release_person = #{releasePerson}, + release_type = #{releaseType}, + release_unit = #{releaseUnit}, + release_summary = #{releaseSummary}, + release_details = #{releaseDetails}, + contact_person = #{contactPerson}, + contact_phone = #{contactPhone}, + is_transferred_to_achievement = + #{isTransferredToAchievement}, + + transfer_date = #{transferDate}, + is_selected_achievement = #{isSelectedAchievement}, + images = #{images}, + attachments = #{attachments}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete + from project_resource_library + where id = #{id} + + + + delete from project_resource_library where id in + + #{id} + + + + + + + + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 1da5a019f..b0d56719f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -187,7 +187,7 @@ AND journalized_type = #{itemType} - + AND journalized_id = #{itemId} @@ -196,7 +196,7 @@ select task_id as itemId, user_id as userId, created_at as createAt, (select login from users where id = user_id) as userName from papers - + AND task_id = #{itemId} From c3c262caa5b70830d0ec861aefd9cfca97b0a36f Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Tue, 8 Apr 2025 15:14:49 +0800 Subject: [PATCH 223/270] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE):=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/constant/TaskConstant.java | 5 +++ .../domain/ProjectResourceLibrary.java | 15 +++++++- .../resourceLibrary/domain/vo/KeyValVo.java | 32 ++++++++++++++++ .../mapper/ProjectResourceLibraryMapper.java | 4 ++ .../ProjectResourceLibraryService.java | 38 ++++++++++++++++++- .../dms/ProjectResourceLibraryMapper.xml | 21 +++++++++- 6 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/KeyValVo.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java index a41875939..09438bdf5 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java @@ -13,4 +13,9 @@ public class TaskConstant { public static final String COMPETITION_TYPE_CLICK = "CompetitionInfo"; public static final String COMPETITION_TYPE_DOWNLOAD = "CompetitionOpusDownload"; + + public static final String PROJECT_DOWNLOAD_API = "%s/api/attachments/%s"; + public static final String MARKER_SPACE_DOWNLOAD_API_BY_NAME = "/busiAttachments/downloadAttachment/%s"; + public static final String MARKER_SPACE_DOWNLOAD_API_BY_ID = "/busiAttachments/download/%d"; + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java index f472dd7d6..ae3ff4b16 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -1,9 +1,12 @@ package com.microservices.dms.resourceLibrary.domain; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import com.fasterxml.jackson.annotation.JsonFormat; import com.microservices.common.core.web.domain.BaseEntity; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; /** * 对象 project_resource_library @@ -21,6 +24,7 @@ public class ProjectResourceLibrary extends BaseEntity { private Long versionReleasesId; private Long isPublic; private String releaseName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date releaseDate; private String releasePerson; private String releaseType; @@ -30,11 +34,20 @@ public class ProjectResourceLibrary extends BaseEntity { private String contactPerson; private String contactPhone; private Long isTransferredToAchievement; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date transferDate; private Long isSelectedAchievement; private String images; private String attachments; - private List attachmentList; + private List> attachmentList = new ArrayList<>(); + + public List> getAttachmentList() { + return attachmentList; + } + + public void setAttachmentList(List> attachmentList) { + this.attachmentList = attachmentList; + } public String getIdentifier() { return identifier; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/KeyValVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/KeyValVo.java new file mode 100644 index 000000000..7f831f008 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/KeyValVo.java @@ -0,0 +1,32 @@ +package com.microservices.dms.resourceLibrary.domain.vo; + +public class KeyValVo { + private K k; + private V v; + + // 默认构造函数 + public KeyValVo() {} + + // 带参构造函数 + public KeyValVo(K k, V v) { + this.k = k; + this.v = v; + } + + // Getters and Setters + public K getK() { + return k; + } + + public void setK(K k) { + this.k = k; + } + + public V getV() { + return v; + } + + public void setV(V v) { + this.v = v; + } +} \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java index 71b663b17..343c1c649 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ProjectResourceLibraryMapper.java @@ -2,9 +2,11 @@ package com.microservices.dms.resourceLibrary.mapper; import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.ProjectResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -45,4 +47,6 @@ public interface ProjectResourceLibraryMapper { long getTotalReleaseCount(); long getTotalConversionCount(); + + List> getAttachments(@Param("containerId") Long containerId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java index 882de1c5d..433da4ca5 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -2,21 +2,31 @@ package com.microservices.dms.resourceLibrary.service; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.StringUtils; import com.microservices.dms.resourceLibrary.domain.ProjectResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.net.MalformedURLException; +import java.net.URL; import java.util.List; +import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; + @Service @RequiredArgsConstructor public class ProjectResourceLibraryService { private final ProjectResourceLibraryMapper projectResourceLibraryMapper; + @Value("${http.gitLinkUrl}") + public String gitLinkUrl; + public List selectProjectListCondition(ProjectListVo projectListVo) { return projectResourceLibraryMapper.selectProjectListCondition(projectListVo); } @@ -52,9 +62,35 @@ public class ProjectResourceLibraryService { public List selectProjectResourceLibraryList(ProjectResourceLibrary projectResourceLibrary) { - return projectResourceLibraryMapper.selectProjectResourceLibraryList(projectResourceLibrary); + List list = projectResourceLibraryMapper.selectProjectResourceLibraryList(projectResourceLibrary); + // /api/attachments/10e9c28d-f8cb-4fbd-83c3-e46d2ff1b325 + for (ProjectResourceLibrary l : list) { + List> attachments = projectResourceLibraryMapper.getAttachments(l.getVersionReleasesId()); + for (KeyValVo a : attachments) { + String v = a.getV(); + if (StringUtils.isNotEmpty(v)) { + if (v.startsWith("http")) { + String urlPath = getUrlPath(v); + a.setV(gitLinkUrl + urlPath); + } else { + a.setV(String.format(PROJECT_DOWNLOAD_API, gitLinkUrl, v)); + } + } + } + l.setAttachmentList(attachments); + } + return list; } + private String getUrlPath(String urlString) { + URL url = null; + try { + url = new URL(urlString); + } catch (MalformedURLException e) { + return ""; + } + return url.getPath(); + } public int insertProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary) { projectResourceLibrary.setCreateTime(DateUtils.getNowDate()); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index b5f0bcb39..6d109dd83 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -171,7 +171,7 @@ pl.release_unit, p.description as release_summary, p.description as release_details, - p.contact_person, + pl.contact_person, pl.contact_phone, pl.is_transferred_to_achievement, pl.transfer_date, @@ -185,7 +185,7 @@ from projects p join repositories r on p.id = r.project_id join version_releases v on r.id = v.repository_id - join project_resource_library pl on v.id = pl.version_releases_id + left join project_resource_library pl on v.id = pl.version_releases_id and p.name like concat('%', #{projectName}, '%') and version_releases_id = #{versionReleasesId} @@ -338,4 +338,21 @@ where is_transferred_to_achievement = 1 + + + From 7c8c717699c9f6f5e0edcd5c226b009616f70d48 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Wed, 9 Apr 2025 11:11:44 +0800 Subject: [PATCH 224/270] =?UTF-8?q?feat(=E4=BB=BB=E5=8A=A1):=20=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/constant/TaskConstant.java | 4 +- .../TaskResourceLibraryController.java | 73 +++++- .../domain/TaskResourceLibrary.java | 244 +++++++++++++++++ .../mapper/TaskResourceLibraryMapper.java | 45 ++++ .../ProjectResourceLibraryService.java | 11 +- .../service/TaskResourceLibraryService.java | 86 +++++- .../com/microservices/dms/utils/UrlUtil.java | 17 ++ .../mapper/dms/TalentReferralMapper.xml | 2 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 248 +++++++++++++++++- 9 files changed, 704 insertions(+), 26 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java index 09438bdf5..9002c9cf2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java @@ -15,7 +15,7 @@ public class TaskConstant { public static final String PROJECT_DOWNLOAD_API = "%s/api/attachments/%s"; - public static final String MARKER_SPACE_DOWNLOAD_API_BY_NAME = "/busiAttachments/downloadAttachment/%s"; - public static final String MARKER_SPACE_DOWNLOAD_API_BY_ID = "/busiAttachments/download/%d"; + public static final String MARKER_SPACE_DOWNLOAD_API_BY_NAME = "%s/busiAttachments/downloadAttachment/%s"; + public static final String MARKER_SPACE_DOWNLOAD_API_BY_ID = "%s/busiAttachments/download/%s"; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java index f89e1903d..ddcfc702e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java @@ -1,8 +1,14 @@ package com.microservices.dms.resourceLibrary.controller; import com.microservices.common.core.utils.PageUtils; +import com.microservices.common.core.utils.poi.ExcelUtil; import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.common.core.web.page.GenericsTableDataInfo; +import com.microservices.common.core.web.page.TableDataInfo; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; +import com.microservices.dms.resourceLibrary.domain.TaskResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; @@ -11,11 +17,9 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -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 org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.util.List; @Api(tags = "数据管理体系-任务资源库接口") @@ -114,4 +118,65 @@ public class TaskResourceLibraryController extends BaseController { List userActionDataVos = taskResourceLibraryService.selectTaskListCondition(taskListVo); return PageUtils.toPage(userActionDataVos); } + + @GetMapping("/list") + public TableDataInfo list(TaskResourceLibrary taskResourceLibrary) { + startPage(); + List list = taskResourceLibraryService.selectTaskResourceLibraryList(taskResourceLibrary); + return getDataTable(list); + } + + + @PostMapping("/export") + public void export(HttpServletResponse response, TaskResourceLibrary taskResourceLibrary) { + List list = taskResourceLibraryService.selectTaskResourceLibraryList(taskResourceLibrary); + ExcelUtil util = new ExcelUtil(TaskResourceLibrary.class); + util.exportExcel(response, list, "数据"); + } + + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(taskResourceLibraryService.selectTaskResourceLibraryById(id)); + } + + + @PostMapping + public AjaxResult add(@RequestBody TaskResourceLibrary taskResourceLibrary) { + return toAjax(taskResourceLibraryService.insertTaskResourceLibrary(taskResourceLibrary)); + } + + @PutMapping + public AjaxResult edit(@RequestBody TaskResourceLibrary taskResourceLibrary) { + return toAjax(taskResourceLibraryService.updateTaskResourceLibrary(taskResourceLibrary)); + } + + @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(taskResourceLibraryService.deleteTaskResourceLibraryByIds(ids)); + } + + @GetMapping(value = "/getTotalTasks") + @ApiOperation(value = "获取任务总数") + public AjaxResult getTotalTasks() { + return success(taskResourceLibraryService.getTotalTasks()); + } + + @GetMapping(value = "/getConvertedTaskAmount") + @ApiOperation(value = "获取转换成果任务金额") + public AjaxResult getConvertedTaskAmount() { + return success(taskResourceLibraryService.getConvertedTaskAmount()); + } + + @GetMapping(value = "/getConvertedTasksCount") + @ApiOperation(value = "获取任务转换成果数") + public AjaxResult getConvertedTasksCount() { + return success(taskResourceLibraryService.getConvertedTasksCount()); + } + + @GetMapping(value = "/getTaskAmount") + @ApiOperation(value = "获取任务金额") + public AjaxResult getTaskAmount() { + return success(taskResourceLibraryService.getTotalTasks()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java new file mode 100644 index 000000000..eff975708 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java @@ -0,0 +1,244 @@ +package com.microservices.dms.resourceLibrary.domain; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.microservices.common.core.annotation.Excel; +import com.microservices.common.core.web.domain.BaseEntity; + +/** + * @author microservices + * @date 2025-04-08 + */ +public class TaskResourceLibrary extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long id; + + private Long taskId; + + private Long paperId; + + private String taskName; + + private String taskDomain; + + private BigDecimal taskAmount; + + private String submissionName; + + private Date submissionDate; + + private String submitterName; + private String submissionType; + private String submissionOrganization; + private String submissionSummary; + private String releaseDetails; + private String contactName; + private String contactPhone; + private Long isTransferredToResultsLibrary; + private Date transferToResultsDate; + private Long isSelectedResult; + private String imageUrl; + private String attachmentUrl; + private List> attachmentList; + + public List> getAttachmentList() { + return attachmentList; + } + + public void setAttachmentList(List> attachmentList) { + this.attachmentList = attachmentList; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setTaskId(Long taskId) { + this.taskId = taskId; + } + + public Long getTaskId() { + return taskId; + } + + public void setPaperId(Long paperId) { + this.paperId = paperId; + } + + public Long getPaperId() { + return paperId; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskDomain(String taskDomain) { + this.taskDomain = taskDomain; + } + + public String getTaskDomain() { + return taskDomain; + } + + public void setTaskAmount(BigDecimal taskAmount) { + this.taskAmount = taskAmount; + } + + public BigDecimal getTaskAmount() { + return taskAmount; + } + + public void setSubmissionName(String submissionName) { + this.submissionName = submissionName; + } + + public String getSubmissionName() { + return submissionName; + } + + public void setSubmissionDate(Date submissionDate) { + this.submissionDate = submissionDate; + } + + public Date getSubmissionDate() { + return submissionDate; + } + + public void setSubmitterName(String submitterName) { + this.submitterName = submitterName; + } + + public String getSubmitterName() { + return submitterName; + } + + public void setSubmissionType(String submissionType) { + this.submissionType = submissionType; + } + + public String getSubmissionType() { + return submissionType; + } + + public void setSubmissionOrganization(String submissionOrganization) { + this.submissionOrganization = submissionOrganization; + } + + public String getSubmissionOrganization() { + return submissionOrganization; + } + + public void setSubmissionSummary(String submissionSummary) { + this.submissionSummary = submissionSummary; + } + + public String getSubmissionSummary() { + return submissionSummary; + } + + public void setReleaseDetails(String releaseDetails) { + this.releaseDetails = releaseDetails; + } + + public String getReleaseDetails() { + return releaseDetails; + } + + public void setContactName(String contactName) { + this.contactName = contactName; + } + + public String getContactName() { + return contactName; + } + + public void setContactPhone(String contactPhone) { + this.contactPhone = contactPhone; + } + + public String getContactPhone() { + return contactPhone; + } + + public void setIsTransferredToResultsLibrary(Long isTransferredToResultsLibrary) { + this.isTransferredToResultsLibrary = isTransferredToResultsLibrary; + } + + public Long getIsTransferredToResultsLibrary() { + return isTransferredToResultsLibrary; + } + + public void setTransferToResultsDate(Date transferToResultsDate) { + this.transferToResultsDate = transferToResultsDate; + } + + public Date getTransferToResultsDate() { + return transferToResultsDate; + } + + public void setIsSelectedResult(Long isSelectedResult) { + this.isSelectedResult = isSelectedResult; + } + + public Long getIsSelectedResult() { + return isSelectedResult; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setAttachmentUrl(String attachmentUrl) { + this.attachmentUrl = attachmentUrl; + } + + public String getAttachmentUrl() { + return attachmentUrl; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("taskId", getTaskId()) + .append("paperId", getPaperId()) + .append("taskName", getTaskName()) + .append("taskDomain", getTaskDomain()) + .append("taskAmount", getTaskAmount()) + .append("submissionName", getSubmissionName()) + .append("submissionDate", getSubmissionDate()) + .append("submitterName", getSubmitterName()) + .append("submissionType", getSubmissionType()) + .append("submissionOrganization", getSubmissionOrganization()) + .append("submissionSummary", getSubmissionSummary()) + .append("releaseDetails", getReleaseDetails()) + .append("contactName", getContactName()) + .append("contactPhone", getContactPhone()) + .append("isTransferredToResultsLibrary", getIsTransferredToResultsLibrary()) + .append("transferToResultsDate", getTransferToResultsDate()) + .append("isSelectedResult", getIsSelectedResult()) + .append("imageUrl", getImageUrl()) + .append("attachmentUrl", getAttachmentUrl()) + .toString(); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 29b0a6a71..00c0274e5 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -4,9 +4,12 @@ import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.Downloader; import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.domain.TaskResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -50,4 +53,46 @@ public interface TaskResourceLibraryMapper { long countPapersCondition(UserActionDataVo paper); long countTaskJournalsCondition(UserActionDataVo taskJournals); + + TaskResourceLibrary selectTaskResourceLibraryById(Long id); + + List selectTaskResourceLibraryList(TaskResourceLibrary taskResourceLibrary); + + int insertTaskResourceLibrary(TaskResourceLibrary taskResourceLibrary); + + int updateTaskResourceLibrary(TaskResourceLibrary taskResourceLibrary); + + int deleteTaskResourceLibraryById(Long id); + + int deleteTaskResourceLibraryByIds(Long[] ids); + + List> getAttachments(@Param("id") Long id); + + /** + * 获取任务总数 + * + * @return 任务总数 + */ + long getTotalTasks(); + + /** + * 获取转换成果任务金额 + * + * @return 转换成果任务金额 + */ + double getConvertedTaskAmount(); + + /** + * 获取任务转换成果数 + * + * @return 任务转换成果数 + */ + long getConvertedTasksCount(); + + /** + * 获取任务金额 + * + * @return 任务金额 + */ + long getTaskAmount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java index 433da4ca5..6ddadccae 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -8,6 +8,7 @@ import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; +import com.microservices.dms.utils.UrlUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -17,6 +18,7 @@ import java.net.URL; import java.util.List; import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; +import static com.microservices.dms.utils.UrlUtil.getUrlPath; @Service @RequiredArgsConstructor @@ -82,15 +84,6 @@ public class ProjectResourceLibraryService { return list; } - private String getUrlPath(String urlString) { - URL url = null; - try { - url = new URL(urlString); - } catch (MalformedURLException e) { - return ""; - } - return url.getPath(); - } public int insertProjectResourceLibrary(ProjectResourceLibrary projectResourceLibrary) { projectResourceLibrary.setCreateTime(DateUtils.getNowDate()); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 50658b05d..ed164bddf 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -1,23 +1,31 @@ package com.microservices.dms.resourceLibrary.service; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.StringUtils; import com.microservices.dms.constant.TaskConstant; -import com.microservices.dms.resourceLibrary.domain.Clicker; -import com.microservices.dms.resourceLibrary.domain.Downloader; -import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.domain.*; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.List; +import static com.microservices.dms.constant.TaskConstant.MARKER_SPACE_DOWNLOAD_API_BY_ID; +import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; +import static com.microservices.dms.utils.UrlUtil.getUrlPath; + @Service @RequiredArgsConstructor public class TaskResourceLibraryService { private final TaskResourceLibraryMapper taskResourceLibraryMapper; + @Value("${markerSpaceUrl}") + public String markerSpaceUrl; + public int addClick(Clicker click) { click.setCreatedAt(DateUtils.getNowDate()); return taskResourceLibraryMapper.insertClicker(click); @@ -86,5 +94,77 @@ public class TaskResourceLibraryService { return taskListVos; } + public TaskResourceLibrary selectTaskResourceLibraryById(Long id) { + return taskResourceLibraryMapper.selectTaskResourceLibraryById(id); + } + + + public List selectTaskResourceLibraryList(TaskResourceLibrary taskResourceLibrary) { + List list = taskResourceLibraryMapper.selectTaskResourceLibraryList(taskResourceLibrary); + for (TaskResourceLibrary l : list) { + List> attachments = taskResourceLibraryMapper.getAttachments(l.getPaperId()); + for (KeyValVo a : attachments) { + String v = a.getV(); + a.setV(String.format(MARKER_SPACE_DOWNLOAD_API_BY_ID, markerSpaceUrl, v)); + } + l.setAttachmentList(attachments); + } + return list; + } + + + public int insertTaskResourceLibrary(TaskResourceLibrary taskResourceLibrary) { + return taskResourceLibraryMapper.insertTaskResourceLibrary(taskResourceLibrary); + } + + + public int updateTaskResourceLibrary(TaskResourceLibrary taskResourceLibrary) { + return taskResourceLibraryMapper.updateTaskResourceLibrary(taskResourceLibrary); + } + + public int deleteTaskResourceLibraryByIds(Long[] ids) { + return taskResourceLibraryMapper.deleteTaskResourceLibraryByIds(ids); + } + + public int deleteTaskResourceLibraryById(Long id) { + return taskResourceLibraryMapper.deleteTaskResourceLibraryById(id); + } + + + /** + * 获取任务总数 + * + * @return 任务总数 + */ + public long getTotalTasks() { + return taskResourceLibraryMapper.getTotalTasks(); + } + + /** + * 获取转换成果任务金额 + * + * @return 转换成果任务金额 + */ + public double getConvertedTaskAmount() { + return taskResourceLibraryMapper.getConvertedTaskAmount(); + } + + /** + * 获取任务转换成果数 + * + * @return 任务转换成果数 + */ + public long getConvertedTasksCount() { + return taskResourceLibraryMapper.getConvertedTasksCount(); + } + + /** + * 获取任务金额 + * + * @return 任务金额 + */ + long getTaskAmount() { + return taskResourceLibraryMapper.getTaskAmount(); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java new file mode 100644 index 000000000..179220401 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java @@ -0,0 +1,17 @@ +package com.microservices.dms.utils; + +import java.net.MalformedURLException; +import java.net.URL; + +public class UrlUtil { + + public static String getUrlPath(String urlString) { + URL url; + try { + url = new URL(urlString); + } catch (MalformedURLException e) { + return ""; + } + return url.getPath(); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml index 1a425012a..0029dfb43 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TalentReferralMapper.xml @@ -23,7 +23,7 @@ - select download_type as itemType, download_id as itemId, user_id as userId, created_at as createAt, - (select login from users where id = user_id) as userName from downloads + (select login from users where id = user_id) as userName from downloads AND download_type = #{itemType} @@ -170,7 +171,7 @@ - select journalized_type as itemType, journalized_id as itemId, user_id as userId, created_at as createAt, - (select login from users where id = user_id) as userName from task_journals + (select login from users where id = user_id) as userName from task_journals AND journalized_type = #{itemType} @@ -194,7 +196,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select id, + task_id, + paper_id, + task_name, + task_domain, + task_amount, + submission_name, + submission_date, + submitter_name, + submission_type, + submission_organization, + submission_summary, + release_details, + contact_name, + contact_phone, + is_transferred_to_results_library, + transfer_to_results_date, + is_selected_result, + image_url, + attachment_url + from task_resource_library + + + + + + + + + + + + + + + + + + insert into task_resource_library + + task_id, + paper_id, + task_name, + task_domain, + task_amount, + submission_name, + submission_date, + submitter_name, + submission_type, + submission_organization, + submission_summary, + release_details, + contact_name, + contact_phone, + is_transferred_to_results_library, + transfer_to_results_date, + is_selected_result, + image_url, + attachment_url, + + + #{taskId}, + #{paperId}, + #{taskName}, + #{taskDomain}, + #{taskAmount}, + #{submissionName}, + #{submissionDate}, + #{submitterName}, + #{submissionType}, + #{submissionOrganization}, + #{submissionSummary}, + #{releaseDetails}, + #{contactName}, + #{contactPhone}, + #{isTransferredToResultsLibrary}, + #{transferToResultsDate}, + #{isSelectedResult}, + #{imageUrl}, + #{attachmentUrl}, + + + + + update task_resource_library + + task_id = #{taskId}, + paper_id = #{paperId}, + task_name = #{taskName}, + task_domain = #{taskDomain}, + task_amount = #{taskAmount}, + submission_name = #{submissionName}, + submission_date = #{submissionDate}, + submitter_name = #{submitterName}, + submission_type = #{submissionType}, + submission_organization = #{submissionOrganization}, + submission_summary = #{submissionSummary}, + release_details = #{releaseDetails}, + contact_name = #{contactName}, + contact_phone = #{contactPhone}, + is_transferred_to_results_library = + #{isTransferredToResultsLibrary}, + + transfer_to_results_date = #{transferToResultsDate}, + is_selected_result = #{isSelectedResult}, + image_url = #{imageUrl}, + attachment_url = #{attachmentUrl}, + + where id = #{id} + + + + delete + from task_resource_library + where id = #{id} + + + + delete from task_resource_library where id in + + #{id} + + From 24ecd3953ccb8439137988b9a551f62f98968312 Mon Sep 17 00:00:00 2001 From: wanjia <553039491@qq.com> Date: Thu, 10 Apr 2025 10:51:29 +0800 Subject: [PATCH 225/270] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1):=E7=B4=AF=E8=AE=A1=E5=A5=96=E9=87=91=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E8=BF=87=E6=BB=A4=E5=BC=82=E5=B8=B8=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/dss/TasksMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-dss/src/main/resources/mapper/dss/TasksMapper.xml b/microservices-modules/microservices-modules-dss/src/main/resources/mapper/dss/TasksMapper.xml index 96a9d8670..815217f12 100644 --- a/microservices-modules/microservices-modules-dss/src/main/resources/mapper/dss/TasksMapper.xml +++ b/microservices-modules/microservices-modules-dss/src/main/resources/mapper/dss/TasksMapper.xml @@ -210,7 +210,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select '' as itemType, competition_info_id as itemId, user_id as userId, created_at as createAt, - (select login from users where id = user_id) as userName from competition_users + (select login from users where id = user_id) as userName from competition_users AND competition_info_id = #{itemId} @@ -16,7 +16,7 @@ - select title as name,id,`status`,visits,watchers_count,DATEDIFF(upload_date, start_at) as totalTaskDays from competition_infos @@ -44,7 +45,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, + open_competition_id, + open_competition_name, + competition_user_id, + competition_field, + competition_status, + competition_submission_name, + submission_time, + submitter, + submission_type, + submitting_unit, + submission_summary, + submission_details, + contact_person, + contact_phone, + is_transferred_to_result_library, + transferred_to_result_library_time, + is_featured_result, + image, + attachment, + create_by, + create_time, + update_by, + update_time + from competition_resource_library + + + + + + + + + + + + + + + insert into competition_resource_library + + open_competition_id, + open_competition_name, + competition_user_id, + competition_field, + competition_status, + competition_submission_name, + submission_time, + submitter, + submission_type, + submitting_unit, + submission_summary, + submission_details, + contact_person, + contact_phone, + is_transferred_to_result_library, + transferred_to_result_library_time, + is_featured_result, + image, + attachment, + create_by, + create_time, + update_by, + update_time, + + + #{openCompetitionId}, + #{openCompetitionName}, + #{competitionUserId}, + #{competitionField}, + #{competitionStatus}, + #{competitionSubmissionName}, + #{submissionTime}, + #{submitter}, + #{submissionType}, + #{submittingUnit}, + #{submissionSummary}, + #{submissionDetails}, + #{contactPerson}, + #{contactPhone}, + #{isTransferredToResultLibrary}, + #{transferredToResultLibraryTime}, + #{isFeaturedResult}, + #{image}, + #{attachment}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update competition_resource_library + + open_competition_id = #{openCompetitionId}, + open_competition_name = #{openCompetitionName}, + competition_user_id = #{competitionUserId}, + competition_field = #{competitionField}, + competition_status = #{competitionStatus}, + competition_submission_name = #{competitionSubmissionName}, + + submission_time = #{submissionTime}, + submitter = #{submitter}, + submission_type = #{submissionType}, + submitting_unit = #{submittingUnit}, + submission_summary = #{submissionSummary}, + submission_details = #{submissionDetails}, + contact_person = #{contactPerson}, + contact_phone = #{contactPhone}, + is_transferred_to_result_library = + #{isTransferredToResultLibrary}, + + transferred_to_result_library_time = + #{transferredToResultLibraryTime}, + + is_featured_result = #{isFeaturedResult}, + image = #{image}, + attachment = #{attachment}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete + from competition_resource_library + where id = #{id} + + + + delete from competition_resource_library where id in + + #{id} + + + From 58dfa24f9c20b9264f8526fa1e75a3719bcc2208 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 11 Apr 2025 09:58:00 +0800 Subject: [PATCH 227/270] =?UTF-8?q?feat(=E7=AB=9E=E8=B5=9B):=20=E7=AB=9E?= =?UTF-8?q?=E8=B5=9B=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/Achievements.java | 15 +++++++++++- .../service/impl/AchievementsServiceImpl.java | 24 ++++++++++--------- .../CompetitionResourceLibraryController.java | 12 ++++++++++ .../TaskResourceLibraryController.java | 8 ++++++- .../domain/CompetitionResourceLibrary.java | 11 +++++++++ .../domain/ProjectResourceLibrary.java | 9 +++++++ .../domain/TaskResourceLibrary.java | 9 +++++++ .../CompetitionResourceLibraryMapper.java | 2 ++ .../mapper/TaskResourceLibraryMapper.java | 7 ++++++ .../CompetitionResourceLibraryService.java | 10 ++++++++ .../service/TaskResourceLibraryService.java | 7 +++++- .../dms/CompetitionResourceLibraryMapper.xml | 9 ++++++- .../dms/ProjectResourceLibraryMapper.xml | 7 +++--- .../mapper/dms/TaskResourceLibraryMapper.xml | 14 ++++++++++- 14 files changed, 125 insertions(+), 19 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java index aa1c655c1..71b293a95 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -1,7 +1,10 @@ package com.microservices.dms.achievementLibrary.domain; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.microservices.common.core.annotation.Excel; @@ -117,7 +120,17 @@ public class Achievements extends BaseEntity @Excel(name = "成果附件") private String attachments; - public void setId(Long id) + private List attachmentList; + + public List getAttachmentList() { + return attachmentList; + } + + public void setAttachmentList(List attachmentList) { + this.attachmentList = attachmentList; + } + + public void setId(Long id) { this.id = id; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index eca0c4e30..a9a245799 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -3,6 +3,8 @@ package com.microservices.dms.achievementLibrary.service.impl; import java.util.*; import java.util.stream.Collectors; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; @@ -100,17 +102,17 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public void buildFileInfoByIdents(String img, String att, Map map) { - Set imgs = Arrays.stream(Optional.ofNullable(att).orElse("").split(",")).collect(Collectors.toSet()); - Set atts = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); - atts.addAll(imgs); - atts = atts.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); - if (CollectionUtils.isEmpty(atts)) { - return; + Set imgs = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); + imgs = imgs.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); + HashMap imgMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(imgs)) { + Optional.ofNullable(achievementsMapper.getFileInfoByIdents(imgs)).orElse(new ArrayList<>()).forEach(s -> { + imgMap.put(s.get("k"), s.get("v")); + }); } - - Optional.ofNullable(achievementsMapper.getFileInfoByIdents(atts)).orElse(new ArrayList<>()).forEach(s -> { - map.put(s.get("k"), s.get("v")); - }); - + map.put("img", imgMap); + String a = Optional.ofNullable(img).orElse("[]"); + JSONArray ao = JSONArray.parseArray(a); + map.put("att", ao); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java index ec2acf738..abf1a9ca0 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java @@ -145,4 +145,16 @@ public class CompetitionResourceLibraryController extends BaseController { // 这里替换成你的实际逻辑 return competitionResourceLibraryService.getTotalFinishedCompetitions(); } + + /** + * 返回需评审竞赛数 + * + * @return 需评审竞赛数 + */ + @ApiOperation(value = "需评审竞赛数") + @GetMapping(value = "/getReviewCompetitionCount") + public long getReviewCompetitionCount() { + // 这里替换成你的实际逻辑 + return competitionResourceLibraryService.getReviewCompetitionCount(); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java index ddcfc702e..d2676327e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/TaskResourceLibraryController.java @@ -177,6 +177,12 @@ public class TaskResourceLibraryController extends BaseController { @GetMapping(value = "/getTaskAmount") @ApiOperation(value = "获取任务金额") public AjaxResult getTaskAmount() { - return success(taskResourceLibraryService.getTotalTasks()); + return success(taskResourceLibraryService.getTaskAmount()); + } + + @GetMapping(value = "/getReviewTaskCount") + @ApiOperation(value = "需评审任务数") + public AjaxResult getReviewTaskCount() { + return success(taskResourceLibraryService.getReviewTaskCount()); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java index 0a59ac988..d825a6e7f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java @@ -53,9 +53,20 @@ public class CompetitionResourceLibrary extends BaseEntity { private String image; + private Integer isExpertAudit; + private String attachment; + private List> attachmentList = new ArrayList<>(); + public Integer getIsExpertAudit() { + return isExpertAudit; + } + + public void setIsExpertAudit(Integer isExpertAudit) { + this.isExpertAudit = isExpertAudit; + } + public List> getAttachmentList() { return attachmentList; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java index ae3ff4b16..e8a15f585 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -18,6 +18,7 @@ public class ProjectResourceLibrary extends BaseEntity { private static final long serialVersionUID = 1L; private Long id; private String projectName; + private String projectDomain; private String identifier; private Long projectId; private Long repositoryId; @@ -41,6 +42,14 @@ public class ProjectResourceLibrary extends BaseEntity { private String attachments; private List> attachmentList = new ArrayList<>(); + public String getProjectDomain() { + return projectDomain; + } + + public void setProjectDomain(String projectDomain) { + this.projectDomain = projectDomain; + } + public List> getAttachmentList() { return attachmentList; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java index eff975708..b1fe815f3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java @@ -47,6 +47,15 @@ public class TaskResourceLibrary extends BaseEntity { private String imageUrl; private String attachmentUrl; private List> attachmentList; + private Integer expertReview; + + public Integer getExpertReview() { + return expertReview; + } + + public void setExpertReview(Integer expertReview) { + this.expertReview = expertReview; + } public List> getAttachmentList() { return attachmentList; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java index 2ad90a96b..ba2e6024b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java @@ -45,4 +45,6 @@ public interface CompetitionResourceLibraryMapper { long getTotalCompetitionSubmissions(); long getTotalFinishedCompetitions(); + + long getReviewCompetitionCount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 00c0274e5..e5b8ec31f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -95,4 +95,11 @@ public interface TaskResourceLibraryMapper { * @return 任务金额 */ long getTaskAmount(); + + /** + * 获取需评审任务数 + * + * @return 需评审任务数 + */ + long getReviewTaskCount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java index 559cd29db..79ea12e96 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/CompetitionResourceLibraryService.java @@ -134,4 +134,14 @@ public class CompetitionResourceLibraryService { // 这里替换成你的实际逻辑 return competitionResourceLibraryMapper.getTotalFinishedCompetitions(); } + + /** + * 返回需评审竞赛数 + * + * @return 需评审竞赛数 + */ + public long getReviewCompetitionCount() { + // 这里替换成你的实际逻辑 + return competitionResourceLibraryMapper.getReviewCompetitionCount(); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 52487a841..14f91c5db 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -165,8 +165,13 @@ public class TaskResourceLibraryService { * * @return 任务金额 */ - long getTaskAmount() { + public long getTaskAmount() { return taskResourceLibraryMapper.getTaskAmount(); } + + public long getReviewTaskCount() { + return taskResourceLibraryMapper.getReviewTaskCount(); + } + } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index 0dc3af31e..e1cd01e80 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -145,7 +145,8 @@ create_by, create_time, update_by, - update_time + update_time, + ci.is_expert_audit from competition_infos ci join (select * from competition_users where `status` = 3) cu on ci.id = cu.competition_info_id left join competition_resource_library crl on crl.competition_user_id = cu.id @@ -223,6 +224,12 @@ join (select * from competition_users where `status` = 3) cu on ci.id = cu.competition_info_id where ci.upload_date < now() + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index 6d109dd83..5ed5b3787 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -163,11 +163,12 @@ p.id as project_id, r.id as repository_id, v.id as version_releases_id, - pl.is_public, + p.is_public as is_public, v.name as release_name, v.created_at as release_date, - v.user_id as release_person, - (select name from project_categories s where s.id =p.project_category_id limit 1) as release_type, + (select login from uers where id=v.user_id) as release_person, + (select name from project_categories s where s.id =p.project_category_id limit 1) as project_domain, + pl.release_type, pl.release_unit, p.description as release_summary, p.description as release_details, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 5baa0a2aa..3bab113e4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -362,7 +362,12 @@ transfer_to_results_date, is_selected_result, image_url, - attachment_url + attachment_url, + t.expert_review, + create_by, + create_time, + update_by, + update_time from tasks t join (select * from papers where status = 2) p on t.id = p.task_id join paper_details pd on p.id = pd.paper_id @@ -440,6 +445,13 @@ join (select * from papers where status = 2) p on t.id = p.task_id + + insert into task_resource_library From 430590814c62ee8303d5bbfa25dbde4f4ae797fa Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 14 Apr 2025 17:28:14 +0800 Subject: [PATCH 228/270] =?UTF-8?q?feat(=E4=B8=93=E5=AE=B6):=20=E4=B8=93?= =?UTF-8?q?=E5=AE=B6=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 31 +- ...choolEnterpriseAchievementsController.java | 6 - .../ExpertResourceLibraryController.java | 91 ++++++ .../domain/ExpertResourceLibrary.java | 287 ++++++++++++++++++ .../mapper/ExpertResourceLibraryMapper.java | 63 ++++ .../IExpertResourceLibraryService.java | 61 ++++ .../ExpertResourceLibraryServiceImpl.java | 96 ++++++ .../dms/ExpertResourceLibraryMapper.xml | 187 ++++++++++++ 8 files changed, 794 insertions(+), 28 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index 552d853bb..7f82fb00b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -25,25 +25,22 @@ import com.microservices.common.core.web.page.TableDataInfo; /** * 成果Controller - * + * * @author microservices * @date 2025-04-02 */ @RestController @RequestMapping("/achievements") @Api(tags = "数据管理体系-成果库接口") -public class AchievementsController extends BaseController -{ +public class AchievementsController extends BaseController { @Autowired private IAchievementsService achievementsService; /** * 查询成果列表 */ - //@RequiresPermissions("dms:achievements:list") @GetMapping("/list") - public TableDataInfo list(Achievements achievements) - { + public TableDataInfo list(Achievements achievements) { startPage(); List list = achievementsService.selectAchievementsList(achievements); return getDataTable(list); @@ -52,11 +49,9 @@ public class AchievementsController extends BaseController /** * 导出成果列表 */ - //@RequiresPermissions("dms:achievements:export") @Log(title = "成果", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, Achievements achievements) - { + public void export(HttpServletResponse response, Achievements achievements) { List list = achievementsService.selectAchievementsList(achievements); ExcelUtil util = new ExcelUtil(Achievements.class); util.exportExcel(response, list, "成果数据"); @@ -65,43 +60,35 @@ public class AchievementsController extends BaseController /** * 获取成果详细信息 */ - //@RequiresPermissions("dms:achievements:query") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return success(achievementsService.selectAchievementsById(id)); } /** * 新增成果 */ - //@RequiresPermissions("dms:achievements:add") @Log(title = "成果", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody Achievements achievements) - { + public AjaxResult add(@RequestBody Achievements achievements) { return toAjax(achievementsService.insertAchievements(achievements)); } /** * 修改成果 */ - //@RequiresPermissions("dms:achievements:edit") @Log(title = "成果", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody Achievements achievements) - { + public AjaxResult edit(@RequestBody Achievements achievements) { return toAjax(achievementsService.updateAchievements(achievements)); } /** * 删除成果 */ - //@RequiresPermissions("dms:achievements:remove") @Log(title = "成果", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) - { + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(achievementsService.deleteAchievementsByIds(ids)); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/SchoolEnterpriseAchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/SchoolEnterpriseAchievementsController.java index 27d327cf7..2a0a3eba1 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/SchoolEnterpriseAchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/SchoolEnterpriseAchievementsController.java @@ -35,7 +35,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 查询校企成果列表 */ - //@RequiresPermissions("dms:achievements:list") @GetMapping("/list") public TableDataInfo list(SchoolEnterpriseAchievements schoolEnterpriseAchievements) { @@ -47,7 +46,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 导出校企成果列表 */ - //@RequiresPermissions("dms:achievements:export") @Log(title = "校企成果", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, SchoolEnterpriseAchievements schoolEnterpriseAchievements) @@ -60,7 +58,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 获取校企成果详细信息 */ - //@RequiresPermissions("dms:achievements:query") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { @@ -70,7 +67,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 新增校企成果 */ - //@RequiresPermissions("dms:achievements:add") @Log(title = "校企成果", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody SchoolEnterpriseAchievements schoolEnterpriseAchievements) @@ -81,7 +77,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 修改校企成果 */ - //@RequiresPermissions("dms:achievements:edit") @Log(title = "校企成果", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody SchoolEnterpriseAchievements schoolEnterpriseAchievements) @@ -92,7 +87,6 @@ public class SchoolEnterpriseAchievementsController extends BaseController /** * 删除校企成果 */ - //@RequiresPermissions("dms:achievements:remove") @Log(title = "校企成果", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java new file mode 100644 index 000000000..7ceb2eab9 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java @@ -0,0 +1,91 @@ +package com.microservices.dms.resourceLibrary.controller; + +import com.microservices.common.core.utils.poi.ExcelUtil; +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.core.web.page.TableDataInfo; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; +import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 专家资源库Controller + * + * @author microservices + * @date 2025-04-11 + */ +@RestController +@RequestMapping("/library") +public class ExpertResourceLibraryController extends BaseController +{ + @Autowired + private IExpertResourceLibraryService expertResourceLibraryService; + + /** + * 查询专家资源库列表 + */ + @GetMapping("/list") + public TableDataInfo list(ExpertResourceLibrary expertResourceLibrary) + { + startPage(); + List list = expertResourceLibraryService.selectExpertResourceLibraryList(expertResourceLibrary); + return getDataTable(list); + } + + /** + * 导出专家资源库列表 + */ + @Log(title = "专家资源库", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ExpertResourceLibrary expertResourceLibrary) + { + List list = expertResourceLibraryService.selectExpertResourceLibraryList(expertResourceLibrary); + ExcelUtil util = new ExcelUtil(ExpertResourceLibrary.class); + util.exportExcel(response, list, "专家资源库数据"); + } + + /** + * 获取专家资源库详细信息 + */ + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(expertResourceLibraryService.selectExpertResourceLibraryById(id)); + } + + /** + * 新增专家资源库 + */ + @Log(title = "专家资源库", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ExpertResourceLibrary expertResourceLibrary) + { + return toAjax(expertResourceLibraryService.insertExpertResourceLibrary(expertResourceLibrary)); + } + + /** + * 修改专家资源库 + */ + @Log(title = "专家资源库", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ExpertResourceLibrary expertResourceLibrary) + { + return toAjax(expertResourceLibraryService.updateExpertResourceLibrary(expertResourceLibrary)); + } + + /** + * 删除专家资源库 + */ + @Log(title = "专家资源库", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(expertResourceLibraryService.deleteExpertResourceLibraryByIds(ids)); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java new file mode 100644 index 000000000..13051943b --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -0,0 +1,287 @@ +package com.microservices.dms.resourceLibrary.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.microservices.common.core.annotation.Excel; +import com.microservices.common.core.web.domain.BaseEntity; + +/** + * 专家资源库对象 expert_resource_library + * + * @author microservices + * @date 2025-04-11 + */ +public class ExpertResourceLibrary extends BaseEntity { + private static final long serialVersionUID = 1L; + + private Long id; + + private Long userId; + private Long expertId; + + private String expertName; + + private String highestDegree; + + private String graduatedFrom; + + private String idNumber; + + private String major; + + private String workplace; + + private String phone; + + private String workplaceType; + + private String expertEmail; + + private String expertSummary; + + private String expertDetail; + + private String professionalTitle; + + private String expertType; + + private String expertDomain; + + private String titleRank; + + private Long status; + + private String reviewAreaOne; + + private String reviewAreaTwo; + + private String reviewAreaThree; + + private Integer isDelete; + + private Integer sortNo; + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public Long getExpertId() { + return expertId; + } + + public void setExpertId(Long expertId) { + this.expertId = expertId; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getUserId() { + return userId; + } + + public void setExpertName(String expertName) { + this.expertName = expertName; + } + + public String getExpertName() { + return expertName; + } + + public void setHighestDegree(String highestDegree) { + this.highestDegree = highestDegree; + } + + public String getHighestDegree() { + return highestDegree; + } + + public void setGraduatedFrom(String graduatedFrom) { + this.graduatedFrom = graduatedFrom; + } + + public String getGraduatedFrom() { + return graduatedFrom; + } + + public void setIdNumber(String idNumber) { + this.idNumber = idNumber; + } + + public String getIdNumber() { + return idNumber; + } + + public void setMajor(String major) { + this.major = major; + } + + public String getMajor() { + return major; + } + + public void setWorkplace(String workplace) { + this.workplace = workplace; + } + + public String getWorkplace() { + return workplace; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getPhone() { + return phone; + } + + public void setWorkplaceType(String workplaceType) { + this.workplaceType = workplaceType; + } + + public String getWorkplaceType() { + return workplaceType; + } + + public void setExpertEmail(String expertEmail) { + this.expertEmail = expertEmail; + } + + public String getExpertEmail() { + return expertEmail; + } + + public void setExpertSummary(String expertSummary) { + this.expertSummary = expertSummary; + } + + public String getExpertSummary() { + return expertSummary; + } + + public void setExpertDetail(String expertDetail) { + this.expertDetail = expertDetail; + } + + public String getExpertDetail() { + return expertDetail; + } + + public void setProfessionalTitle(String professionalTitle) { + this.professionalTitle = professionalTitle; + } + + public String getProfessionalTitle() { + return professionalTitle; + } + + public void setExpertType(String expertType) { + this.expertType = expertType; + } + + public String getExpertType() { + return expertType; + } + + public void setExpertDomain(String expertDomain) { + this.expertDomain = expertDomain; + } + + public String getExpertDomain() { + return expertDomain; + } + + public void setTitleRank(String titleRank) { + this.titleRank = titleRank; + } + + public String getTitleRank() { + return titleRank; + } + + public void setStatus(Long status) { + this.status = status; + } + + public Long getStatus() { + return status; + } + + public void setReviewAreaOne(String reviewAreaOne) { + this.reviewAreaOne = reviewAreaOne; + } + + public String getReviewAreaOne() { + return reviewAreaOne; + } + + public void setReviewAreaTwo(String reviewAreaTwo) { + this.reviewAreaTwo = reviewAreaTwo; + } + + public String getReviewAreaTwo() { + return reviewAreaTwo; + } + + public void setReviewAreaThree(String reviewAreaThree) { + this.reviewAreaThree = reviewAreaThree; + } + + public String getReviewAreaThree() { + return reviewAreaThree; + } + + public void setIsDelete(Integer isDelete) { + this.isDelete = isDelete; + } + + public Integer getIsDelete() { + return isDelete; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("userId", getUserId()) + .append("expertName", getExpertName()) + .append("highestDegree", getHighestDegree()) + .append("graduatedFrom", getGraduatedFrom()) + .append("idNumber", getIdNumber()) + .append("major", getMajor()) + .append("workplace", getWorkplace()) + .append("phone", getPhone()) + .append("workplaceType", getWorkplaceType()) + .append("expertEmail", getExpertEmail()) + .append("expertSummary", getExpertSummary()) + .append("expertDetail", getExpertDetail()) + .append("professionalTitle", getProfessionalTitle()) + .append("expertType", getExpertType()) + .append("expertDomain", getExpertDomain()) + .append("titleRank", getTitleRank()) + .append("status", getStatus()) + .append("reviewAreaOne", getReviewAreaOne()) + .append("reviewAreaTwo", getReviewAreaTwo()) + .append("reviewAreaThree", getReviewAreaThree()) + .append("isDelete", getIsDelete()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java new file mode 100644 index 000000000..8f7d8837e --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -0,0 +1,63 @@ +package com.microservices.dms.resourceLibrary.mapper; + +import java.util.List; +import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import org.apache.ibatis.annotations.Mapper; + +/** + * 专家资源库Mapper接口 + * + * @author microservices + * @date 2025-04-11 + */ +@Mapper +public interface ExpertResourceLibraryMapper +{ + /** + * 查询专家资源库 + * + * @param id 专家资源库主键 + * @return 专家资源库 + */ + public ExpertResourceLibrary selectExpertResourceLibraryById(Long id); + + /** + * 查询专家资源库列表 + * + * @param expertResourceLibrary 专家资源库 + * @return 专家资源库集合 + */ + public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary); + + /** + * 新增专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + public int insertExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary); + + /** + * 修改专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + public int updateExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary); + + /** + * 删除专家资源库 + * + * @param id 专家资源库主键 + * @return 结果 + */ + public int deleteExpertResourceLibraryById(Long id); + + /** + * 批量删除专家资源库 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteExpertResourceLibraryByIds(Long[] ids); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java new file mode 100644 index 000000000..c553a2340 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java @@ -0,0 +1,61 @@ +package com.microservices.dms.resourceLibrary.service; + +import java.util.List; +import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; + +/** + * 专家资源库Service接口 + * + * @author microservices + * @date 2025-04-11 + */ +public interface IExpertResourceLibraryService +{ + /** + * 查询专家资源库 + * + * @param id 专家资源库主键 + * @return 专家资源库 + */ + public ExpertResourceLibrary selectExpertResourceLibraryById(Long id); + + /** + * 查询专家资源库列表 + * + * @param expertResourceLibrary 专家资源库 + * @return 专家资源库集合 + */ + public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary); + + /** + * 新增专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + public int insertExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary); + + /** + * 修改专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + public int updateExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary); + + /** + * 批量删除专家资源库 + * + * @param ids 需要删除的专家资源库主键集合 + * @return 结果 + */ + public int deleteExpertResourceLibraryByIds(Long[] ids); + + /** + * 删除专家资源库信息 + * + * @param id 专家资源库主键 + * @return 结果 + */ + public int deleteExpertResourceLibraryById(Long id); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java new file mode 100644 index 000000000..a7e4c732a --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -0,0 +1,96 @@ +package com.microservices.dms.resourceLibrary.service.impl; + +import java.util.List; +import com.microservices.common.core.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; +import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; + +/** + * 专家资源库Service业务层处理 + * + * @author microservices + * @date 2025-04-11 + */ +@Service +public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryService +{ + @Autowired + private ExpertResourceLibraryMapper expertResourceLibraryMapper; + + /** + * 查询专家资源库 + * + * @param id 专家资源库主键 + * @return 专家资源库 + */ + @Override + public ExpertResourceLibrary selectExpertResourceLibraryById(Long id) + { + return expertResourceLibraryMapper.selectExpertResourceLibraryById(id); + } + + /** + * 查询专家资源库列表 + * + * @param expertResourceLibrary 专家资源库 + * @return 专家资源库 + */ + @Override + public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary) + { + return expertResourceLibraryMapper.selectExpertResourceLibraryList(expertResourceLibrary); + } + + /** + * 新增专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + @Override + public int insertExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) + { + expertResourceLibrary.setCreateTime(DateUtils.getNowDate()); + return expertResourceLibraryMapper.insertExpertResourceLibrary(expertResourceLibrary); + } + + /** + * 修改专家资源库 + * + * @param expertResourceLibrary 专家资源库 + * @return 结果 + */ + @Override + public int updateExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) + { + expertResourceLibrary.setUpdateTime(DateUtils.getNowDate()); + return expertResourceLibraryMapper.updateExpertResourceLibrary(expertResourceLibrary); + } + + /** + * 批量删除专家资源库 + * + * @param ids 需要删除的专家资源库主键 + * @return 结果 + */ + @Override + public int deleteExpertResourceLibraryByIds(Long[] ids) + { + return expertResourceLibraryMapper.deleteExpertResourceLibraryByIds(ids); + } + + /** + * 删除专家资源库信息 + * + * @param id 专家资源库主键 + * @return 结果 + */ + @Override + public int deleteExpertResourceLibraryById(Long id) + { + return expertResourceLibraryMapper.deleteExpertResourceLibraryById(id); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml new file mode 100644 index 000000000..d7a65825e --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, user_id,expert_id,sort_no, expert_name, highest_degree, graduated_from, id_number, major, workplace, phone, workplace_type, expert_email, expert_summary, expert_detail, professional_title, expert_type, expert_domain, title_rank, status, review_area_one, review_area_two, review_area_three, is_delete, create_by, create_time, update_by, update_time from expert_resource_library + + + + + + + + insert into expert_resource_library + + user_id, + expert_id, + expert_name, + highest_degree, + graduated_from, + id_number, + major, + workplace, + phone, + workplace_type, + expert_email, + expert_summary, + expert_detail, + professional_title, + expert_type, + expert_domain, + title_rank, + status, + review_area_one, + review_area_two, + review_area_three, + is_delete, + create_by, + create_time, + update_by, + update_time, + sort_no, + + + #{userId}, + #{expertId}, + #{expertName}, + #{highestDegree}, + #{graduatedFrom}, + #{idNumber}, + #{major}, + #{workplace}, + #{phone}, + #{workplaceType}, + #{expertEmail}, + #{expertSummary}, + #{expertDetail}, + #{professionalTitle}, + #{expertType}, + #{expertDomain}, + #{titleRank}, + #{status}, + #{reviewAreaOne}, + #{reviewAreaTwo}, + #{reviewAreaThree}, + #{isDelete}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{sortNo}, + + + + + update expert_resource_library + + user_id = #{userId}, + expert_id = #{expertId}, + expert_name = #{expertName}, + highest_degree = #{highestDegree}, + graduated_from = #{graduatedFrom}, + id_number = #{idNumber}, + major = #{major}, + workplace = #{workplace}, + phone = #{phone}, + workplace_type = #{workplaceType}, + expert_email = #{expertEmail}, + expert_summary = #{expertSummary}, + expert_detail = #{expertDetail}, + professional_title = #{professionalTitle}, + expert_type = #{expertType}, + expert_domain = #{expertDomain}, + title_rank = #{titleRank}, + status = #{status}, + review_area_one = #{reviewAreaOne}, + review_area_two = #{reviewAreaTwo}, + review_area_three = #{reviewAreaThree}, + is_delete = #{isDelete}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + sort_no = #{sortNo}, + + where id = #{id} + + + + delete from expert_resource_library where id = #{id} + + + + delete from expert_resource_library where id in + + #{id} + + + \ No newline at end of file From d82b01f514d139fb25281494ef8ea19e20ecdd3f Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 15 Apr 2025 16:32:36 +0800 Subject: [PATCH 229/270] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E8=AE=B0?= =?UTF-8?q?=E5=BD=95):=20=E7=9B=B8=E5=85=B3=E6=95=B0=E6=8D=AE=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 10 ++ .../service/IAchievementsService.java | 2 + .../service/impl/AchievementsServiceImpl.java | 11 +++ .../dms/constant/DmsConstants.java | 5 + .../dms/constant/TaskConstant.java | 4 + .../CollectUserActDataController.java | 32 ++++++- .../CompetitionResourceLibraryController.java | 20 ++-- .../ExpertResourceLibraryController.java | 4 +- .../ProjectResourceLibraryController.java | 1 - .../dms/resourceLibrary/domain/Favorite.java | 19 ++++ .../dms/resourceLibrary/domain/Watcher.java | 19 ++++ .../mapper/TaskResourceLibraryMapper.java | 9 +- .../service/TaskResourceLibraryService.java | 21 ++-- .../microservices/dms/utils/DmsConstants.java | 5 - .../dms/CompetitionResourceLibraryMapper.xml | 6 +- .../dms/ProjectResourceLibraryMapper.xml | 4 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 95 +++++++++++++++++-- 17 files changed, 222 insertions(+), 45 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/DmsConstants.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Favorite.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Watcher.java delete mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index 7f82fb00b..7abfae6ed 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -46,6 +46,16 @@ public class AchievementsController extends BaseController { return getDataTable(list); } + /** + * 查询成果列表 + */ + @GetMapping("/frontList") + public TableDataInfo frontList(Achievements achievements) { + startPage(); + List list = achievementsService.selectAchievementsFrontList(achievements); + return getDataTable(list); + } + /** * 导出成果列表 */ diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 0bf0fd249..052a4d253 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -62,4 +62,6 @@ public interface IAchievementsService public int deleteAchievementsById(Long id); void buildFileInfoByIdents(String img, String att, Map map); + + List selectAchievementsFrontList(Achievements achievements); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index a9a245799..8d924776f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -52,6 +52,17 @@ public class AchievementsServiceImpl implements IAchievementsService { return list; } + + @Override + public List selectAchievementsFrontList(Achievements achievements) { + List list = achievementsMapper.selectAchievementsList(achievements); + for (Achievements a : list) { + a.setDetails(null); + buildFileInfoByIdents(a.getImages(), a.getAttachments(), a.getParams()); + } + return list; + } + /** * 新增成果 * diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/DmsConstants.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/DmsConstants.java new file mode 100644 index 000000000..02550305e --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/DmsConstants.java @@ -0,0 +1,5 @@ +package com.microservices.dms.constant; + +public class DmsConstants { + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java index 9002c9cf2..b70c6bdaa 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/constant/TaskConstant.java @@ -18,4 +18,8 @@ public class TaskConstant { public static final String MARKER_SPACE_DOWNLOAD_API_BY_NAME = "%s/busiAttachments/downloadAttachment/%s"; public static final String MARKER_SPACE_DOWNLOAD_API_BY_ID = "%s/busiAttachments/download/%s"; + //favorites + public static final String EXPERTS = "Experts"; + public static final String ACHIEVEMENTS = "Achievements"; + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index 80629cb1b..adfa474e7 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -2,9 +2,7 @@ package com.microservices.dms.resourceLibrary.controller; import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.dms.resourceLibrary.domain.Clicker; -import com.microservices.dms.resourceLibrary.domain.Downloader; -import com.microservices.dms.resourceLibrary.domain.Searcher; +import com.microservices.dms.resourceLibrary.domain.*; import com.microservices.dms.resourceLibrary.service.TaskResourceLibraryService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -25,7 +23,7 @@ public class CollectUserActDataController { @PostMapping("/addClicker") @ApiImplicitParams({ - @ApiImplicitParam(name = "clickType", value = "点击类型(任务:makerSpaceTask、竞赛:CompetitionInfo、项目:Project)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "clickType", value = "点击类型(任务:makerSpaceTask、竞赛:CompetitionInfo、项目:Project、成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), @ApiImplicitParam(name = "clickId", value = "点击对象ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) @@ -38,7 +36,7 @@ public class CollectUserActDataController { @PostMapping("/addDownloader") @ApiOperation(value = "记录下载次数") @ApiImplicitParams({ - @ApiImplicitParam(name = "downloadType", value = "下载类型(任务:makerSpaceTask、竞赛作品:CompetitionOpusDownload)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "downloadType", value = "下载类型(任务:makerSpaceTask、竞赛作品:CompetitionOpusDownload、成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), @ApiImplicitParam(name = "downloadId", value = "下载对象ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) @@ -58,4 +56,28 @@ public class CollectUserActDataController { public AjaxResult addSearcher(Searcher searcher) { return AjaxResult.success(taskResourceLibraryService.addSearcher(searcher)); } + + @PostMapping("/addFavorite") + @ApiOperation(value = "记录搜索次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "favoriteType", value = "收藏类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) + }) + public AjaxResult addFavorite(Favorite favorite) { + return AjaxResult.success(taskResourceLibraryService.addFavorite(favorite)); + } + + @PostMapping("/addWatcher") + @ApiOperation(value = "记录搜索次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "favoriteType", value = "关注类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) + }) + public AjaxResult addFavorite(Watcher watcher) { + return AjaxResult.success(taskResourceLibraryService.addWatcher(watcher)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java index abf1a9ca0..e177bdd47 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CompetitionResourceLibraryController.java @@ -105,9 +105,9 @@ public class CompetitionResourceLibraryController extends BaseController { */ @ApiOperation(value = "返回开放竞赛总数") @GetMapping(value = "/getTotalOpenCompetitions") - public long getTotalOpenCompetitions() { + public AjaxResult getTotalOpenCompetitions() { // 这里替换成你的实际逻辑,例如从数据库查询 - return competitionResourceLibraryService.getTotalOpenCompetitions(); + return AjaxResult.success(competitionResourceLibraryService.getTotalOpenCompetitions()); } /** @@ -117,9 +117,9 @@ public class CompetitionResourceLibraryController extends BaseController { */ @ApiOperation(value = "返回竞赛转换成果数") @GetMapping(value = "/getTotalCompetitionAchievements") - public long getTotalCompetitionAchievements() { + public AjaxResult getTotalCompetitionAchievements() { // 这里替换成你的实际逻辑 - return competitionResourceLibraryService.getTotalCompetitionAchievements(); + return AjaxResult.success(competitionResourceLibraryService.getTotalCompetitionAchievements()); } /** @@ -129,9 +129,9 @@ public class CompetitionResourceLibraryController extends BaseController { */ @ApiOperation(value = "返回竞赛提交作品数") @GetMapping(value = "/getTotalCompetitionSubmissions") - public long getTotalCompetitionSubmissions() { + public AjaxResult getTotalCompetitionSubmissions() { // 这里替换成你的实际逻辑 - return competitionResourceLibraryService.getTotalCompetitionSubmissions(); + return AjaxResult.success(competitionResourceLibraryService.getTotalCompetitionSubmissions()); } /** @@ -141,9 +141,9 @@ public class CompetitionResourceLibraryController extends BaseController { */ @ApiOperation(value = "返回已结束竞赛数") @GetMapping(value = "/getTotalFinishedCompetitions") - public long getTotalFinishedCompetitions() { + public AjaxResult getTotalFinishedCompetitions() { // 这里替换成你的实际逻辑 - return competitionResourceLibraryService.getTotalFinishedCompetitions(); + return AjaxResult.success(competitionResourceLibraryService.getTotalFinishedCompetitions()); } /** @@ -153,8 +153,8 @@ public class CompetitionResourceLibraryController extends BaseController { */ @ApiOperation(value = "需评审竞赛数") @GetMapping(value = "/getReviewCompetitionCount") - public long getReviewCompetitionCount() { + public AjaxResult getReviewCompetitionCount() { // 这里替换成你的实际逻辑 - return competitionResourceLibraryService.getReviewCompetitionCount(); + return AjaxResult.success(competitionResourceLibraryService.getReviewCompetitionCount()); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java index 7ceb2eab9..c7014998c 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java @@ -8,6 +8,7 @@ import com.microservices.common.log.annotation.Log; import com.microservices.common.log.enums.BusinessType; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; +import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -20,8 +21,9 @@ import java.util.List; * @author microservices * @date 2025-04-11 */ +@Api(tags = "数据管理体系-优质专家库") @RestController -@RequestMapping("/library") +@RequestMapping("/expertResourceLibrary") public class ExpertResourceLibraryController extends BaseController { @Autowired diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java index 50e3717be..ca9640057 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ProjectResourceLibraryController.java @@ -92,7 +92,6 @@ public class ProjectResourceLibraryController extends BaseController { @ApiImplicitParam(name = "itemType", value = "类型(Project)", paramType = "query", dataTypeClass = String.class), @ApiImplicitParam(name = "itemId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), }) - public GenericsTableDataInfo selectPraisesCondition(UserActionDataVo taskJournals) { PageUtils.startPage(); List userActionDataVos = projectResourceLibraryService.selectPraisesCondition(taskJournals); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Favorite.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Favorite.java new file mode 100644 index 000000000..5a7dadc84 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Favorite.java @@ -0,0 +1,19 @@ +package com.microservices.dms.resourceLibrary.domain; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class Favorite { + private Long id; + private String favoriteType; + private Long favoriteId; + private Long userId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; + private String extInfo; +} + diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Watcher.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Watcher.java new file mode 100644 index 000000000..5ba6210a0 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Watcher.java @@ -0,0 +1,19 @@ +package com.microservices.dms.resourceLibrary.domain; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +@Data +public class Watcher { + private Long id; + private String watchableType; + private Long watchableId; + private Long userId; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") + private Date createdAt; + private String extInfo; +} + diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index e5b8ec31f..b303846c7 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -1,10 +1,7 @@ package com.microservices.dms.resourceLibrary.mapper; import com.microservices.common.datasource.annotation.Slave; -import com.microservices.dms.resourceLibrary.domain.Clicker; -import com.microservices.dms.resourceLibrary.domain.Downloader; -import com.microservices.dms.resourceLibrary.domain.Searcher; -import com.microservices.dms.resourceLibrary.domain.TaskResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.*; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.TaskListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; @@ -102,4 +99,8 @@ public interface TaskResourceLibraryMapper { * @return 需评审任务数 */ long getReviewTaskCount(); + + int insertFavorite(Favorite favorite); + + int insertWatcher(Watcher watcher); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 14f91c5db..6af30dbbe 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -104,7 +104,7 @@ public class TaskResourceLibraryService { for (TaskResourceLibrary l : list) { List> attachments = taskResourceLibraryMapper.getAttachments(l.getPaperId()); for (KeyValVo a : attachments) { - String v = a.getV(); + Object v = a.getV(); a.setV(String.format(MARKER_SPACE_DOWNLOAD_API_BY_ID, markerSpaceUrl, v)); } l.setAttachmentList(attachments); @@ -138,7 +138,7 @@ public class TaskResourceLibraryService { * * @return 任务总数 */ - public long getTotalTasks() { + public Long getTotalTasks() { return taskResourceLibraryMapper.getTotalTasks(); } @@ -147,7 +147,7 @@ public class TaskResourceLibraryService { * * @return 转换成果任务金额 */ - public double getConvertedTaskAmount() { + public Double getConvertedTaskAmount() { return taskResourceLibraryMapper.getConvertedTaskAmount(); } @@ -156,7 +156,7 @@ public class TaskResourceLibraryService { * * @return 任务转换成果数 */ - public long getConvertedTasksCount() { + public Long getConvertedTasksCount() { return taskResourceLibraryMapper.getConvertedTasksCount(); } @@ -165,13 +165,22 @@ public class TaskResourceLibraryService { * * @return 任务金额 */ - public long getTaskAmount() { + public Long getTaskAmount() { return taskResourceLibraryMapper.getTaskAmount(); } - public long getReviewTaskCount() { + public Long getReviewTaskCount() { return taskResourceLibraryMapper.getReviewTaskCount(); } + public int addFavorite(Favorite favorite) { + favorite.setCreatedAt(DateUtils.getNowDate()); + return taskResourceLibraryMapper.insertFavorite(favorite); + } + + public int addWatcher(Watcher watcher) { + watcher.setCreatedAt(DateUtils.getNowDate()); + return taskResourceLibraryMapper.insertWatcher(watcher); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java deleted file mode 100644 index 83bdcc2bd..000000000 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DmsConstants.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.microservices.dms.utils; - -public class DmsConstants { - -} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index e1cd01e80..8d0f607a8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -122,7 +122,7 @@ select click_type as itemType, click_id as itemId, user_id as userId, created_at as createAt, (select login from users where id = user_id) as userName from clickers @@ -344,10 +422,10 @@ select b.file_name as k, b.id as v - from paper_details pd join busi_attachments b on pd.files = b.id + from paper_details pd + join busi_attachments b on pd.files = b.id where pd.paper_id = #{id} + select id, achievement_name + from achievements + where is_featured ='1' + order by create_time desc + limit 0,4 + + + + + + \ No newline at end of file From d22795991f6b6634377fc2130930dbd534ae562a Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 16 Apr 2025 10:42:48 +0800 Subject: [PATCH 231/270] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E3=80=81=E8=BF=91=E4=B8=83=E6=97=A5=E7=94=A8=E6=88=B7=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 63 +++++++++++-------- .../achievementLibrary/domain/AchQueryVo.java | 33 ++++++++++ .../domain/Achievements.java | 10 +++ .../mapper/AchievementsMapper.java | 13 ++++ .../service/IAchievementsService.java | 25 +++++--- .../service/impl/AchievementsServiceImpl.java | 48 +++++++++++++- .../CollectUserActDataController.java | 12 ++++ .../ExpertResourceLibraryController.java | 12 ++++ .../dms/resourceLibrary/domain/Searcher.java | 1 + .../mapper/ExpertResourceLibraryMapper.java | 2 + .../IExpertResourceLibraryService.java | 2 + .../service/TaskResourceLibraryService.java | 17 +++++ .../ExpertResourceLibraryServiceImpl.java | 13 ++++ .../com/microservices/dms/utils/DateUtil.java | 40 ++++++++++++ .../mapper/dms/AchievementsMapper.xml | 37 +++++++++++ .../dms/CompetitionResourceLibraryMapper.xml | 2 +- .../dms/ExpertResourceLibraryMapper.xml | 52 +++++++++++++-- 17 files changed, 339 insertions(+), 43 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index 2d486cdd5..5a301c49c 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -1,28 +1,21 @@ package com.microservices.dms.achievementLibrary.controller; -import java.util.List; -import javax.servlet.http.HttpServletResponse; - +import com.microservices.common.core.utils.poi.ExcelUtil; +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.core.web.page.TableDataInfo; +import com.microservices.common.log.annotation.Log; +import com.microservices.common.log.enums.BusinessType; +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; +import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.service.IAchievementsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.microservices.common.log.annotation.Log; -import com.microservices.common.log.enums.BusinessType; -import com.microservices.common.security.annotation.RequiresPermissions; -import com.microservices.dms.achievementLibrary.domain.Achievements; -import com.microservices.dms.achievementLibrary.service.IAchievementsService; -import com.microservices.common.core.web.controller.BaseController; -import com.microservices.common.core.web.domain.AjaxResult; -import com.microservices.common.core.utils.poi.ExcelUtil; -import com.microservices.common.core.web.page.TableDataInfo; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** * 成果Controller @@ -105,33 +98,49 @@ public class AchievementsController extends BaseController { /** * 获取精选成果 + * * @return */ @ApiOperation("获取精选成果") @GetMapping("/getChoiceImport") - public AjaxResult getChoiceImport() - { + public AjaxResult getChoiceImport() { return success(achievementsService.getChoiceImport()); } /** * 根据成果来源对成果数据进行分类统计 + * * @return */ - @ApiOperation("根据成果来源对成果数据进行分类统计")@GetMapping("/getTjBySources") - public AjaxResult getTjBySources() - { + @ApiOperation("根据成果来源对成果数据进行分类统计") + @GetMapping("/getTjBySources") + public AjaxResult getTjBySources() { return success(achievementsService.getTjBySources()); } /** * 根据成果领域对成功数据进行汇总 + * * @return */ @ApiOperation("根据成果领域对成功数据进行汇总") @GetMapping("/getTjByAreas") - public AjaxResult getTjByAreas() - { + public AjaxResult getTjByAreas() { return success(achievementsService.getTjByAreas()); } + + /* 获取全部成果,根据成果名称、成果领域、成果来源进行查询 + * @return + */ + @ApiOperation("获取全部成果,根据成果名称、成果领域、成果来源进行查询") + @GetMapping("/getAllResult") + public AjaxResult getAllResult(@RequestBody AchQueryVo achQueryVo) { + return success(achievementsService.getAllResult(achQueryVo)); + } + + @ApiOperation("近七日用户行为数据") + @GetMapping("/getUerActionData") + public AjaxResult getUerActionData() { + return success(achievementsService.getUerActionData()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java new file mode 100644 index 000000000..956dcf935 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java @@ -0,0 +1,33 @@ +package com.microservices.dms.achievementLibrary.domain; + +public class AchQueryVo { + + private String areaQuery;//领域 + private String source;//来源 + private String achievementName;//名称 + + + public String getAreaQuery() { + return areaQuery; + } + + public void setAreaQuery(String areaQuery) { + this.areaQuery = areaQuery; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getAchievementName() { + return achievementName; + } + + public void setAchievementName(String achievementName) { + this.achievementName = achievementName; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java index 71b293a95..0d1c1b54f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -120,6 +120,16 @@ public class Achievements extends BaseEntity @Excel(name = "成果附件") private String attachments; + Long clickSum; + + public Long getClickSum() { + return clickSum; + } + + public void setClickSum(Long clickSum) { + this.clickSum = clickSum; + } + private List attachmentList; public List getAttachmentList() { diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 82f4397d2..663fbde8f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -1,13 +1,16 @@ package com.microservices.dms.achievementLibrary.mapper; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import com.microservices.common.datasource.annotation.Master; import com.microservices.common.datasource.annotation.Slave; +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -74,6 +77,16 @@ public interface AchievementsMapper { List> getFileInfoByIdents(@Param("idents") Set idents); List getChoiceImport(); + List getTjBySources(); + List getTjByAreas(); + + List selectAchievementsByParam(AchQueryVo achQueryVo); + + Long getAchievementClickSum(Long id); + + List> getaWatcher(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements); + + List> getFavorite(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index b0ed22fd9..8cd6aae93 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -3,20 +3,20 @@ package com.microservices.dms.achievementLibrary.service; import java.util.List; import java.util.Map; +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; /** * 成果Service接口 - * + * * @author microservices * @date 2025-04-02 */ -public interface IAchievementsService -{ +public interface IAchievementsService { /** * 查询成果 - * + * * @param id 成果主键 * @return 成果 */ @@ -24,7 +24,7 @@ public interface IAchievementsService /** * 查询成果列表 - * + * * @param achievements 成果 * @return 成果集合 */ @@ -32,7 +32,7 @@ public interface IAchievementsService /** * 新增成果 - * + * * @param achievements 成果 * @return 结果 */ @@ -40,7 +40,7 @@ public interface IAchievementsService /** * 修改成果 - * + * * @param achievements 成果 * @return 结果 */ @@ -48,7 +48,7 @@ public interface IAchievementsService /** * 批量删除成果 - * + * * @param ids 需要删除的成果主键集合 * @return 结果 */ @@ -56,7 +56,7 @@ public interface IAchievementsService /** * 删除成果信息 - * + * * @param id 成果主键 * @return 结果 */ @@ -67,6 +67,13 @@ public interface IAchievementsService List selectAchievementsFrontList(Achievements achievements); List getChoiceImport(); + List getTjBySources(); + List getTjByAreas(); + + List getAllResult(AchQueryVo achQueryVo); + + Map getUerActionData(); + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 8a13b002b..b3e486d16 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -8,7 +8,10 @@ import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import com.microservices.dms.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; @@ -116,7 +119,7 @@ public class AchievementsServiceImpl implements IAchievementsService { public void buildFileInfoByIdents(String img, String att, Map map) { Set imgs = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); imgs = imgs.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); - HashMap imgMap = new HashMap<>(); + HashMap imgMap = new HashMap<>(); if (!CollectionUtils.isEmpty(imgs)) { Optional.ofNullable(achievementsMapper.getFileInfoByIdents(imgs)).orElse(new ArrayList<>()).forEach(s -> { imgMap.put(s.get("k"), s.get("v")); @@ -143,4 +146,47 @@ public class AchievementsServiceImpl implements IAchievementsService { public List getTjByAreas() { return achievementsMapper.getTjByAreas(); } + + @Override + public List getAllResult(AchQueryVo achQueryVo) { + //根据查询条件获取所有的成果数据 + List list = achievementsMapper.selectAchievementsByParam(achQueryVo); + //遍历成果数据,获取对应成果的点击数 + for (Achievements a : list) { + Long clickSum = achievementsMapper.getAchievementClickSum(a.getId()); + a.setClickSum(clickSum); + } + return list; + } + + @Override + public Map getUerActionData() { + Date[] days = DateUtil.getDays(1, 7); + Map w = achievementsMapper.getaWatcher(days[0], days[1], "Achievements") + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + + Map g = achievementsMapper.getFavorite(days[0], days[1], "Achievements") + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + + List dateStr = DateUtil.getDateStr(days[0], days[1]); + List> wRes = new ArrayList<>(); + List> gRes = new ArrayList<>(); + for (String s : dateStr) { + Long a = w.getOrDefault(s, 0L); + Long b = g.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + KeyValVo k2 = new KeyValVo<>(); + k2.setK(s); + k2.setV(b); + + wRes.add(k1); + gRes.add(k2); + } + Map res = new HashMap<>(); + res.put("watcher", wRes); + res.put("favorite", gRes); + return res; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index adfa474e7..7dbb566b3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -57,6 +57,18 @@ public class CollectUserActDataController { return AjaxResult.success(taskResourceLibraryService.addSearcher(searcher)); } + @PostMapping("/addSearcher2") + @ApiOperation(value = "记录搜索次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "searchType", value = "搜索类型(任务:makerSpaceTask、项目:Project、竞赛:CompetitionInfo)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "searchIds", value = "搜索对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) + }) + public AjaxResult addSearcher2(Searcher searcher) { + return AjaxResult.success(taskResourceLibraryService.addSearcher2(searcher)); + } + @PostMapping("/addFavorite") @ApiOperation(value = "记录搜索次数") @ApiImplicitParams({ diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java index c7014998c..3589c2c20 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java @@ -40,6 +40,18 @@ public class ExpertResourceLibraryController extends BaseController return getDataTable(list); } + + /** + * 查询专家资源库列表 + */ + @GetMapping("/listFront") + public TableDataInfo listFront(ExpertResourceLibrary expertResourceLibrary) + { + startPage(); + List list = expertResourceLibraryService.selectExpertResourceLibraryList2(expertResourceLibrary); + return getDataTable(list); + } + /** * 导出专家资源库列表 */ diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java index d54012d06..e265ab521 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/Searcher.java @@ -10,6 +10,7 @@ public class Searcher { private Long id; private String searchType; private Long searchId; + private String searchIds; private Long userId; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "") private Date createdAt; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java index 8f7d8837e..e56e3a185 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -60,4 +60,6 @@ public interface ExpertResourceLibraryMapper * @return 结果 */ public int deleteExpertResourceLibraryByIds(Long[] ids); + + List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java index c553a2340..d739211b7 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java @@ -58,4 +58,6 @@ public interface IExpertResourceLibraryService * @return 结果 */ public int deleteExpertResourceLibraryById(Long id); + + List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 6af30dbbe..a4b25412b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -12,7 +12,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static com.microservices.dms.constant.TaskConstant.MARKER_SPACE_DOWNLOAD_API_BY_ID; import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; @@ -183,4 +185,19 @@ public class TaskResourceLibraryService { watcher.setCreatedAt(DateUtils.getNowDate()); return taskResourceLibraryMapper.insertWatcher(watcher); } + + public int addSearcher2(Searcher searcher) { + String[] split = searcher.getSearchIds().split(","); + Arrays.stream(split).forEach(s -> { + Searcher e = new Searcher(); + e.setCreatedAt(DateUtils.getNowDate()); + e.setSearchId(Long.parseLong(s)); + e.setUserId(searcher.getUserId()); + e.setExtInfo(searcher.getExtInfo()); + e.setSearchType(searcher.getSearchType()); + taskResourceLibraryMapper.insertSearcher(e); + }); + + return split.length; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index a7e4c732a..34b289e1d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -44,6 +44,19 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS return expertResourceLibraryMapper.selectExpertResourceLibraryList(expertResourceLibrary); } + + /** + * 查询专家资源库列表 + * + * @param expertResourceLibrary 专家资源库 + * @return 专家资源库 + */ + @Override + public List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary) + { + return expertResourceLibraryMapper.selectExpertResourceLibraryList2(expertResourceLibrary); + } + /** * 新增专家资源库 * diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java new file mode 100644 index 000000000..421d5366d --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java @@ -0,0 +1,40 @@ +package com.microservices.dms.utils; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.LongStream; + +public class DateUtil { + + public static Date[] getDays(long start, long end) { + LocalDate today = LocalDate.now(); + LocalDate startOfWeek = today.minusDays(end); + LocalDate endOfWeek = today.minusDays(start); + + LocalDateTime startDateTime = startOfWeek.atStartOfDay(); + LocalDateTime endDateTime = endOfWeek.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()), + }; + } + + + public static List getDateStr(Date start, Date end) { + LocalDate s = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); + LocalDate e = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); + String pattern = "yyyy-MM-dd"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); + + return LongStream.range(0,s.until(e).getDays()+1) + .mapToObj(s::plusDays) + .map(formatter::format) + .collect(Collectors.toList()); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 88301b186..9d7365e71 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -224,4 +224,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" limit 0,5 + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index 8d0f607a8..bb97335e0 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -128,7 +128,7 @@ cu.id as competition_user_id, cu.sub_competition as competition_field, ci.status as competition_status, - competition_submission_name, + cu.works_name as competition_submission_name, cu.created_at as submission_time, cu.leader as submitter, submission_type, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index d7a65825e..af46a46ba 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -40,10 +40,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + @@ -114,7 +116,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time, update_by, update_time, - + attachment_count, + is_expert_audit, + #{achievementName}, #{field1}, @@ -144,7 +148,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createTime}, #{updateBy}, #{updateTime}, - + #{attachmentCount}, + #{isExpertAudit}, + @@ -178,6 +184,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, + attachment_count = #{attachmentCount}, + is_expert_audit = #{isExpertAudit}, where id = #{id} @@ -261,4 +269,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by DATE_FORMAT(created_at, '%Y-%m-%d') order by DATE_FORMAT(created_at, '%Y-%m-%d') + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 84b2aa6ee..45b2fbff9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -41,7 +41,14 @@ - + INSERT INTO searchers From ad1b5ca8c448fab1fe58e79c993957ea2a026fe7 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 17 Apr 2025 15:55:33 +0800 Subject: [PATCH 233/270] =?UTF-8?q?=E4=B8=83=E6=97=A5=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 27 +++++++- .../mapper/AchievementsMapper.java | 8 +++ .../service/IAchievementsService.java | 8 +++ .../service/impl/AchievementsServiceImpl.java | 67 +++++++++++++++---- .../CollectUserActDataController.java | 6 +- .../mapper/dms/AchievementsMapper.xml | 33 +++++++++ .../service/impl/SysFileInfoServiceImpl.java | 7 ++ 7 files changed, 139 insertions(+), 17 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index decd1bbe7..0737ceb4a 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -152,7 +152,32 @@ public class AchievementsController extends BaseController { @ApiOperation("七日新增") @GetMapping("/get7DayAdd") - public AjaxResult getA(@RequestBody AchQueryVo achQueryVo) { + public AjaxResult get7DayAdd(@RequestBody AchQueryVo achQueryVo) { return success(achievementsService.get7DayAdd(achQueryVo)); } + + + @ApiOperation("首页项目统计") + @GetMapping("/indexProjectStatistic") + public AjaxResult indexProjectStatistic() { + return success(achievementsService.indexProjectStatistic()); + } + + @ApiOperation("首页task统计") + @GetMapping("/indexTaskStatistic") + public AjaxResult indexTaskStatistic() { + return success(achievementsService.indexTaskStatistic()); + } + + @ApiOperation("首页Competition统计") + @GetMapping("/indexCompetitionStatistic") + public AjaxResult indexCompetitionStatistic() { + return success(achievementsService.indexCompetitionStatistic()); + } + + @ApiOperation("首页SchoolEnterprise统计") + @GetMapping("/indexSchoolEnterpriseStatistic") + public AjaxResult indexSchoolEnterpriseStatistic() { + return success(achievementsService.indexSchoolEnterpriseStatistic()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index dfd4f891a..8abd0dbcc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -93,4 +93,12 @@ public interface AchievementsMapper { List> getAchievement(@Param("s") Date s, @Param("e") Date e, @Param("t") String source); List getHotAchievement(); + + Map indexProjectStatistic(); + + Map indexTaskStatistic(); + + Map indexCompetitionStatistic(); + + Long indexSchoolEnterpriseStatistic(@Param("s") String s, @Param("t") String tags); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 8c7395426..0cc1f1704 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -80,4 +80,12 @@ public interface IAchievementsService { List getHotAchievement(); List> get7DayAdd(AchQueryVo achQueryVo); + + Map indexProjectStatistic(); + + Map indexTaskStatistic(); + + Map indexCompetitionStatistic(); + + Map indexSchoolEnterpriseStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index b186e76aa..cec9a5524 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -10,6 +10,8 @@ import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.service.ISchoolEnterpriseAchievementsService; +import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; @@ -35,6 +37,9 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private TaskResourceLibraryMapper taskResourceLibraryMapper; + private ISchoolEnterpriseAchievementsService schoolEnterpriseAchievementsService; + + /** * 查询成果 * @@ -122,18 +127,18 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public void buildFileInfoByIdents(String img, String att, Map map) { - Set imgs = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); - imgs = imgs.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); - HashMap imgMap = new HashMap<>(); - if (!CollectionUtils.isEmpty(imgs)) { - Optional.ofNullable(achievementsMapper.getFileInfoByIdents(imgs)).orElse(new ArrayList<>()).forEach(s -> { - imgMap.put(s.get("k"), s.get("v")); - }); - } - map.put("img", imgMap); - String a = Optional.ofNullable(img).orElse("[]"); - JSONArray ao = JSONArray.parseArray(a); - map.put("att", ao); +// Set imgs = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); +// imgs = imgs.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); +// HashMap imgMap = new HashMap<>(); +// if (!CollectionUtils.isEmpty(imgs)) { +// Optional.ofNullable(achievementsMapper.getFileInfoByIdents(imgs)).orElse(new ArrayList<>()).forEach(s -> { +// imgMap.put(s.get("k"), s.get("v")); +// }); +// } +// map.put("img", imgMap); +// String a = Optional.ofNullable(img).orElse("[]"); +// JSONArray ao = JSONArray.parseArray(a); +// map.put("att", ao); } @@ -203,7 +208,7 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public List> get7DayAdd(AchQueryVo achQueryVo) { Date[] days = DateUtil.getDays(1, 7); - Map w = achievementsMapper.getaWatcher(days[0], days[1], achQueryVo.getSource()) + Map w = achievementsMapper.getAchievement(days[0], days[1], achQueryVo.getSource()) .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); List dateStr = DateUtil.getDateStr(days[0], days[1]); @@ -218,4 +223,40 @@ public class AchievementsServiceImpl implements IAchievementsService { } return res; } + + @Override + public Map indexProjectStatistic() { + Map res = achievementsMapper.indexProjectStatistic(); + return res; + } + + @Override + public Map indexTaskStatistic() { + Map res = achievementsMapper.indexTaskStatistic(); + double convertedTaskAmount = taskResourceLibraryMapper.getConvertedTaskAmount(); + res.put("convertedTaskAmount", convertedTaskAmount); + return res; + } + + @Override + public Map indexCompetitionStatistic() { + Map res = achievementsMapper.indexCompetitionStatistic(); + return res; + } + + @Override + public Map indexSchoolEnterpriseStatistic() { + Map res = new HashMap<>(); + Long schoolEnterpriseCount = achievementsMapper.indexSchoolEnterpriseStatistic("4", ""); + res.put("schoolEnterpriseCount", schoolEnterpriseCount); + Long schoolCount = achievementsMapper.indexSchoolEnterpriseStatistic("4", "1"); + res.put("schoolCount", schoolCount); + Long enterpriseCount = achievementsMapper.indexSchoolEnterpriseStatistic("4", "2"); + res.put("enterpriseCount", enterpriseCount); + Clicker clicker = new Clicker(); + clicker.setClickType("schoolEnterprise"); + long clickCount = taskResourceLibraryMapper.countClicker(clicker); + res.put("clickCount", clickCount); + return res; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index 06277a5e4..70c808736 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -61,7 +61,7 @@ public class CollectUserActDataController { @ApiOperation(value = "记录搜索次数") @ApiImplicitParams({ @ApiImplicitParam(name = "searchType", value = "搜索类型(任务:makerSpaceTask、项目:Project、竞赛:CompetitionInfo)", paramType = "query", dataTypeClass = String.class), - @ApiImplicitParam(name = "searchIds", value = "搜索对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "searchIds", value = "搜索对象ID,多个,分隔", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) @@ -70,7 +70,7 @@ public class CollectUserActDataController { } @PostMapping("/addFavorite") - @ApiOperation(value = "记录搜索次数") + @ApiOperation(value = "记录收藏次数") @ApiImplicitParams({ @ApiImplicitParam(name = "favoriteType", value = "收藏类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), @@ -82,7 +82,7 @@ public class CollectUserActDataController { } @PostMapping("/addWatcher") - @ApiOperation(value = "记录搜索次数") + @ApiOperation(value = "记录关注次数") @ApiImplicitParams({ @ApiImplicitParam(name = "favoriteType", value = "关注类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 7e3af6666..aa75ecb93 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -290,4 +290,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by DATE_FORMAT(create_time, '%Y-%m-%d') order by DATE_FORMAT(create_time, '%Y-%m-%d') + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java index de51925f3..243e6cc39 100644 --- a/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java +++ b/microservices-modules/microservices-modules-file/src/main/java/com/microservices/file/service/impl/SysFileInfoServiceImpl.java @@ -402,6 +402,13 @@ public class SysFileInfoServiceImpl implements ISysFileInfoService { isCommonFileType = false; break; } + case "dms": { + // 项目管理下需生成唯一标识,防止用户通过id递增访问 + sysFileInfo.setFileIdentifier(genFileIdentifier()); + baseFilePath += "/" + fileType + "/"; + isCommonFileType = false; + break; + } case "resource": { baseFilePath += "/" + fileType + "/"; isCommonFileType = false; From cb286fa3f0890debcda5fdaaeaf269085dbdfe69 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 18 Apr 2025 16:18:17 +0800 Subject: [PATCH 234/270] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=94=BB=E5=83=8F?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6=E3=80=81=E4=B8=93=E5=AE=B6?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=BA=93=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 13 ++- .../achievementLibrary/domain/KeyValueVo.java | 9 -- .../service/IAchievementsService.java | 2 + .../service/impl/AchievementsServiceImpl.java | 21 +++++ .../controller/BehaviorImageController.java | 35 +++++++ .../domain/AchievementBehaviorSumVo.java | 49 ++++++++++ .../domain/AchievementImageVo.java | 25 +++++ .../behaviorImage/domain/BehaviorContant.java | 34 +++++++ .../domain/BehaviorImageWeight.java | 68 ++++++++++++++ .../mapper/BehaviorImageMapper.java | 27 ++++++ .../service/IBehaviorImageService.java | 7 ++ .../impl/BehaviorImageServiceImpl.java | 92 +++++++++++++++++++ .../ExpertResourceLibraryController.java | 22 +++++ .../domain/ExpertResourceLibrary.java | 20 ++++ .../mapper/ExpertResourceLibraryMapper.java | 12 +++ .../IExpertResourceLibraryService.java | 6 ++ .../ExpertResourceLibraryServiceImpl.java | 15 +++ .../mapper/dms/BehaviorImageMapper.xml | 45 +++++++++ .../dms/ExpertResourceLibraryMapper.xml | 52 +++++++++-- 19 files changed, 536 insertions(+), 18 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementBehaviorSumVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementImageVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorContant.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorImageWeight.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index 0737ceb4a..b187c3951 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -134,8 +134,9 @@ public class AchievementsController extends BaseController { */ @ApiOperation("获取全部成果,根据成果名称、成果领域、成果来源进行查询") @GetMapping("/getAllResult") - public AjaxResult getAllResult(@RequestBody AchQueryVo achQueryVo) { - return success(achievementsService.getAllResult(achQueryVo)); + public TableDataInfo getAllResult(AchQueryVo achQueryVo) { + startPage(); + return getDataTable(achievementsService.getAllResult(achQueryVo)); } @ApiOperation("近七日用户行为数据") @@ -152,7 +153,7 @@ public class AchievementsController extends BaseController { @ApiOperation("七日新增") @GetMapping("/get7DayAdd") - public AjaxResult get7DayAdd(@RequestBody AchQueryVo achQueryVo) { + public AjaxResult get7DayAdd(AchQueryVo achQueryVo) { return success(achievementsService.get7DayAdd(achQueryVo)); } @@ -180,4 +181,10 @@ public class AchievementsController extends BaseController { public AjaxResult indexSchoolEnterpriseStatistic() { return success(achievementsService.indexSchoolEnterpriseStatistic()); } + + @ApiOperation("首页专家统计") + @GetMapping("/indexExpertStatistic") + public AjaxResult indexExpertStatistic() { + return success(achievementsService.indexExpertStatistic()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java index 6651f2447..c046c27c4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java @@ -5,15 +5,6 @@ public class KeyValueVo { private String name; private String result; private Long value; - private Long value2; - - public Long getValue2() { - return value2; - } - - public void setValue2(Long value2) { - this.value2 = value2; - } public String getName() { return name; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 0cc1f1704..4a7ecc0df 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -88,4 +88,6 @@ public interface IAchievementsService { Map indexCompetitionStatistic(); Map indexSchoolEnterpriseStatistic(); + + Map indexExpertStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index cec9a5524..a6f43f653 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -13,6 +13,7 @@ import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.achievementLibrary.service.ISchoolEnterpriseAchievementsService; import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -37,8 +38,12 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private TaskResourceLibraryMapper taskResourceLibraryMapper; + @Autowired private ISchoolEnterpriseAchievementsService schoolEnterpriseAchievementsService; + @Autowired + private ExpertResourceLibraryMapper expertResourceLibraryMapper; + /** * 查询成果 @@ -259,4 +264,20 @@ public class AchievementsServiceImpl implements IAchievementsService { res.put("clickCount", clickCount); return res; } + + @Override + public Map indexExpertStatistic() { + Map res = new HashMap<>(); + Long expertResourceCount = expertResourceLibraryMapper.expertResourceCount(); + res.put("expertResourceCount", expertResourceCount); + Long auditTaskAuditExpertCount = expertResourceLibraryMapper.auditTaskAuditExpertCount(); + res.put("auditTaskAuditExpertCount", auditTaskAuditExpertCount); + Long auditCompetitionAuditExpertCount = expertResourceLibraryMapper.auditCompetitionAuditExpertCount(); + res.put("auditCompetitionAuditExpertCount", auditCompetitionAuditExpertCount); + Clicker clicker = new Clicker(); + clicker.setClickType("Experts"); + long clickCount = taskResourceLibraryMapper.countClicker(clicker); + res.put("clickCount", clickCount); + return res; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java new file mode 100644 index 000000000..dcfbf8be1 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java @@ -0,0 +1,35 @@ +package com.microservices.dms.behaviorImage.controller; + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.dms.behaviorImage.service.IBehaviorImageService; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 成果画像Controller + * + * @author microservices + * @date 2025-04-17 + */ +@RestController +@RequestMapping("/behaviorImage") +@Api(tags = "数据管理体系-画像接口") +public class BehaviorImageController { + + @Autowired + private IBehaviorImageService behaviorImageService; + /** + * 根据成果ID,获取对应的成果画像 + */ + //@RequiresPermissions("dms:achievements:query") + @GetMapping(value = "/achievementImage") + public AjaxResult getAchievementImageById(@PathVariable("id") Long id) + { + return AjaxResult.success(behaviorImageService.getAchievementImageById(id)); + } + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementBehaviorSumVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementBehaviorSumVo.java new file mode 100644 index 000000000..d60d9cf68 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementBehaviorSumVo.java @@ -0,0 +1,49 @@ +package com.microservices.dms.behaviorImage.domain; + +public class AchievementBehaviorSumVo { + private Long clickSum; + private Long watchSum; + private Long searchSum; + private Long favoriteSum; + private Long downloadSum; + + public Long getClickSum() { + return clickSum; + } + + public void setClickSum(Long clickSum) { + this.clickSum = clickSum; + } + + public Long getWatchSum() { + return watchSum; + } + + public void setWatchSum(Long watchSum) { + this.watchSum = watchSum; + } + + public Long getSearchSum() { + return searchSum; + } + + public void setSearchSum(Long searchSum) { + this.searchSum = searchSum; + } + + public Long getFavoriteSum() { + return favoriteSum; + } + + public void setFavoriteSum(Long favoriteSum) { + this.favoriteSum = favoriteSum; + } + + public Long getDownloadSum() { + return downloadSum; + } + + public void setDownloadSum(Long downloadSum) { + this.downloadSum = downloadSum; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementImageVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementImageVo.java new file mode 100644 index 000000000..0fa191a60 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/AchievementImageVo.java @@ -0,0 +1,25 @@ +package com.microservices.dms.behaviorImage.domain; + +/** + * 成果画像结果 + */ +public class AchievementImageVo { + private Long id; + private float score; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public float getScore() { + return score; + } + + public void setScore(float score) { + this.score = score; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorContant.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorContant.java new file mode 100644 index 000000000..911323b31 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorContant.java @@ -0,0 +1,34 @@ +package com.microservices.dms.behaviorImage.domain; + +public class BehaviorContant { + /** + * 成果画像 + */ + public final static String ACHIEVEMENTS_IMAGE = "Achievements"; + + /** + * 点击行为 + */ + public final static String CLICK_BEHAVIOR = "click"; + /** + * 收藏行为 + */ + public final static String FAVORITE_BEHAVIOR = "favorite"; + /** + * 搜索行为 + */ + public final static String SEARCH_BEHAVIOR = "search"; + /** + * 关注行为 + */ + public final static String WATCH_BEHAVIOR = "watch"; + /** + * 附件下载行为 + */ + public final static String FILE_DOWNLOAD_BEHAVIOR = "file_download"; + + + + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorImageWeight.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorImageWeight.java new file mode 100644 index 000000000..30e8d6470 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/BehaviorImageWeight.java @@ -0,0 +1,68 @@ +package com.microservices.dms.behaviorImage.domain; + +import com.microservices.common.core.annotation.Excel; +import com.microservices.common.core.web.domain.BaseEntity; + +public class BehaviorImageWeight extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 画像权重唯一标识 */ + private Long id; + + /** 行为编码 */ + @Excel(name = "行为编码") + private String behaviorCode; + + /** 画像分类 */ + @Excel(name = "画像分类") + private String imageType; + + /** 行为名称 */ + @Excel(name = "行为名称") + private String behaviorName; + + /** 行为权重*/ + @Excel(name = "行为权重") + private Long behavioWeight; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getBehaviorCode() { + return behaviorCode; + } + + public void setBehaviorCode(String behaviorCode) { + this.behaviorCode = behaviorCode; + } + + public String getImageType() { + return imageType; + } + + public void setImageType(String imageType) { + this.imageType = imageType; + } + + public String getBehaviorName() { + return behaviorName; + } + + public void setBehaviorName(String behaviorName) { + this.behaviorName = behaviorName; + } + + public Long getBehavioWeight() { + return behavioWeight; + } + + public void setBehavioWeight(Long behavioWeight) { + this.behavioWeight = behavioWeight; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java new file mode 100644 index 000000000..2815fd4da --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java @@ -0,0 +1,27 @@ +package com.microservices.dms.behaviorImage.mapper; + +import com.microservices.common.datasource.annotation.Slave; +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +@Slave +public interface BehaviorImageMapper { + AchievementBehaviorSumVo getBehaviorSumListByType(); + + List getWeightListByType(@Param("achievementsImage") String achievementsImage); + + Long getFavoriteSumByAchievementId(@Param("id") Long id,@Param("achievementsImage") String achievementsImage); + + Long getSearchSumByAchievementId(@Param("id") Long id,@Param("achievementsImage") String achievementsImage); + + Long getWatchSumByAchievementId(@Param("id") Long id,@Param("achievementsImage") String achievementsImage); + + Long getFileDownloadSumByAchievementId(@Param("id") Long id,@Param("achievementsImage") String achievementsImage); + + Long getClickSumByAchievementId(@Param("id") Long id, @Param("achievementsImage") String achievementsImage); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java new file mode 100644 index 000000000..e6e02c368 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java @@ -0,0 +1,7 @@ +package com.microservices.dms.behaviorImage.service; + +import com.microservices.dms.behaviorImage.domain.AchievementImageVo; + +public interface IBehaviorImageService { + AchievementImageVo getAchievementImageById(Long id); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java new file mode 100644 index 000000000..174b6e2c6 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java @@ -0,0 +1,92 @@ +package com.microservices.dms.behaviorImage.service.impl; + +import com.microservices.common.core.utils.StringUtils; +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; +import com.microservices.dms.behaviorImage.domain.AchievementImageVo; +import com.microservices.dms.behaviorImage.domain.BehaviorContant; +import com.microservices.dms.behaviorImage.mapper.BehaviorImageMapper; +import com.microservices.dms.behaviorImage.service.IBehaviorImageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BehaviorImageServiceImpl implements IBehaviorImageService { + @Autowired + private BehaviorImageMapper behaviorImageMapper; + @Override + public AchievementImageVo getAchievementImageById(Long id) { + AchievementImageVo achievementImageVo = new AchievementImageVo(); + //获取所有行为汇总数据 + AchievementBehaviorSumVo achievementBehaviorSumVo = behaviorImageMapper.getBehaviorSumListByType(); + if(StringUtils.isNotNull(achievementBehaviorSumVo)) { + float score = 0f; + //从行为表中获取成果行为数据权限 + List behaviorImageWeightList = behaviorImageMapper.getWeightListByType(BehaviorContant.ACHIEVEMENTS_IMAGE); + float clickResult = 0L; + float watchResult = 0L; + float searchResult = 0L; + float favoriteResult = 0L; + float fileDownloadResult = 0L; + //简单算法 + for (KeyValueVo keyValueVo : behaviorImageWeightList) { + String bhavior = keyValueVo.getKey(); + Long weight = keyValueVo.getValue(); + if (bhavior.equals(BehaviorContant.CLICK_BEHAVIOR)) {//点击 + //根据当前成果ID,获取成果点击行为数量 + Long clickSum = achievementBehaviorSumVo.getClickSum(); + if(StringUtils.isNotNull(clickSum)) { + Long click = behaviorImageMapper.getClickSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); + if (StringUtils.isNotNull(click)) { + clickResult = click / clickResult *weight; + } + } + } else if (bhavior.equals(BehaviorContant.FAVORITE_BEHAVIOR)) {//收藏 + //根据当前成果ID,获取成果收藏行为数量 + Long favoriteSum = achievementBehaviorSumVo.getFavoriteSum(); + if(StringUtils.isNotNull(favoriteSum)) { + Long favorite = behaviorImageMapper.getFavoriteSumByAchievementId(id,BehaviorContant.ACHIEVEMENTS_IMAGE); + if (StringUtils.isNotNull(favorite)) { + favoriteResult = favorite / favoriteSum *weight; + } + } + } else if (bhavior.equals(BehaviorContant.SEARCH_BEHAVIOR)) {//搜索 + //根据当前成果ID,获取成果搜索行为数量 + Long searchSum = achievementBehaviorSumVo.getSearchSum(); + if(StringUtils.isNotNull(searchSum)) { + Long search = behaviorImageMapper.getSearchSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); + if (StringUtils.isNotNull(search)) { + searchResult = search / searchSum *weight; + } + } + } else if (bhavior.equals(BehaviorContant.WATCH_BEHAVIOR)) {//关注 + //根据当前成果ID,获取成果关注行为数量 + Long watchSum = achievementBehaviorSumVo.getFavoriteSum(); + if(StringUtils.isNotNull( watchSum)) { + Long watch = behaviorImageMapper.getWatchSumByAchievementId(id,BehaviorContant.ACHIEVEMENTS_IMAGE); + if (StringUtils.isNotNull( watch)) { + watchResult = watch / watchSum *weight; + } + } + } else if (bhavior.equals(BehaviorContant.FILE_DOWNLOAD_BEHAVIOR)) {//文件下载 + //根据当前成果ID,获取成果文件下载行为数量 + Long fileDownloadSum = achievementBehaviorSumVo.getFavoriteSum(); + if(StringUtils.isNotNull(fileDownloadSum)) { + Long fileDownload = behaviorImageMapper.getFileDownloadSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); + if (StringUtils.isNotNull(fileDownload)) { + fileDownloadResult = fileDownload / fileDownload *weight; + } + } + } + } + + score = clickResult+watchResult+searchResult+favoriteResult+fileDownloadResult; + achievementImageVo.setScore(score); + } + return achievementImageVo; + } + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java index 3589c2c20..5bf6cae56 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java @@ -9,6 +9,7 @@ import com.microservices.common.log.enums.BusinessType; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -102,4 +103,25 @@ public class ExpertResourceLibraryController extends BaseController { return toAjax(expertResourceLibraryService.deleteExpertResourceLibraryByIds(ids)); } + + @ApiOperation(value = "评审专家数") + @GetMapping("/auditExpertCount") + public AjaxResult auditExpertCount() + { + return AjaxResult.success(expertResourceLibraryService.auditExpertCount()); + } + + @ApiOperation(value = "竞赛评审数") + @GetMapping("/competitionAuditCount") + public AjaxResult competitionAuditCount() + { + return AjaxResult.success(expertResourceLibraryService.competitionAuditCount()); + } + + @ApiOperation(value = "任务评审数") + @GetMapping("/taskAuditCount") + public AjaxResult taskAuditCount() + { + return AjaxResult.success(expertResourceLibraryService.taskAuditCount()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 13051943b..04055bb61 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -61,6 +61,26 @@ public class ExpertResourceLibrary extends BaseEntity { private Integer sortNo; + private Long taskAuditCount; + + private Long competitionAuditCount; + + public Long getTaskAuditCount() { + return taskAuditCount; + } + + public void setTaskAuditCount(Long taskAuditCount) { + this.taskAuditCount = taskAuditCount; + } + + public Long getCompetitionAuditCount() { + return competitionAuditCount; + } + + public void setCompetitionAuditCount(Long competitionAuditCount) { + this.competitionAuditCount = competitionAuditCount; + } + public Integer getSortNo() { return sortNo; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java index e56e3a185..bf628fe4d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -62,4 +62,16 @@ public interface ExpertResourceLibraryMapper public int deleteExpertResourceLibraryByIds(Long[] ids); List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary); + + Long auditExpertCount(); + + Long competitionAuditCount(); + + Long taskAuditCount(); + + Long expertResourceCount(); + + Long auditTaskAuditExpertCount(); + + Long auditCompetitionAuditExpertCount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java index d739211b7..07b0be4ca 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java @@ -60,4 +60,10 @@ public interface IExpertResourceLibraryService public int deleteExpertResourceLibraryById(Long id); List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary); + + Long auditExpertCount(); + + Long competitionAuditCount(); + + Long taskAuditCount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index 34b289e1d..5ea8b2309 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -57,6 +57,21 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS return expertResourceLibraryMapper.selectExpertResourceLibraryList2(expertResourceLibrary); } + @Override + public Long auditExpertCount() { + return expertResourceLibraryMapper.auditExpertCount(); + } + + @Override + public Long competitionAuditCount() { + return expertResourceLibraryMapper.competitionAuditCount(); + } + + @Override + public Long taskAuditCount() { + return expertResourceLibraryMapper.taskAuditCount(); + } + /** * 新增专家资源库 * diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml new file mode 100644 index 000000000..048b7ab5d --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index af46a46ba..608508453 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -39,13 +39,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id, user_id,expert_id,sort_no, expert_name, highest_degree, graduated_from, id_number, major, workplace, phone, workplace_type, expert_email, expert_summary, expert_detail, professional_title, expert_type, expert_domain, title_rank, status, review_area_one, review_area_two, review_area_three, is_delete, create_by, create_time, update_by, update_time from expert_resource_library - + select * from ( select erl.id, e.id as expert_id,e.user_id, e.expert_name, e.highest_degree, e.graduated_from, e.id_number, e.major, e.workplace, e.phone, e.workplace_type, e.expert_email, erl.expert_summary, erl.expert_detail, e.professional_title, e.expert_type, expert_domain, e.title_rank, e.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, erl.create_time, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1) as taskAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2) as competitionAuditCount, erl.update_by, erl.update_time,erl.sort_no from experts e left join expert_resource_library erl on e.id = erl.user_id @@ -74,7 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and review_area_three = #{reviewAreaThree} and is_delete = #{isDelete} - + ) tmp where tmp.taskAuditCount > 0 OR tmp.competitionAuditCount > 0 - + + + + + + + + + insert into expert_resource_library @@ -221,7 +261,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from expert_resource_library where id in + delete from expert_resource_library where id in #{id} From 7d266a41cd0b3fe5edf275ab815521a0cec8371c Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 21 Apr 2025 14:50:58 +0800 Subject: [PATCH 235/270] =?UTF-8?q?feat(=E6=88=90=E6=9E=9C=E8=AF=A6?= =?UTF-8?q?=E6=83=85)=20=E6=88=90=E6=9E=9C=E8=AF=A6=E6=83=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 40 +++++-- .../domain/Achievements.java | 2 +- .../achievementLibrary/domain/KeyValueVo.java | 9 ++ .../mapper/AchievementsMapper.java | 11 +- .../service/IAchievementsService.java | 11 +- .../service/impl/AchievementsServiceImpl.java | 33 ++++-- .../controller/BehaviorImageController.java | 2 + .../domain/CompetitionResourceLibrary.java | 81 ++++++++++---- .../domain/ExpertResourceLibrary.java | 33 +++--- .../domain/ProjectResourceLibrary.java | 21 ++++ .../domain/TaskResourceLibrary.java | 29 +++-- .../mapper/dms/AchievementsMapper.xml | 102 +++++++++++++----- .../dms/CompetitionResourceLibraryMapper.xml | 2 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 4 +- 14 files changed, 279 insertions(+), 101 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index b187c3951..bb735eeb2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -40,16 +40,6 @@ public class AchievementsController extends BaseController { return getDataTable(list); } - /** - * 查询成果列表 - */ - @GetMapping("/frontList") - public TableDataInfo frontList(Achievements achievements) { - startPage(); - List list = achievementsService.selectAchievementsFrontList(achievements); - return getDataTable(list); - } - /** * 导出成果列表 */ @@ -123,12 +113,21 @@ public class AchievementsController extends BaseController { * * @return */ - @ApiOperation("根据成果领域对成功数据进行汇总") + @ApiOperation("根据成果领域对成果数据进行汇总") @GetMapping("/getTjByAreas") public AjaxResult getTjByAreas() { return success(achievementsService.getTjByAreas()); } + /** + * 根据领域分类名称,获取领域相关数据 + */ + @ApiOperation("根据领域分类名称,获取领域相关数据") + @GetMapping("/getAreasByName") + public AjaxResult getAreasByName(String areaName) { + return success(achievementsService.getAreasByName(areaName)); + } + /* 获取全部成果,根据成果名称、成果领域、成果来源进行查询 * @return */ @@ -182,9 +181,28 @@ public class AchievementsController extends BaseController { return success(achievementsService.indexSchoolEnterpriseStatistic()); } + @ApiOperation("首页专家统计") @GetMapping("/indexExpertStatistic") public AjaxResult indexExpertStatistic() { return success(achievementsService.indexExpertStatistic()); } + + + @ApiOperation("根据当前用户以及成果ID,获取当前成果的 是否收藏与关注状态") + @GetMapping("/getWatchFavoriteStatusById") + public AjaxResult getWatchFavoriteStatusById(String id, Long userId) { + return success(achievementsService.getWatchFavoriteStatusById(id, userId)); + } + @ApiOperation("根据成果ID,获取近7日成果点击数量(折线图)") + @GetMapping("/get7AddClickById") + public AjaxResult get7AddClickById(String id) { + return success(achievementsService.get7AddClickById(id)); + } + + @ApiOperation("根据成果ID,获取成果的相关行为数据统计(点击量、搜索量、附件下载量、收藏、关注)") + @GetMapping("/getActDataStatisticById") + public AjaxResult getActDataStatisticById(String id) { + return success(achievementsService.getActDataStatisticById(id)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java index b31ed4876..a1ccbdc78 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -11,7 +11,7 @@ import com.microservices.common.core.annotation.Excel; import com.microservices.common.core.web.domain.BaseEntity; /** - * 成果对象 achievements + * 成果对象 achievementsll * * @author microservices * @date 2025-04-02 diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java index c046c27c4..6651f2447 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/KeyValueVo.java @@ -5,6 +5,15 @@ public class KeyValueVo { private String name; private String result; private Long value; + private Long value2; + + public Long getValue2() { + return value2; + } + + public void setValue2(Long value2) { + this.value2 = value2; + } public String getName() { return name; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 8abd0dbcc..495f79ffa 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -10,6 +10,7 @@ import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Mapper; @@ -92,7 +93,7 @@ public interface AchievementsMapper { List> getAchievement(@Param("s") Date s, @Param("e") Date e, @Param("t") String source); - List getHotAchievement(); + List> getHotAchievement(); Map indexProjectStatistic(); @@ -101,4 +102,12 @@ public interface AchievementsMapper { Map indexCompetitionStatistic(); Long indexSchoolEnterpriseStatistic(@Param("s") String s, @Param("t") String tags); + + List getAreasByName(@Param("areaName") String areaName); + + AchievementBehaviorSumVo getActDataStatisticById(@Param("id") String id); + + List> get7AddClickById(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements, @Param("id") String id); + + AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") String id, @Param("userId")Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 4a7ecc0df..340b3d2a2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -6,6 +6,7 @@ import java.util.Map; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; /** @@ -77,7 +78,7 @@ public interface IAchievementsService { Map getUerActionData(); - List getHotAchievement(); + List> getHotAchievement(); List> get7DayAdd(AchQueryVo achQueryVo); @@ -90,4 +91,12 @@ public interface IAchievementsService { Map indexSchoolEnterpriseStatistic(); Map indexExpertStatistic(); + + List getAreasByName(String areaName); + + AchievementBehaviorSumVo getActDataStatisticById(String id); + + List> get7AddClickById(String id); + + AchievementBehaviorSumVo getWatchFavoriteStatusById(String id, Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index a6f43f653..7a17fb3dd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -3,26 +3,21 @@ package com.microservices.dms.achievementLibrary.service.impl; import java.util.*; import java.util.stream.Collectors; -import com.alibaba.fastjson2.JSONArray; -import com.alibaba.fastjson2.JSONObject; import com.microservices.common.core.utils.DateUtils; -import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; -import com.microservices.dms.achievementLibrary.service.ISchoolEnterpriseAchievementsService; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory; import org.springframework.stereotype.Service; import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.service.IAchievementsService; -import org.springframework.util.CollectionUtils; /** * 成果Service业务层处理 @@ -38,9 +33,6 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private TaskResourceLibraryMapper taskResourceLibraryMapper; - @Autowired - private ISchoolEnterpriseAchievementsService schoolEnterpriseAchievementsService; - @Autowired private ExpertResourceLibraryMapper expertResourceLibraryMapper; @@ -206,7 +198,7 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public List getHotAchievement() { + public List> getHotAchievement() { return achievementsMapper.getHotAchievement(); } @@ -280,4 +272,25 @@ public class AchievementsServiceImpl implements IAchievementsService { res.put("clickCount", clickCount); return res; } + + @Override + public List getAreasByName(String areaName) { + return achievementsMapper.getAreasByName(areaName); + } + + @Override + public AchievementBehaviorSumVo getActDataStatisticById(String id) { + return achievementsMapper.getActDataStatisticById(id); + } + + @Override + public List> get7AddClickById(String id) { + Date[] days = DateUtil.getDays(1, 7); + return achievementsMapper.get7AddClickById(days[0], days[1], "Achievements",id); + } + + @Override + public AchievementBehaviorSumVo getWatchFavoriteStatusById(String id, Long userId) { + return achievementsMapper.getWatchFavoriteStatusById(id,userId); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java index dcfbf8be1..4be6a1b71 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java @@ -3,6 +3,7 @@ package com.microservices.dms.behaviorImage.controller; import com.microservices.common.core.web.domain.AjaxResult; import com.microservices.dms.behaviorImage.service.IBehaviorImageService; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -26,6 +27,7 @@ public class BehaviorImageController { * 根据成果ID,获取对应的成果画像 */ //@RequiresPermissions("dms:achievements:query") + @ApiOperation(value = "根据成果ID,获取对应的成果画像") @GetMapping(value = "/achievementImage") public AjaxResult getAchievementImageById(@PathVariable("id") Long id) { diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java index d825a6e7f..ddf23aacd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java @@ -14,47 +14,86 @@ import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; public class CompetitionResourceLibrary extends BaseEntity { private static final long serialVersionUID = 1L; - private Long id; - + /** + * 开放竞赛ID + */ private Long openCompetitionId; - + /** + * 开放竞赛名称 + */ private String openCompetitionName; - + /** + * 开放竞赛创建者 + */ private Long competitionUserId; - + /** + * 竞赛领域 + */ private String competitionField; - + /** + * 竞赛状态 0进行中 1已结束 + */ private String competitionStatus; - + /** + * 竞赛提交名称 + */ private String competitionSubmissionName; - + /** + * 作品提交时间 + */ private Date submissionTime; - + /** + * 提交者 + */ private String submitter; - + /** + * 提交类型 + */ private String submissionType; - + /** + * 提交单位 + */ private String submittingUnit; - + /** + * 竞赛提交摘要 + */ private String submissionSummary; - + /** + * 竞赛提交详情 + */ private String submissionDetails; - + /** + * 联系人 + */ private String contactPerson; - + /** + * 联系电话 + */ private String contactPhone; - + /** + * 是否已转入成果库 0否 1是 + */ private Integer isTransferredToResultLibrary; - + /** + * 转入成果库时间 + */ private Date transferredToResultLibraryTime; - + /** + * 是否精选成果 + */ private Integer isFeaturedResult; - + /** + * 图片 + */ private String image; - + /** + * 专家审核 + */ private Integer isExpertAudit; - + /** + * 附件 + */ private String attachment; private List> attachmentList = new ArrayList<>(); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 04055bb61..777d244d9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -14,51 +14,52 @@ import com.microservices.common.core.web.domain.BaseEntity; public class ExpertResourceLibrary extends BaseEntity { private static final long serialVersionUID = 1L; - private Long id; - - private Long userId; private Long expertId; - + private Long id; + //专家ID + private Long userId; + //专家名称 private String expertName; - + //最高学历 private String highestDegree; - + //毕业院校 private String graduatedFrom; - + //身份证 private String idNumber; private String major; - + //工作单位 private String workplace; - + //电话 private String phone; private String workplaceType; - + //邮箱 private String expertEmail; - + //专家简介 private String expertSummary; - + //专家详情 private String expertDetail; private String professionalTitle; private String expertType; - + //专家领域 private String expertDomain; private String titleRank; private Long status; - + //评审领域1 private String reviewAreaOne; - + //评审领域2 private String reviewAreaTwo; - + //评审领域3 private String reviewAreaThree; private Integer isDelete; + private Integer sortNo; private Long taskAuditCount; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java index e8a15f585..e5cb23970 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -17,28 +17,49 @@ import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; public class ProjectResourceLibrary extends BaseEntity { private static final long serialVersionUID = 1L; private Long id; + //项目资源名称 private String projectName; + //项目领域 private String projectDomain; + // private String identifier; + //开源项目ID private Long projectId; + //仓库ID private Long repositoryId; + //版本Id private Long versionReleasesId; + //项目是否已公开 private Long isPublic; + //发版名称 private String releaseName; + //发版时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date releaseDate; + //发版人 private String releasePerson; + //发版类型 private String releaseType; + //发版单位 private String releaseUnit; + //发版摘要 private String releaseSummary; + //发版详情 private String releaseDetails; + //联系人 private String contactPerson; + //联系时间 private String contactPhone; + //是否已转入成果库 private Long isTransferredToAchievement; + //转入成果库时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date transferDate; + //是否精选成果 private Long isSelectedAchievement; + //图片 private String images; + //附件 private String attachments; private List> attachmentList = new ArrayList<>(); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java index b1fe815f3..3ab5a6a0e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/TaskResourceLibrary.java @@ -18,35 +18,48 @@ import com.microservices.common.core.web.domain.BaseEntity; public class TaskResourceLibrary extends BaseEntity { private static final long serialVersionUID = 1L; + // private Long id; - + //创客任务ID private Long taskId; - + // private Long paperId; - + //创客任务名称 private String taskName; - + //任务领域 private String taskDomain; - + //创客任务金额 private BigDecimal taskAmount; - + //胜出交稿名称 private String submissionName; - + //交稿时间 private Date submissionDate; - + //交稿人 private String submitterName; + //交稿类型 private String submissionType; + //交稿单位 private String submissionOrganization; + //交稿摘要 private String submissionSummary; + //交稿详情 private String releaseDetails; + //联系人 private String contactName; + //联系电话 private String contactPhone; + //是否已转入成果库 private Long isTransferredToResultsLibrary; + //转入成果库时间 private Date transferToResultsDate; + //是否精选成果 0否 1是 private Long isSelectedResult; + //图片 private String imageUrl; + //附件 private String attachmentUrl; private List> attachmentList; + //专家审核 private Integer expertReview; public Integer getExpertReview() { diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index aa75ecb93..44d4f5797 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -216,24 +216,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + select t.achievement_name as name, t.w as watcher, t.f as faviter, (t.w + t.f) as total, t.id as `id`,t.owner_name + as userName from (select a.achievement_name, - a.id, + a.id,a.owner_name, (select IFNULL(count(*), 0) from favorites where favorite_type = '' and favorite_id = a.id) as f, (select IFNULL(count(*), 0) from watchers where watchable_type = '' and watchable_id = a.id) as w from achievements a) as t - order by result + order by total limit 0,3 @@ -323,4 +327,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and tags = #{t}; + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index bb97335e0..21620b9dc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -126,7 +126,7 @@ ci.id as open_competition_id, ci.title as open_competition_name, cu.id as competition_user_id, - cu.sub_competition as competition_field, + competition_field, ci.status as competition_status, cu.works_name as competition_submission_name, cu.created_at as submission_time, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 45b2fbff9..81f57147d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -434,9 +434,9 @@ t.name as task_name, t.category_id as task_domain, t.bounty as task_amount, - (select IFNULL(u.lastname,u.login) from users u where u.id = p.user_id) as submission_name, + (select u.login from users u where u.id = p.user_id) as submission_name, p.created_at as submission_date, - (select IFNULL(u.lastname,u.login) from users u where u.id = p.user_id) as submitter_name, + (select u.login from users u where u.id = p.user_id) as submitter_name, submission_type, submission_organization, pd.content as submission_summary, From 447f744647a5b62268b9c7ea3d48f0200583548b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 22 Apr 2025 16:42:41 +0800 Subject: [PATCH 236/270] =?UTF-8?q?feat(=E5=A4=A7=E5=B1=8FV1)=20=E5=A4=A7?= =?UTF-8?q?=E5=B1=8FV1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BigScreenStatisticController.java | 66 ++++++++++++++++ .../domain/Achievements.java | 10 ++- .../mapper/AchievementsMapper.java | 16 ++++ .../service/BigScreenStatisticService.java | 75 ++++++++++++++++++ .../service/impl/AchievementsServiceImpl.java | 18 +++++ .../CollectUserActDataController.java | 38 ++++++--- .../mapper/ExpertResourceLibraryMapper.java | 3 + .../mapper/TaskResourceLibraryMapper.java | 4 + .../service/TaskResourceLibraryService.java | 8 ++ .../mapper/dms/AchievementsMapper.xml | 79 ++++++++++++++++++- .../mapper/dms/TaskResourceLibraryMapper.xml | 23 +++++- 11 files changed, 324 insertions(+), 16 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java new file mode 100644 index 000000000..7cd6a1c17 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java @@ -0,0 +1,66 @@ +package com.microservices.dms.achievementLibrary.controller; + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.dms.achievementLibrary.service.BigScreenStatisticService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "数据管理体系-大屏统计接口") +public class BigScreenStatisticController { + + private final BigScreenStatisticService bigScreenStatisticService; + + + @GetMapping(value = "getAchievementTopStatistic") + @ApiOperation(value = "成果任务统计顶部折线图") + public AjaxResult getAchievementTopStatistic(String source) { + return AjaxResult.success(bigScreenStatisticService.getAchievementTopStatistic(source)); + } + + @GetMapping(value = "getAchievementDataYearly") + @ApiOperation(value = "年度成果数据") + public AjaxResult getAchievementDataYearly() { + return AjaxResult.success(bigScreenStatisticService.getAchievementDataYearly()); + } + + + @GetMapping(value = "getAchievementType") + @ApiOperation(value = "成果类型") + public AjaxResult getAchievementType() { + return AjaxResult.success(bigScreenStatisticService.getAchievementType()); + } + + + @GetMapping(value = "getAchievementDomain") + @ApiOperation(value = "成果领域分布") + public AjaxResult getAchievementDomain() { + return AjaxResult.success(bigScreenStatisticService.getAchievementDomain()); + } + + + @GetMapping(value = "getAchievementAddYearly") + @ApiOperation(value = "近1年新增成果数") + public AjaxResult getAchievementAddYearly() { + return AjaxResult.success(bigScreenStatisticService.getAchievementAddYearly()); + } + + @GetMapping(value = "getAchievementActData") + @ApiOperation(value = "成果行为数据展示") + public AjaxResult getAchievementActData() { + return AjaxResult.success(bigScreenStatisticService.getAchievementActData()); + } + + @GetMapping(value = "getAchievementHotRank") + @ApiOperation(value = "成果热度排行") + public AjaxResult getAchievementHotRank() { + return AjaxResult.success(bigScreenStatisticService.getAchievementHotRank()); + } + + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java index a1ccbdc78..8c7156836 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -170,10 +170,18 @@ public class Achievements extends BaseEntity { private String attachments; private Long clickSum; - + private Float hotRank; private Long attachmentCount; private Integer isExpertAudit; + public Float getHotRank() { + return hotRank; + } + + public void setHotRank(Float hotRank) { + this.hotRank = hotRank; + } + public Integer getIsExpertAudit() { return isExpertAudit; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 495f79ffa..27570e3dd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -110,4 +110,20 @@ public interface AchievementsMapper { List> get7AddClickById(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements, @Param("id") String id); AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") String id, @Param("userId")Long userId); + + Long countAchievementBySource(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements); + + List> getAchievementDataYearly(); + + List> getAchievementType(); + + List getAchievementActData(); + + List> getAchievementDomain(); + + List> getAchievementAddYearly(); + + List> getAchievementHotRank(); + + List getAllId(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java new file mode 100644 index 000000000..b809c66ea --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java @@ -0,0 +1,75 @@ +package com.microservices.dms.achievementLibrary.service; + +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import com.microservices.dms.utils.DateUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class BigScreenStatisticService { + + private final AchievementsMapper achievementsMapper; + + public Map getAchievementTopStatistic(String source) { + Date[] days = DateUtil.getDays(1, 7); + Map m = achievementsMapper.getAchievement(days[0], days[1], source) + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + List dateStr = DateUtil.getDateStr(days[0], days[1]); + Date[] lastDays = DateUtil.getDays(8, 14); + long lastSum = Optional.ofNullable(achievementsMapper.countAchievementBySource(lastDays[0], lastDays[1], source)).orElse(0L); + long sum = Optional.ofNullable(achievementsMapper.countAchievementBySource(null, null, source)).orElse(0L); + long cSum = m.values().stream().mapToLong(Long::longValue).sum(); + double rate; + if (lastSum == 0) rate = 100D; + else { + rate = (double) (cSum - lastSum) / lastSum * 100D; + } + + List> res = new ArrayList<>(); + for (String s : dateStr) { + Long a = m.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + res.add(k1); + } + + Map map = new HashMap<>(); + map.put("list", res); + map.put("sum", sum); + map.put("rate", rate); + return map; + } + + public List> getAchievementDataYearly() { + return achievementsMapper.getAchievementDataYearly(); + } + + public List> getAchievementType() { + return achievementsMapper.getAchievementType(); + } + + public Map> getAchievementActData() { + List list = achievementsMapper.getAchievementActData(); + Map> res = list.stream().collect(Collectors.groupingBy(KeyValueVo::getKey)); + return res; + } + + public List> getAchievementDomain() { + return achievementsMapper.getAchievementDomain(); + } + + public List> getAchievementAddYearly() { + return achievementsMapper.getAchievementAddYearly(); + } + + public List> getAchievementHotRank() { + return achievementsMapper.getAchievementHotRank(); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 7a17fb3dd..294840b03 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -8,6 +8,8 @@ import com.microservices.common.security.utils.SecurityUtils; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; +import com.microservices.dms.behaviorImage.domain.AchievementImageVo; +import com.microservices.dms.behaviorImage.service.IBehaviorImageService; import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; @@ -36,6 +38,9 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private ExpertResourceLibraryMapper expertResourceLibraryMapper; + @Autowired + private IBehaviorImageService behaviorImageService; + /** * 查询成果 @@ -293,4 +298,17 @@ public class AchievementsServiceImpl implements IAchievementsService { public AchievementBehaviorSumVo getWatchFavoriteStatusById(String id, Long userId) { return achievementsMapper.getWatchFavoriteStatusById(id,userId); } + + + public void timingCalcHotRank(){ + List ids = achievementsMapper.getAllId(); + for (Long id : ids) { + AchievementImageVo image = behaviorImageService.getAchievementImageById(id); + float score = image.getScore(); + Achievements u = new Achievements(); + u.setId(id); + u.setHotRank(score); + achievementsMapper.updateAchievements(u); + } + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java index 70c808736..2bdc19773 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/CollectUserActDataController.java @@ -9,9 +9,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -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.bind.annotation.*; @Api(tags = "数据管理体系-用户行为信息接口") @RestController @@ -29,7 +27,7 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) @ApiOperation(value = "记录点击次数") - public AjaxResult addTaskClick(Clicker clicker) { + public AjaxResult addTaskClick(@RequestBody Clicker clicker) { return AjaxResult.success(taskResourceLibraryService.addClick(clicker)); } @@ -41,7 +39,7 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) - public AjaxResult addDownloader(Downloader downloader) { + public AjaxResult addDownloader(@RequestBody Downloader downloader) { return AjaxResult.success(taskResourceLibraryService.addDownloader(downloader)); } @@ -53,7 +51,7 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) - public AjaxResult addSearcher(Searcher searcher) { + public AjaxResult addSearcher(@RequestBody Searcher searcher) { return AjaxResult.success(taskResourceLibraryService.addSearcher(searcher)); } @@ -65,7 +63,7 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) - public AjaxResult addSearcher2(Searcher searcher) { + public AjaxResult addSearcher2(@RequestBody Searcher searcher) { return AjaxResult.success(taskResourceLibraryService.addSearcher2(searcher)); } @@ -77,7 +75,7 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) - public AjaxResult addFavorite(Favorite favorite) { + public AjaxResult addFavorite(@RequestBody Favorite favorite) { return AjaxResult.success(taskResourceLibraryService.addFavorite(favorite)); } @@ -89,7 +87,29 @@ public class CollectUserActDataController { @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), @ApiImplicitParam(name = "extInfo", value = "补充信息", paramType = "query", dataTypeClass = String.class) }) - public AjaxResult addFavorite(Watcher watcher) { + public AjaxResult addFavorite(@RequestBody Watcher watcher) { return AjaxResult.success(taskResourceLibraryService.addWatcher(watcher)); } + + @DeleteMapping("/delFavorite") + @ApiOperation(value = "删除收藏次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "favoriteType", value = "收藏类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), + }) + public AjaxResult delFavorite(Favorite favorite) { + return AjaxResult.success(taskResourceLibraryService.delFavorite(favorite)); + } + + @DeleteMapping("/delWatcher") + @ApiOperation(value = "删除关注次数") + @ApiImplicitParams({ + @ApiImplicitParam(name = "favoriteType", value = "关注类型(成果:Achievements、专家:Experts)", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "favoriteId", value = "对象ID", paramType = "query", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "userId", value = "用户ID", paramType = "query", dataTypeClass = Integer.class), + }) + public AjaxResult delWatcher(Watcher watcher) { + return AjaxResult.success(taskResourceLibraryService.delWatcher(watcher)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java index bf628fe4d..f35773d10 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -1,6 +1,8 @@ package com.microservices.dms.resourceLibrary.mapper; import java.util.List; + +import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; import org.apache.ibatis.annotations.Mapper; @@ -11,6 +13,7 @@ import org.apache.ibatis.annotations.Mapper; * @date 2025-04-11 */ @Mapper +@Slave public interface ExpertResourceLibraryMapper { /** diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 032ee4ce4..77abcb7b8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -103,4 +103,8 @@ public interface TaskResourceLibraryMapper { int insertFavorite(Favorite favorite); int insertWatcher(Watcher watcher); + + int delFavorite(Favorite favorite); + + int delWatcher(Watcher watcher); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index faa2c74c7..570a41711 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -203,4 +203,12 @@ public class TaskResourceLibraryService { return split.length; } + + public int delFavorite(Favorite favorite) { + return taskResourceLibraryMapper.delFavorite(favorite); + } + + public int delWatcher(Watcher watcher) { + return taskResourceLibraryMapper.delWatcher(watcher); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 44d4f5797..be56bc08d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -36,10 +36,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select id, achievement_name, field_1, field_2, field_3, attachment_count,is_expert_audit,achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from achievements + select id, achievement_name,hot_rank, field_1, field_2, field_3, attachment_count,is_expert_audit,achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from achievements @@ -118,6 +120,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_time, attachment_count, is_expert_audit, + hot_rank, #{achievementName}, @@ -150,6 +153,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{updateTime}, #{attachmentCount}, #{isExpertAudit}, + #{hotRank}, @@ -186,6 +190,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_time = #{updateTime}, attachment_count = #{attachmentCount}, is_expert_audit = #{isExpertAudit}, + hot_rank = #{hotRank}, where id = #{id} @@ -202,7 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 81f57147d..2d123f10e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -148,10 +148,10 @@ - + #{downloadType}, - + #{downloadId}, @@ -187,10 +187,10 @@ - + #{downloadType}, - + #{downloadId}, @@ -624,4 +624,19 @@ #{id} + + delete + from favorites + where user_id = #{userId} + and favorite_id = #{favoriteId} + and favorite_type = #{favoriteType} + + + + delete + from watchers + where user_id = #{userId} + and watchable_id = #{watchableId} + and watchable_type = #{watchableType} + From fd2044696eedf98990d0098dc761636c003ee897 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 23 Apr 2025 09:47:06 +0800 Subject: [PATCH 237/270] =?UTF-8?q?=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C?= =?UTF-8?q?=E8=A1=A8=E8=A6=81=E5=8A=A0=E4=B8=80=E4=B8=AA=20=E6=88=90?= =?UTF-8?q?=E6=9E=9C=E7=8A=B6=E6=80=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/SchoolEnterpriseAchievements.java | 351 ++++++++++-------- .../mapper/AchievementsMapper.java | 2 +- .../service/BigScreenStatisticService.java | 8 +- .../service/impl/AchievementsServiceImpl.java | 24 +- .../controller/BehaviorImageController.java | 2 +- .../impl/BehaviorImageServiceImpl.java | 22 +- .../com/microservices/dms/utils/DateUtil.java | 14 +- .../mapper/dms/AchievementsMapper.xml | 8 +- .../mapper/dms/BehaviorImageMapper.xml | 4 +- .../SchoolEnterpriseAchievementsMapper.xml | 9 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 8 +- 11 files changed, 258 insertions(+), 194 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java index 7afe6a357..47f6f13d1 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java @@ -1,6 +1,7 @@ package com.microservices.dms.achievementLibrary.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -9,372 +10,404 @@ import com.microservices.common.core.web.domain.BaseEntity; /** * 校企成果对象 school_enterprise_achievements - * + * * @author microservices * @date 2025-04-03 */ -public class SchoolEnterpriseAchievements extends BaseEntity -{ +public class SchoolEnterpriseAchievements extends BaseEntity { private static final long serialVersionUID = 1L; - /** 成果唯一标识 */ + /** + * 成果唯一标识 + */ private Long id; - /** 成果名称 */ + /** + * 成果名称 + */ @Excel(name = "成果名称") private String achievementName; - /** 成果领域1 */ + /** + * 成果领域1 + */ @Excel(name = "成果领域1") private String field1; - /** 成果领域2 */ + /** + * 成果领域2 + */ @Excel(name = "成果领域2") private String field2; - /** 成果领域3 */ + /** + * 成果领域3 + */ @Excel(name = "成果领域3") private String field3; - /** 成果类型 */ + /** + * 成果类型 + */ @Excel(name = "成果类型") private String achievementType; - /** 成果来源 */ + /** + * 成果来源 + */ @Excel(name = "成果来源") private String source; - /** 成果来源ID */ + /** + * 成果来源ID + */ @Excel(name = "成果来源ID") private String sourceId; - /** 成果来源跳转链接 */ + /** + * 成果来源跳转链接 + */ @Excel(name = "成果来源跳转链接") private String sourceLink; - /** 成果标签 */ + /** + * 成果标签 + */ @Excel(name = "成果标签") private String tags; - /** 成果摘要 */ + /** + * 成果摘要 + */ @Excel(name = "成果摘要") private String summary; - /** 发布单位 */ + /** + * 发布单位 + */ @Excel(name = "发布单位") private String publishingUnit; - /** 成果地址 */ + /** + * 成果地址 + */ @Excel(name = "成果地址") private String address; - /** 是否精选成果 */ + /** + * 是否精选成果 + */ @Excel(name = "是否精选成果") private Integer isFeatured; - /** 联系人 */ + /** + * 联系人 + */ @Excel(name = "联系人") private String contactPerson; - /** 联系电话 */ + /** + * 联系电话 + */ @Excel(name = "联系电话") private String contactNumber; - /** 成果所属人ID */ + /** + * 成果所属人ID + */ @Excel(name = "成果所属人ID") private String ownerId; - /** 成果所属人名称 */ + /** + * 成果所属人名称 + */ @Excel(name = "成果所属人名称") private String ownerName; - /** 成果状态 */ + /** + * 成果状态 + */ @Excel(name = "成果状态") private String status; - /** 成果详情 */ + /** + * 成果详情 + */ @Excel(name = "成果详情") private String details; - /** 成果审核人 */ + /** + * 成果审核人 + */ @Excel(name = "成果审核人") private String reviewer; - /** 成果审核时间 */ + /** + * 成果审核时间 + */ @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "成果审核时间", width = 30, dateFormat = "yyyy-MM-dd") private Date reviewDate; - /** 成果审核意见 */ + /** + * 成果审核意见 + */ @Excel(name = "成果审核意见") private String reviewComments; - /** 成果图片 */ + /** + * 成果图片 + */ @Excel(name = "成果图片") private String images; - /** 成果附件 */ + /** + * 成果附件 + */ @Excel(name = "成果附件") private String attachments; + private int achievementStatus; - public void setId(Long id) - { + public int getAchievementStatus() { + return achievementStatus; + } + + public void setAchievementStatus(int achievementStatus) { + this.achievementStatus = achievementStatus; + } + + public void setId(Long id) { this.id = id; } - public Long getId() - { + public Long getId() { return id; } - public void setAchievementName(String achievementName) - { + + public void setAchievementName(String achievementName) { this.achievementName = achievementName; } - public String getAchievementName() - { + public String getAchievementName() { return achievementName; } - public void setField1(String field1) - { + + public void setField1(String field1) { this.field1 = field1; } - public String getField1() - { + public String getField1() { return field1; } - public void setField2(String field2) - { + + public void setField2(String field2) { this.field2 = field2; } - public String getField2() - { + public String getField2() { return field2; } - public void setField3(String field3) - { + + public void setField3(String field3) { this.field3 = field3; } - public String getField3() - { + public String getField3() { return field3; } - public void setAchievementType(String achievementType) - { + + public void setAchievementType(String achievementType) { this.achievementType = achievementType; } - public String getAchievementType() - { + public String getAchievementType() { return achievementType; } - public void setSource(String source) - { + + public void setSource(String source) { this.source = source; } - public String getSource() - { + public String getSource() { return source; } - public void setSourceId(String sourceId) - { + + public void setSourceId(String sourceId) { this.sourceId = sourceId; } - public String getSourceId() - { + public String getSourceId() { return sourceId; } - public void setSourceLink(String sourceLink) - { + + public void setSourceLink(String sourceLink) { this.sourceLink = sourceLink; } - public String getSourceLink() - { + public String getSourceLink() { return sourceLink; } - public void setTags(String tags) - { + + public void setTags(String tags) { this.tags = tags; } - public String getTags() - { + public String getTags() { return tags; } - public void setSummary(String summary) - { + + public void setSummary(String summary) { this.summary = summary; } - public String getSummary() - { + public String getSummary() { return summary; } - public void setPublishingUnit(String publishingUnit) - { + + public void setPublishingUnit(String publishingUnit) { this.publishingUnit = publishingUnit; } - public String getPublishingUnit() - { + public String getPublishingUnit() { return publishingUnit; } - public void setAddress(String address) - { + + public void setAddress(String address) { this.address = address; } - public String getAddress() - { + public String getAddress() { return address; } - public void setIsFeatured(Integer isFeatured) - { + + public void setIsFeatured(Integer isFeatured) { this.isFeatured = isFeatured; } - public Integer getIsFeatured() - { + public Integer getIsFeatured() { return isFeatured; } - public void setContactPerson(String contactPerson) - { + + public void setContactPerson(String contactPerson) { this.contactPerson = contactPerson; } - public String getContactPerson() - { + public String getContactPerson() { return contactPerson; } - public void setContactNumber(String contactNumber) - { + + public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; } - public String getContactNumber() - { + public String getContactNumber() { return contactNumber; } - public void setOwnerId(String ownerId) - { + + public void setOwnerId(String ownerId) { this.ownerId = ownerId; } - public String getOwnerId() - { + public String getOwnerId() { return ownerId; } - public void setOwnerName(String ownerName) - { + + public void setOwnerName(String ownerName) { this.ownerName = ownerName; } - public String getOwnerName() - { + public String getOwnerName() { return ownerName; } - public void setStatus(String status) - { + + public void setStatus(String status) { this.status = status; } - public String getStatus() - { + public String getStatus() { return status; } - public void setDetails(String details) - { + + public void setDetails(String details) { this.details = details; } - public String getDetails() - { + public String getDetails() { return details; } - public void setReviewer(String reviewer) - { + + public void setReviewer(String reviewer) { this.reviewer = reviewer; } - public String getReviewer() - { + public String getReviewer() { return reviewer; } - public void setReviewDate(Date reviewDate) - { + + public void setReviewDate(Date reviewDate) { this.reviewDate = reviewDate; } - public Date getReviewDate() - { + public Date getReviewDate() { return reviewDate; } - public void setReviewComments(String reviewComments) - { + + public void setReviewComments(String reviewComments) { this.reviewComments = reviewComments; } - public String getReviewComments() - { + public String getReviewComments() { return reviewComments; } - public void setImages(String images) - { + + public void setImages(String images) { this.images = images; } - public String getImages() - { + public String getImages() { return images; } - public void setAttachments(String attachments) - { + + public void setAttachments(String attachments) { this.attachments = attachments; } - public String getAttachments() - { + public String getAttachments() { return attachments; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("achievementName", getAchievementName()) - .append("field1", getField1()) - .append("field2", getField2()) - .append("field3", getField3()) - .append("achievementType", getAchievementType()) - .append("source", getSource()) - .append("sourceId", getSourceId()) - .append("sourceLink", getSourceLink()) - .append("tags", getTags()) - .append("summary", getSummary()) - .append("publishingUnit", getPublishingUnit()) - .append("address", getAddress()) - .append("isFeatured", getIsFeatured()) - .append("contactPerson", getContactPerson()) - .append("contactNumber", getContactNumber()) - .append("ownerId", getOwnerId()) - .append("ownerName", getOwnerName()) - .append("status", getStatus()) - .append("details", getDetails()) - .append("reviewer", getReviewer()) - .append("reviewDate", getReviewDate()) - .append("reviewComments", getReviewComments()) - .append("images", getImages()) - .append("attachments", getAttachments()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("achievementName", getAchievementName()) + .append("field1", getField1()) + .append("field2", getField2()) + .append("field3", getField3()) + .append("achievementType", getAchievementType()) + .append("source", getSource()) + .append("sourceId", getSourceId()) + .append("sourceLink", getSourceLink()) + .append("tags", getTags()) + .append("summary", getSummary()) + .append("publishingUnit", getPublishingUnit()) + .append("address", getAddress()) + .append("isFeatured", getIsFeatured()) + .append("contactPerson", getContactPerson()) + .append("contactNumber", getContactNumber()) + .append("ownerId", getOwnerId()) + .append("ownerName", getOwnerName()) + .append("status", getStatus()) + .append("details", getDetails()) + .append("reviewer", getReviewer()) + .append("reviewDate", getReviewDate()) + .append("reviewComments", getReviewComments()) + .append("images", getImages()) + .append("attachments", getAttachments()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 27570e3dd..744828136 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -85,7 +85,7 @@ public interface AchievementsMapper { List selectAchievementsByParam(AchQueryVo achQueryVo); - Long getAchievementClickSum(Long id); + Long getAchievementClickSum(@Param("id") Long id); List> getaWatcher(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java index b809c66ea..5d189e2db 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java @@ -17,18 +17,18 @@ public class BigScreenStatisticService { private final AchievementsMapper achievementsMapper; public Map getAchievementTopStatistic(String source) { - Date[] days = DateUtil.getDays(1, 7); + Date[] days = DateUtil.getDays(0, 6); Map m = achievementsMapper.getAchievement(days[0], days[1], source) .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); - List dateStr = DateUtil.getDateStr(days[0], days[1]); - Date[] lastDays = DateUtil.getDays(8, 14); + List dateStr = DateUtil.getDateStrYYYYMMDD(days[0], days[1]); + Date[] lastDays = DateUtil.getDays(7, 13); long lastSum = Optional.ofNullable(achievementsMapper.countAchievementBySource(lastDays[0], lastDays[1], source)).orElse(0L); long sum = Optional.ofNullable(achievementsMapper.countAchievementBySource(null, null, source)).orElse(0L); long cSum = m.values().stream().mapToLong(Long::longValue).sum(); double rate; if (lastSum == 0) rate = 100D; else { - rate = (double) (cSum - lastSum) / lastSum * 100D; + rate = (double) (cSum - lastSum) / lastSum; } List> res = new ArrayList<>(); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 294840b03..98f2a8470 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -173,14 +173,14 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public Map getUerActionData() { - Date[] days = DateUtil.getDays(1, 7); + Date[] days = DateUtil.getDays(0, 6); Map w = achievementsMapper.getaWatcher(days[0], days[1], "Achievements") .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); Map g = achievementsMapper.getFavorite(days[0], days[1], "Achievements") .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); - List dateStr = DateUtil.getDateStr(days[0], days[1]); + List dateStr = DateUtil.getDateStrMMDD(days[0], days[1]); List> wRes = new ArrayList<>(); List> gRes = new ArrayList<>(); for (String s : dateStr) { @@ -213,7 +213,7 @@ public class AchievementsServiceImpl implements IAchievementsService { Map w = achievementsMapper.getAchievement(days[0], days[1], achQueryVo.getSource()) .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); - List dateStr = DateUtil.getDateStr(days[0], days[1]); + List dateStr = DateUtil.getDateStrMMDD(days[0], days[1]); List> res = new ArrayList<>(); for (String s : dateStr) { @@ -290,8 +290,22 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public List> get7AddClickById(String id) { - Date[] days = DateUtil.getDays(1, 7); - return achievementsMapper.get7AddClickById(days[0], days[1], "Achievements",id); + + Date[] days = DateUtil.getDays(0, 6); + Map w = achievementsMapper.get7AddClickById(days[0], days[1], "Achievements",id) + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + + List dateStr = DateUtil.getDateStrMMDD(days[0], days[1]); + List> res = new ArrayList<>(); + + for (String s : dateStr) { + Long a = w.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + res.add(k1); + } + return res; } @Override diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java index 4be6a1b71..f3d764ed0 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java @@ -29,7 +29,7 @@ public class BehaviorImageController { //@RequiresPermissions("dms:achievements:query") @ApiOperation(value = "根据成果ID,获取对应的成果画像") @GetMapping(value = "/achievementImage") - public AjaxResult getAchievementImageById(@PathVariable("id") Long id) + public AjaxResult getAchievementImageById(Long id) { return AjaxResult.success(behaviorImageService.getAchievementImageById(id)); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java index 174b6e2c6..d4a599668 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java @@ -37,46 +37,46 @@ public class BehaviorImageServiceImpl implements IBehaviorImageService { if (bhavior.equals(BehaviorContant.CLICK_BEHAVIOR)) {//点击 //根据当前成果ID,获取成果点击行为数量 Long clickSum = achievementBehaviorSumVo.getClickSum(); - if(StringUtils.isNotNull(clickSum)) { + if(StringUtils.isNotNull(clickSum) && clickSum > 0) { Long click = behaviorImageMapper.getClickSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); if (StringUtils.isNotNull(click)) { - clickResult = click / clickResult *weight; + clickResult = click * weight / clickSum ; } } } else if (bhavior.equals(BehaviorContant.FAVORITE_BEHAVIOR)) {//收藏 //根据当前成果ID,获取成果收藏行为数量 Long favoriteSum = achievementBehaviorSumVo.getFavoriteSum(); - if(StringUtils.isNotNull(favoriteSum)) { + if(StringUtils.isNotNull(favoriteSum) && favoriteSum > 0) { Long favorite = behaviorImageMapper.getFavoriteSumByAchievementId(id,BehaviorContant.ACHIEVEMENTS_IMAGE); if (StringUtils.isNotNull(favorite)) { - favoriteResult = favorite / favoriteSum *weight; + favoriteResult = favorite *weight / favoriteSum ; } } } else if (bhavior.equals(BehaviorContant.SEARCH_BEHAVIOR)) {//搜索 //根据当前成果ID,获取成果搜索行为数量 Long searchSum = achievementBehaviorSumVo.getSearchSum(); - if(StringUtils.isNotNull(searchSum)) { + if(StringUtils.isNotNull(searchSum) && searchSum > 0) { Long search = behaviorImageMapper.getSearchSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); if (StringUtils.isNotNull(search)) { - searchResult = search / searchSum *weight; + searchResult = search *weight / searchSum; } } } else if (bhavior.equals(BehaviorContant.WATCH_BEHAVIOR)) {//关注 //根据当前成果ID,获取成果关注行为数量 Long watchSum = achievementBehaviorSumVo.getFavoriteSum(); - if(StringUtils.isNotNull( watchSum)) { + if(StringUtils.isNotNull( watchSum) && watchSum > 0) { Long watch = behaviorImageMapper.getWatchSumByAchievementId(id,BehaviorContant.ACHIEVEMENTS_IMAGE); - if (StringUtils.isNotNull( watch)) { - watchResult = watch / watchSum *weight; + if (StringUtils.isNotNull( watch) ) { + watchResult = watch *weight / watchSum; } } } else if (bhavior.equals(BehaviorContant.FILE_DOWNLOAD_BEHAVIOR)) {//文件下载 //根据当前成果ID,获取成果文件下载行为数量 Long fileDownloadSum = achievementBehaviorSumVo.getFavoriteSum(); - if(StringUtils.isNotNull(fileDownloadSum)) { + if(StringUtils.isNotNull(fileDownloadSum) && fileDownloadSum > 0) { Long fileDownload = behaviorImageMapper.getFileDownloadSumByAchievementId(id, BehaviorContant.ACHIEVEMENTS_IMAGE); if (StringUtils.isNotNull(fileDownload)) { - fileDownloadResult = fileDownload / fileDownload *weight; + fileDownloadResult = fileDownload *weight / fileDownloadSum ; } } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java index 421d5366d..868ef7173 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java @@ -26,7 +26,19 @@ public class DateUtil { } - public static List getDateStr(Date start, Date end) { + public static List getDateStrMMDD(Date start, Date end) { + LocalDate s = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); + LocalDate e = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); + String pattern = "MM-dd"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); + + return LongStream.range(0,s.until(e).getDays()+1) + .mapToObj(s::plusDays) + .map(formatter::format) + .collect(Collectors.toList()); + } + + public static List getDateStrYYYYMMDD(Date start, Date end) { LocalDate s = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); LocalDate e = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); String pattern = "yyyy-MM-dd"; diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index be56bc08d..d02d2ea70 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -255,7 +255,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml index 048b7ab5d..2a2f0016f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml @@ -36,10 +36,10 @@ \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml index abd9d4f5c..ee73fa740 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml @@ -34,10 +34,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select id, achievement_name, field_1, field_2, field_3, achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from school_enterprise_achievements + select id, achievement_name, achievement_status,field_1, field_2, field_3, achievement_type, source, source_id, source_link, tags, summary, publishing_unit, address, is_featured, contact_person, contact_number, owner_id, owner_name, status, details, reviewer, review_date, review_comments, images, attachments, create_by, create_time, update_by, update_time from school_enterprise_achievements + + + and achievement_id = #{achievementId} + and username like concat('%', #{username}, '%') + and company = #{company} + and technical_title = #{technicalTitle} + and professional_title = #{professionalTitle} + and research_direction = #{researchDirection} + and phone = #{phone} + and summary = #{summary} + and work_content = #{workContent} + and is_leader = #{isLeader} + and status = #{status} + + + + + + + insert into achievement_team + + achievement_id, + username, + company, + technical_title, + professional_title, + research_direction, + phone, + summary, + work_content, + is_leader, + status, + create_by, + create_time, + update_by, + update_time, + + + #{achievementId}, + #{username}, + #{company}, + #{technicalTitle}, + #{professionalTitle}, + #{researchDirection}, + #{phone}, + #{summary}, + #{workContent}, + #{isLeader}, + #{status}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update achievement_team + + achievement_id = #{achievementId}, + username = #{username}, + company = #{company}, + technical_title = #{technicalTitle}, + professional_title = #{professionalTitle}, + research_direction = #{researchDirection}, + phone = #{phone}, + summary = #{summary}, + work_content = #{workContent}, + is_leader = #{isLeader}, + status = #{status}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from achievement_team where id = #{id} + + + + delete from achievement_team where id in + + #{id} + + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index d02d2ea70..79eaaa4ae 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -241,7 +241,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select count(1) as clickSum from clickers where click_type = #{achievementsImage} and click_id = #{id} + + + + + + + + + + + + + + + + select id, behavior_code, image_type, behavior_name, behavior_weight, remark, create_by, create_time, update_by, update_time from behavior_image_weight + + + + + + + + insert into behavior_image_weight + + behavior_code, + image_type, + behavior_name, + behavior_weight, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{behaviorCode}, + #{imageType}, + #{behaviorName}, + #{behaviorWeight}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update behavior_image_weight + + behavior_code = #{behaviorCode}, + image_type = #{imageType}, + behavior_name = #{behaviorName}, + behavior_weight = #{behaviorWeight}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from behavior_image_weight where id = #{id} + + + + delete from behavior_image_weight where id in + + #{id} + + \ No newline at end of file From f573afac22409eff2e90b5f92338d1caaba34a57 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 24 Apr 2025 09:42:25 +0800 Subject: [PATCH 239/270] =?UTF-8?q?=E4=B8=93=E5=AE=B6=E5=AE=9E=E5=90=8D?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/ExpertResourceLibrary.java | 51 ++++++++----------- .../dms/ExpertResourceLibraryMapper.xml | 22 +++++--- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 777d244d9..f5d5aa314 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -59,6 +59,7 @@ public class ExpertResourceLibrary extends BaseEntity { private Integer isDelete; + private Long expertAuth; private Integer sortNo; @@ -66,6 +67,14 @@ public class ExpertResourceLibrary extends BaseEntity { private Long competitionAuditCount; + public Long getExpertAuth() { + return expertAuth; + } + + public void setExpertAuth(Long expertAuth) { + this.expertAuth = expertAuth; + } + public Long getTaskAuditCount() { return taskAuditCount; } @@ -82,6 +91,16 @@ public class ExpertResourceLibrary extends BaseEntity { this.competitionAuditCount = competitionAuditCount; } + public String gender; + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + public Integer getSortNo() { return sortNo; } @@ -274,35 +293,5 @@ public class ExpertResourceLibrary extends BaseEntity { return isDelete; } - @Override - public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) - .append("userId", getUserId()) - .append("expertName", getExpertName()) - .append("highestDegree", getHighestDegree()) - .append("graduatedFrom", getGraduatedFrom()) - .append("idNumber", getIdNumber()) - .append("major", getMajor()) - .append("workplace", getWorkplace()) - .append("phone", getPhone()) - .append("workplaceType", getWorkplaceType()) - .append("expertEmail", getExpertEmail()) - .append("expertSummary", getExpertSummary()) - .append("expertDetail", getExpertDetail()) - .append("professionalTitle", getProfessionalTitle()) - .append("expertType", getExpertType()) - .append("expertDomain", getExpertDomain()) - .append("titleRank", getTitleRank()) - .append("status", getStatus()) - .append("reviewAreaOne", getReviewAreaOne()) - .append("reviewAreaTwo", getReviewAreaTwo()) - .append("reviewAreaThree", getReviewAreaThree()) - .append("isDelete", getIsDelete()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .toString(); - } + } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index 608508453..16270aafd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -33,25 +33,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select id, user_id,expert_id,sort_no, expert_name, highest_degree, graduated_from, id_number, major, workplace, phone, workplace_type, expert_email, expert_summary, expert_detail, professional_title, expert_type, expert_domain, title_rank, status, review_area_one, review_area_two, review_area_three, is_delete, create_by, create_time, update_by, update_time from expert_resource_library + select id, user_id,expert_id,gender,sort_no, expert_name, highest_degree, graduated_from, id_number, major, workplace, phone, workplace_type, expert_email, expert_summary, expert_detail, professional_title, expert_type, expert_domain, title_rank, status, review_area_one, review_area_two, review_area_three, is_delete, create_by, create_time, update_by, update_time from expert_resource_library + - select erl.id, e.id as expert_id,e.user_id, e.expert_name, e.highest_degree, e.graduated_from, e.id_number, e.major, e.workplace, e.phone, e.workplace_type, e.expert_email, erl.expert_summary, erl.expert_detail, e.professional_title, e.expert_type, - expert_domain, - e.title_rank, e.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, + expert_domain,images, attachments, + e.title_rank, erl.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, erl.create_time, (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1) as taskAuditCount, (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2) as competitionAuditCount, @@ -132,20 +163,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -157,7 +194,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" on erl.expert_id = tmp.expert_id - + insert into expert_resource_library user_id, @@ -197,8 +236,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by, update_time, sort_no, - gender, - + gender, + images, + attachments, + #{userId}, #{expertId}, @@ -227,8 +268,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{updateBy}, #{updateTime}, #{sortNo}, - #{gender}, - + #{gender}, + #{isExpertAudit}, + #{hotRank}, + @@ -247,7 +290,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" expert_email = #{expertEmail}, expert_summary = #{expertSummary}, expert_detail = #{expertDetail}, - professional_title = #{professionalTitle}, + professional_title = + #{professionalTitle}, + expert_type = #{expertType}, expert_domain = #{expertDomain}, title_rank = #{titleRank}, @@ -261,13 +306,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_by = #{updateBy}, update_time = #{updateTime}, sort_no = #{sortNo}, - gender = #{gender}, + gender = #{gender}, + images = #{images}, + attachments = #{attachments}, where id = #{id} - delete from expert_resource_library where id = #{id} + delete + from expert_resource_library + where id = #{id} @@ -276,4 +325,111 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + + + + + + + + + + + + + + + + + \ No newline at end of file From a5f53b2a83aa2107bd8f5aa7c64127346219d439 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 24 Apr 2025 15:37:50 +0800 Subject: [PATCH 241/270] =?UTF-8?q?feat(=E7=AB=9E=E8=B5=9B=E5=A4=A7?= =?UTF-8?q?=E5=B1=8F)=20=E7=AB=9E=E8=B5=9B=E5=A4=A7=E5=B1=8F=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BigScreenStatisticController.java | 47 ++++++++++--- .../service/BigScreenStatisticService.java | 63 +++++++++++++++++ .../CompetitionResourceLibraryMapper.java | 24 +++++++ .../com/microservices/dms/utils/DateUtil.java | 35 +++++++++- .../src/main/resources/logback.xml | 2 +- .../dms/CompetitionResourceLibraryMapper.xml | 67 +++++++++++++++++++ 6 files changed, 227 insertions(+), 11 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java index c962b236c..f45d21612 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/BigScreenStatisticController.java @@ -12,57 +12,88 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @Api(tags = "数据管理体系-大屏统计接口") -@RequestMapping("bigScreenStatistic") +@RequestMapping("/bigScreenStatistic") public class BigScreenStatisticController { private final BigScreenStatisticService bigScreenStatisticService; - @GetMapping(value = "getAchievementTopStatistic") + @GetMapping(value = "/achievement/getAchievementTopStatistic") @ApiOperation(value = "成果任务统计顶部折线图") public AjaxResult getAchievementTopStatistic(String source) { return AjaxResult.success(bigScreenStatisticService.getAchievementTopStatistic(source)); } - @GetMapping(value = "getAchievementDataYearly") + @GetMapping(value = "/achievement/getAchievementDataYearly") @ApiOperation(value = "年度成果数据") public AjaxResult getAchievementDataYearly() { return AjaxResult.success(bigScreenStatisticService.getAchievementDataYearly()); } - @GetMapping(value = "getAchievementType") + @GetMapping(value = "/achievement/getAchievementType") @ApiOperation(value = "成果类型") public AjaxResult getAchievementType() { return AjaxResult.success(bigScreenStatisticService.getAchievementType()); } - @GetMapping(value = "getAchievementDomain") + @GetMapping(value = "/achievement/getAchievementDomain") @ApiOperation(value = "成果领域分布") public AjaxResult getAchievementDomain() { return AjaxResult.success(bigScreenStatisticService.getAchievementDomain()); } - @GetMapping(value = "getAchievementAddYearly") + @GetMapping(value = "/achievement/getAchievementAddYearly") @ApiOperation(value = "近1年新增成果数") public AjaxResult getAchievementAddYearly() { return AjaxResult.success(bigScreenStatisticService.getAchievementAddYearly()); } - @GetMapping(value = "getAchievementActData") + @GetMapping(value = "/achievement/getAchievementActData") @ApiOperation(value = "成果行为数据展示") public AjaxResult getAchievementActData() { return AjaxResult.success(bigScreenStatisticService.getAchievementActData()); } - @GetMapping(value = "getAchievementHotRank") + @GetMapping(value = "/achievement/getAchievementHotRank") @ApiOperation(value = "成果热度排行") public AjaxResult getAchievementHotRank() { return AjaxResult.success(bigScreenStatisticService.getAchievementHotRank()); } + @GetMapping(value = "/competition/getCompetitionTopStatistic") + @ApiOperation(value = "competition统计顶部") + public AjaxResult getAchievementTopStatistic() { + return AjaxResult.success(bigScreenStatisticService.getCompetitionTopStatistic()); + } + + @GetMapping(value = "/competition/getCompetitionStatisticYearly") + @ApiOperation(value = "竞赛数据统计") + public AjaxResult getCompetitionStatisticYearly() { + return AjaxResult.success(bigScreenStatisticService.getCompetitionStatisticYearly()); + } + + @GetMapping(value = "/competition/getCompetitionHot") + @ApiOperation(value = "热门竞赛统计") + public AjaxResult getCompetitionHot() { + return AjaxResult.success(bigScreenStatisticService.getCompetitionHot()); + } + + @GetMapping(value = "/competition/getCompetitionYearlyPaperAdd") + @ApiOperation(value = "年度竞赛作品新增数") + public AjaxResult getCompetitionYearlyPaperAdd() { + return AjaxResult.success(bigScreenStatisticService.getCompetitionYearlyPaperAdd()); + } + + @GetMapping(value = "/competition/getCompetitionYearlyFinish") + @ApiOperation(value = "近1年竞赛完成情况") + public AjaxResult getCompetitionYearlyFinish() { + return AjaxResult.success(bigScreenStatisticService.getCompetitionYearlyFinish()); + } + + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java index 5d189e2db..fddf8c5a8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/BigScreenStatisticService.java @@ -3,10 +3,12 @@ package com.microservices.dms.achievementLibrary.service; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import com.microservices.dms.resourceLibrary.mapper.CompetitionResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -15,6 +17,7 @@ import java.util.stream.Collectors; public class BigScreenStatisticService { private final AchievementsMapper achievementsMapper; + private final CompetitionResourceLibraryMapper competitionResourceLibraryMapper; public Map getAchievementTopStatistic(String source) { Date[] days = DateUtil.getDays(0, 6); @@ -72,4 +75,64 @@ public class BigScreenStatisticService { public List> getAchievementHotRank() { return achievementsMapper.getAchievementHotRank(); } + + public Map getCompetitionTopStatistic() { + Map res = new HashMap<>(); + Long finish = competitionResourceLibraryMapper.getCompetitionFinish(); + res.put("finish", finish); + Long enroll = competitionResourceLibraryMapper.getCompetitionEnroll(); + res.put("enroll", enroll); + Long underway = competitionResourceLibraryMapper.getCompetitionUnderway(); + res.put("underway", underway); + Long submitCount = competitionResourceLibraryMapper.getCompetitionSubmitCount(); + res.put("submitCount", submitCount); + Long transfer = competitionResourceLibraryMapper.getCompetitionTransferCount(); + res.put("transfer", transfer); + Long needAudit = competitionResourceLibraryMapper.getCompetitionNeedAuditCount(); + res.put("needAudit", needAudit); + return res; + } + + public List getCompetitionStatisticYearly() { + return competitionResourceLibraryMapper.getCompetitionStatisticYearly(); + } + + public Object getCompetitionHot() { + return competitionResourceLibraryMapper.getCompetitionHot(); + } + + public List> getCompetitionYearlyPaperAdd() { + Date[] currentYear = DateUtil.getCurrentYear(); + + Map m = competitionResourceLibraryMapper.getCompetitionYearlyPaperAdd(currentYear[0],currentYear[1]) + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + List dateStr = DateUtil.getDateStrMMDD(currentYear[0], currentYear[1]); + List> res = new ArrayList<>(); + for (String s : dateStr) { + Long a = m.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + res.add(k1); + } + return res; + } + + public List> getCompetitionYearlyFinish() { + Date[] currentYear = DateUtil.getCurrentYear(); + Date[] YearEndOfCur = DateUtil.getCurrentYearEndOf(LocalDate.now()); + + Map m = competitionResourceLibraryMapper.getCompetitionYearlyFinish(YearEndOfCur[0],YearEndOfCur[1]) + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + List dateStr = DateUtil.getDateStrMMDD(currentYear[0], currentYear[1]); + List> res = new ArrayList<>(); + for (String s : dateStr) { + Long a = m.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + res.add(k1); + } + return res; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java index ba2e6024b..3973167ae 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/CompetitionResourceLibraryMapper.java @@ -1,6 +1,7 @@ package com.microservices.dms.resourceLibrary.mapper; import com.microservices.common.datasource.annotation.Slave; +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.resourceLibrary.domain.CompetitionResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.CompetitionListVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; @@ -8,7 +9,10 @@ import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Map; @Mapper @Slave @@ -47,4 +51,24 @@ public interface CompetitionResourceLibraryMapper { long getTotalFinishedCompetitions(); long getReviewCompetitionCount(); + + Long getCompetitionFinish(); + + Long getCompetitionEnroll(); + + Long getCompetitionUnderway(); + + Long getCompetitionSubmitCount(); + + Long getCompetitionTransferCount(); + + Long getCompetitionNeedAuditCount(); + + List getCompetitionStatisticYearly(); + + List> getCompetitionHot(); + + List> getCompetitionYearlyPaperAdd(@Param("s") Date s, @Param("e") Date e); + + List> getCompetitionYearlyFinish(@Param("s") Date s, @Param("e") Date e); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java index 868ef7173..5ca20f898 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java @@ -2,8 +2,10 @@ package com.microservices.dms.utils; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Year; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -26,13 +28,42 @@ public class DateUtil { } + public static Date[] getCurrentYear() { + Year year = Year.now(); + + LocalDate startDate = year.atDay(1); + LocalDate endDate = year.atDay(year.length()); + + LocalDateTime startDateTime = startDate.atStartOfDay(); + LocalDateTime endDateTime = endDate.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + + public static Date[] getCurrentYearEndOf(LocalDate endDate) { + Year year = Year.now(); + + LocalDate startOfWeek = year.atDay(1); + + LocalDateTime startDateTime = startOfWeek.atStartOfDay(); + LocalDateTime endDateTime = endDate.atTime(23, 59, 59); + + return new Date[]{ + Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()), + Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()) + }; + } + public static List getDateStrMMDD(Date start, Date end) { LocalDate s = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); LocalDate e = end.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().toLocalDate(); String pattern = "MM-dd"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); - return LongStream.range(0,s.until(e).getDays()+1) + return LongStream.range(0, s.until(e).getDays() + 1) .mapToObj(s::plusDays) .map(formatter::format) .collect(Collectors.toList()); @@ -44,7 +75,7 @@ public class DateUtil { String pattern = "yyyy-MM-dd"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); - return LongStream.range(0,s.until(e).getDays()+1) + return LongStream.range(0, s.until(e).getDays() + 1) .mapToObj(s::plusDays) .map(formatter::format) .collect(Collectors.toList()); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml b/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml index 8d66f2a37..b79bc799e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/logback.xml @@ -1,7 +1,7 @@ - + diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index 21620b9dc..9faa12b53 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -231,6 +231,73 @@ where ci.is_expert_audit = 1 + + + + + + + + + + + + + + + + + + + insert into competition_resource_library From d2deba6f90594dbe53dc3dcfe813f9bea6425980 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 25 Apr 2025 11:34:34 +0800 Subject: [PATCH 242/270] =?UTF-8?q?=E4=B8=93=E5=AE=B6=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 4 +- .../mapper/AchievementsMapper.java | 4 +- .../service/IAchievementsService.java | 4 +- .../service/impl/AchievementsServiceImpl.java | 4 +- .../ExpertResourceLibraryController.java | 14 ++++ .../domain/ExpertResourceLibrary.java | 18 +++++ .../mapper/ExpertResourceLibraryMapper.java | 8 +++ .../IExpertResourceLibraryService.java | 7 ++ .../ExpertResourceLibraryServiceImpl.java | 11 +++ .../dms/ExpertResourceLibraryMapper.xml | 72 ++++++++++++------- 10 files changed, 114 insertions(+), 32 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index bb735eeb2..f42872152 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -191,7 +191,7 @@ public class AchievementsController extends BaseController { @ApiOperation("根据当前用户以及成果ID,获取当前成果的 是否收藏与关注状态") @GetMapping("/getWatchFavoriteStatusById") - public AjaxResult getWatchFavoriteStatusById(String id, Long userId) { + public AjaxResult getWatchFavoriteStatusById(Long id, Long userId) { return success(achievementsService.getWatchFavoriteStatusById(id, userId)); } @ApiOperation("根据成果ID,获取近7日成果点击数量(折线图)") @@ -202,7 +202,7 @@ public class AchievementsController extends BaseController { @ApiOperation("根据成果ID,获取成果的相关行为数据统计(点击量、搜索量、附件下载量、收藏、关注)") @GetMapping("/getActDataStatisticById") - public AjaxResult getActDataStatisticById(String id) { + public AjaxResult getActDataStatisticById(Long id) { return success(achievementsService.getActDataStatisticById(id)); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 744828136..75bfca765 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -105,11 +105,11 @@ public interface AchievementsMapper { List getAreasByName(@Param("areaName") String areaName); - AchievementBehaviorSumVo getActDataStatisticById(@Param("id") String id); + AchievementBehaviorSumVo getActDataStatisticById(@Param("id") Long id); List> get7AddClickById(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements, @Param("id") String id); - AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") String id, @Param("userId")Long userId); + AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") Long id, @Param("userId")Long userId); Long countAchievementBySource(@Param("s") Date s, @Param("e") Date e, @Param("t") String achievements); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 340b3d2a2..246473a28 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -94,9 +94,9 @@ public interface IAchievementsService { List getAreasByName(String areaName); - AchievementBehaviorSumVo getActDataStatisticById(String id); + AchievementBehaviorSumVo getActDataStatisticById(Long id); List> get7AddClickById(String id); - AchievementBehaviorSumVo getWatchFavoriteStatusById(String id, Long userId); + AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 9d8e75fa0..cf8f055ca 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -285,7 +285,7 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public AchievementBehaviorSumVo getActDataStatisticById(String id) { + public AchievementBehaviorSumVo getActDataStatisticById(Long id) { return achievementsMapper.getActDataStatisticById(id); } @@ -310,7 +310,7 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public AchievementBehaviorSumVo getWatchFavoriteStatusById(String id, Long userId) { + public AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId) { return achievementsMapper.getWatchFavoriteStatusById(id,userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java index 5bf6cae56..2a0f96dbc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/controller/ExpertResourceLibraryController.java @@ -124,4 +124,18 @@ public class ExpertResourceLibraryController extends BaseController { return AjaxResult.success(expertResourceLibraryService.taskAuditCount()); } + + + @ApiOperation("根据当前用户以及专家ID,获取当前专家的 是否收藏与关注状态") + @GetMapping("/getWatchFavoriteStatusById") + public AjaxResult getWatchFavoriteStatusById(Long id, Long userId) { + return success(expertResourceLibraryService.getWatchFavoriteStatusById(id, userId)); + } + + + @ApiOperation("根据成果ID,获取专家的相关行为数据统计(点击量、搜索量、附件下载量、收藏、关注)") + @GetMapping("/getActDataStatisticById") + public AjaxResult getActDataStatisticById(Long id) { + return success(expertResourceLibraryService.getActDataStatisticById(id)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 3d27e5473..8654c0fcd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -69,6 +69,24 @@ public class ExpertResourceLibrary extends BaseEntity { private String images; private String attachments; + private Long watcherSum; + private Long favoriteSum; + + public Long getWatcherSum() { + return watcherSum; + } + + public void setWatcherSum(Long watcherSum) { + this.watcherSum = watcherSum; + } + + public Long getFavoriteSum() { + return favoriteSum; + } + + public void setFavoriteSum(Long favoriteSum) { + this.favoriteSum = favoriteSum; + } public String getImages() { return images; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java index 48ccc087b..cce29d425 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -1,12 +1,16 @@ package com.microservices.dms.resourceLibrary.mapper; +import java.util.Date; import java.util.List; import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.achievementLibrary.domain.ExpertTotallVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 专家资源库Mapper接口 @@ -98,4 +102,8 @@ public interface ExpertResourceLibraryMapper List getReviewAreasStatistic(); List getExpertAduit(); + + AchievementBehaviorSumVo getActDataStatisticById(@Param("id") Long id); + + AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") Long id, @Param("userId")Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java index 07b0be4ca..9ae1e9568 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/IExpertResourceLibraryService.java @@ -1,7 +1,10 @@ package com.microservices.dms.resourceLibrary.service; import java.util.List; + +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; /** * 专家资源库Service接口 @@ -66,4 +69,8 @@ public interface IExpertResourceLibraryService Long competitionAuditCount(); Long taskAuditCount(); + + AchievementBehaviorSumVo getActDataStatisticById(Long id); + + AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index 5ea8b2309..8587e9db1 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -2,6 +2,7 @@ package com.microservices.dms.resourceLibrary.service.impl; import java.util.List; import com.microservices.common.core.utils.DateUtils; +import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; @@ -72,6 +73,16 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS return expertResourceLibraryMapper.taskAuditCount(); } + @Override + public AchievementBehaviorSumVo getActDataStatisticById(Long id) { + return expertResourceLibraryMapper.getActDataStatisticById(id); + } + + @Override + public AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId) { + return expertResourceLibraryMapper.getWatchFavoriteStatusById(id,userId); + } + /** * 新增专家资源库 * diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index ecab2822b..904a0caf3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -65,14 +65,14 @@ create_by, create_time, update_by, - update_time,images, attachments,gender,sort_no + update_time,images, attachments,gender,sort_no,status from expert_resource_library @@ -237,7 +239,8 @@ update_time, sort_no, gender, - images, + + images, attachments, @@ -268,9 +271,9 @@ #{updateBy}, #{updateTime}, #{sortNo}, - #{gender}, - #{isExpertAudit}, - #{hotRank}, + #{gender}, + #{images}, + #{attachments}, @@ -432,4 +435,25 @@ order by (tmp.taskAuditCount + tmp.competitionAuditCount) desc limit 0,9 + + + + + \ No newline at end of file From 492de55aa0e3bc691ad9477cfef1a48021a2dbe0 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 25 Apr 2025 16:04:41 +0800 Subject: [PATCH 243/270] =?UTF-8?q?feat(=E8=AE=BA=E5=9D=9B=E5=A4=A7?= =?UTF-8?q?=E5=B1=8F)=20=E8=AE=BA=E5=9D=9B=E5=A4=A7=E5=B1=8F=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 9 ++ .../controller/MemoDashboardController.java | 62 ++++++++++++ .../domain/AreaStatisticVo.java | 74 ++++++++++++++ .../domain/MemoTotalVo.java | 74 ++++++++++++++ .../mapper/AchievementsMapper.java | 3 + .../service/IAchievementsService.java | 3 + .../service/MemoDashboardService.java | 97 +++++++++++++++++++ .../service/impl/AchievementsServiceImpl.java | 6 ++ .../domain/vo/ExpertAttachmentVo.java | 50 ++++++++++ .../mapper/ExpertResourceLibraryMapper.java | 21 ++++ .../ExpertResourceLibraryServiceImpl.java | 79 +++++++++------ .../com/microservices/dms/utils/UrlUtil.java | 19 ++++ .../mapper/dms/AchievementsMapper.xml | 27 ++++++ .../dms/ExpertResourceLibraryMapper.xml | 87 ++++++++++++++++- 14 files changed, 581 insertions(+), 30 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/MemoDashboardController.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AreaStatisticVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/MemoTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/MemoDashboardService.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ExpertAttachmentVo.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index f42872152..d17c1cd04 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -205,4 +205,13 @@ public class AchievementsController extends BaseController { public AjaxResult getActDataStatisticById(Long id) { return success(achievementsService.getActDataStatisticById(id)); } + /** + * 根据领域,将成果数据进行分类 + * + */ + @GetMapping("/getAreaStatistic") + public AjaxResult getAreaStatistic(String areaKey) + { + return success(achievementsService.getAreaStatistic(areaKey)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/MemoDashboardController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/MemoDashboardController.java new file mode 100644 index 000000000..fc4f7db10 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/MemoDashboardController.java @@ -0,0 +1,62 @@ +package com.microservices.dms.achievementLibrary.controller; + +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.dms.achievementLibrary.service.MemoDashboardService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "数据管理体系-社区动态可视化接口") +@RequestMapping("/memoDashboard") +public class MemoDashboardController { + @Autowired + private MemoDashboardService memoDashboardService; + + @GetMapping(value = "getMemoAduit") + @ApiOperation(value = "帖子审核通过率、帖子总数") + public AjaxResult getMemoAduit() { + return AjaxResult.success(memoDashboardService.getMemoAduit()); + } + + @GetMapping(value = "getIsOriginalStatistic") + @ApiOperation(value = "帖子原创、非原创") + public AjaxResult getIsOriginalStatistic() { + return AjaxResult.success(memoDashboardService.getIsOriginalStatistic()); + } + + @GetMapping(value = "getMemoTotalByYear") + @ApiOperation(value = "年度论坛帖子总数") + public AjaxResult getMemoTotalByYear() { + return AjaxResult.success(memoDashboardService.getMemoTotalByYear()); + } + + @GetMapping(value = "getForumSectionStatistic(") + @ApiOperation(value = "帖子分类") + public AjaxResult getForumSectionStatistic() { + return AjaxResult.success(memoDashboardService.getForumSectionStatistic()); + } + + @GetMapping(value = "getAddMemoStatistic(") + @ApiOperation(value = "近一年新增帖子数") + public AjaxResult getAddMemoStatistic() { + return AjaxResult.success(memoDashboardService.getAddMemoStatistic()); + } + + @GetMapping(value = "getTop5Memos(") + @ApiOperation(value = "年度帖子热度top5") + public AjaxResult getTop5Memos() { + return AjaxResult.success(memoDashboardService.getTop5Memos()); + } + + @GetMapping(value = "get7DayPaise(") + @ApiOperation(value = "近7日帖子点赞数") + public AjaxResult get7DayPaise() { + return AjaxResult.success(memoDashboardService.get7DayPaise()); + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AreaStatisticVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AreaStatisticVo.java new file mode 100644 index 000000000..51a2197b5 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AreaStatisticVo.java @@ -0,0 +1,74 @@ +package com.microservices.dms.achievementLibrary.domain; + +public class AreaStatisticVo { + //领域名称 + private String areaName; + //领域key + private String areaKey; + //领域说明 + private String remark; + //开源项目汇总 + private Long kyxmSum; + //创客任务汇总 + private Long ckrwSum; + //开放竞赛汇总 + private Long kfjsSum; + //校企成果汇总 + private Long xqcgSum; + + public String getAreaName() { + return areaName; + } + + public void setAreaName(String areaName) { + this.areaName = areaName; + } + + public String getAreaKey() { + return areaKey; + } + + public void setAreaKey(String areaKey) { + this.areaKey = areaKey; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Long getKyxmSum() { + return kyxmSum; + } + + public void setKyxmSum(Long kyxmSum) { + this.kyxmSum = kyxmSum; + } + + public Long getCkrwSum() { + return ckrwSum; + } + + public void setCkrwSum(Long ckrwSum) { + this.ckrwSum = ckrwSum; + } + + public Long getKfjsSum() { + return kfjsSum; + } + + public void setKfjsSum(Long kfjsSum) { + this.kfjsSum = kfjsSum; + } + + public Long getXqcgSum() { + return xqcgSum; + } + + public void setXqcgSum(Long xqcgSum) { + this.xqcgSum = xqcgSum; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/MemoTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/MemoTotalVo.java new file mode 100644 index 000000000..d514c2f4b --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/MemoTotalVo.java @@ -0,0 +1,74 @@ +package com.microservices.dms.achievementLibrary.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Date; + +public class MemoTotalVo { + private Long id; + private String subject; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "发布时间", hidden = true) + private Date publishedAt; + private Long viewedCount; + private Long praisesCount; + private Long repliesCount; + private Long behavioreSum; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public Date getPublishedAt() { + return publishedAt; + } + + public void setPublishedAt(Date publishedAt) { + this.publishedAt = publishedAt; + } + + public Long getViewedCount() { + return viewedCount; + } + + public void setViewedCount(Long viewedCount) { + this.viewedCount = viewedCount; + } + + public Long getPraisesCount() { + return praisesCount; + } + + public void setPraisesCount(Long praisesCount) { + this.praisesCount = praisesCount; + } + + public Long getRepliesCount() { + return repliesCount; + } + + public void setRepliesCount(Long repliesCount) { + this.repliesCount = repliesCount; + } + + public Long getBehavioreSum() { + return behavioreSum; + } + + public void setBehavioreSum(Long behavioreSum) { + this.behavioreSum = behavioreSum; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 75bfca765..549d58bf5 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -9,6 +9,7 @@ import com.microservices.common.datasource.annotation.Master; import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; @@ -126,4 +127,6 @@ public interface AchievementsMapper { List> getAchievementHotRank(); List getAllId(); + + List getAreaStatistic(@Param("areaKey") String areaKey); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 246473a28..e0fd13b98 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -5,6 +5,7 @@ import java.util.Map; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; @@ -99,4 +100,6 @@ public interface IAchievementsService { List> get7AddClickById(String id); AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId); + + List getAreaStatistic(String areaKey); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/MemoDashboardService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/MemoDashboardService.java new file mode 100644 index 000000000..d5f8898d9 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/MemoDashboardService.java @@ -0,0 +1,97 @@ +package com.microservices.dms.achievementLibrary.service; + +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.domain.MemoTotalVo; +import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; +import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; +import com.microservices.dms.utils.DateUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class MemoDashboardService { + @Autowired + private ExpertResourceLibraryMapper memoResourceLibraryMapper; + /** + * 审核通过率 + * @return + */ + public List getMemoAduit() { + return memoResourceLibraryMapper.getMemoAduit(); + } + + /** + * 原创、非原创 + * @return + */ + public KeyValueVo getIsOriginalStatistic() { + return memoResourceLibraryMapper.getIsOriginalStatistic(); + } + + /** + * 年度动态数据统计 + * @return + */ + public List getMemoTotalByYear() { + return memoResourceLibraryMapper.getMemoTotalByYear(); + } + + /** + * 根据帖子类型汇总 + * @return + */ + public List getForumSectionStatistic() { + return memoResourceLibraryMapper.getForumSectionStatistic(); + } + + /** + * 近一年新增帖子数 + * @return + */ + public List getAddMemoStatistic() { + return memoResourceLibraryMapper.getAddMemoStatistic(); + } + + /** + * 本年帖子热度top5(论坛评论、点击、点赞) + * @return + */ + public List getTop5Memos() { + return memoResourceLibraryMapper.getTop5Memos(); + } + + /** + * 近7日帖子点赞数 + * @return + */ + public List> get7DayPaise() { + Date[] days = DateUtil.getDays(1, 7); + Map w = memoResourceLibraryMapper.get7DayPaise(days[0], days[1]) + .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); + + List dateStr = DateUtil.getDateStrMMDD(days[0], days[1]); + List> res = new ArrayList<>(); + + for (String s : dateStr) { + Long a = w.getOrDefault(s, 0L); + KeyValVo k1 = new KeyValVo<>(); + k1.setK(s); + k1.setV(a); + res.add(k1); + } + return res; + } + + + + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index cf8f055ca..59bcc91df 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.dms.achievementLibrary.domain.AchQueryVo; +import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.behaviorImage.domain.AchievementImageVo; @@ -327,4 +328,9 @@ public class AchievementsServiceImpl implements IAchievementsService { achievementsMapper.updateAchievements(u); } } + + @Override + public List getAreaStatistic(String areaKey) { + return achievementsMapper.getAreaStatistic(areaKey); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ExpertAttachmentVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ExpertAttachmentVo.java new file mode 100644 index 000000000..41f2616d2 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/vo/ExpertAttachmentVo.java @@ -0,0 +1,50 @@ +package com.microservices.dms.resourceLibrary.domain.vo; + + +public class ExpertAttachmentVo { + private Long expertId; + private Long academicAchievementsAttachments; + private Long honorsAttachments; + private Long resumeAttachments; + private Long titleCertificateAttachments; + + public Long getExpertId() { + return expertId; + } + + public void setExpertId(Long expertId) { + this.expertId = expertId; + } + + public Long getAcademicAchievementsAttachments() { + return academicAchievementsAttachments; + } + + public void setAcademicAchievementsAttachments(Long academicAchievementsAttachments) { + this.academicAchievementsAttachments = academicAchievementsAttachments; + } + + public Long getHonorsAttachments() { + return honorsAttachments; + } + + public void setHonorsAttachments(Long honorsAttachments) { + this.honorsAttachments = honorsAttachments; + } + + public Long getResumeAttachments() { + return resumeAttachments; + } + + public void setResumeAttachments(Long resumeAttachments) { + this.resumeAttachments = resumeAttachments; + } + + public Long getTitleCertificateAttachments() { + return titleCertificateAttachments; + } + + public void setTitleCertificateAttachments(Long titleCertificateAttachments) { + this.titleCertificateAttachments = titleCertificateAttachments; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java index cce29d425..14b06c960 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/ExpertResourceLibraryMapper.java @@ -2,12 +2,15 @@ package com.microservices.dms.resourceLibrary.mapper; import java.util.Date; import java.util.List; +import java.util.Map; import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.achievementLibrary.domain.ExpertTotallVo; import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.domain.MemoTotalVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.ExpertAttachmentVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -106,4 +109,22 @@ public interface ExpertResourceLibraryMapper AchievementBehaviorSumVo getActDataStatisticById(@Param("id") Long id); AchievementBehaviorSumVo getWatchFavoriteStatusById(@Param("id") Long id, @Param("userId")Long userId); + + List getMemoAduit(); + + KeyValueVo getIsOriginalStatistic(); + + List getMemoTotalByYear(); + + List getForumSectionStatistic(); + + List getAddMemoStatistic(); + + List getTop5Memos(); + + List> get7DayPaise(@Param("s") Date s, @Param("e") Date e); + + ExpertAttachmentVo getExpertInfoById(@Param("expertId") Long expertId); + + Map getAttachmentInfo(@Param("id") Long id); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index 8587e9db1..d56d9f76d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -1,47 +1,73 @@ package com.microservices.dms.resourceLibrary.service.impl; -import java.util.List; import com.microservices.common.core.utils.DateUtils; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.domain.vo.ExpertAttachmentVo; +import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import static com.microservices.dms.constant.TaskConstant.MARKER_SPACE_DOWNLOAD_API_BY_ID; /** * 专家资源库Service业务层处理 - * + * * @author microservices * @date 2025-04-11 */ @Service -public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryService -{ +public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryService { @Autowired private ExpertResourceLibraryMapper expertResourceLibraryMapper; + @Value("${markerSpaceUrl}") + public String markerSpaceUrl; /** * 查询专家资源库 - * + * * @param id 专家资源库主键 * @return 专家资源库 */ @Override - public ExpertResourceLibrary selectExpertResourceLibraryById(Long id) - { - return expertResourceLibraryMapper.selectExpertResourceLibraryById(id); + public ExpertResourceLibrary selectExpertResourceLibraryById(Long id) { + ExpertResourceLibrary res = expertResourceLibraryMapper.selectExpertResourceLibraryById(id); + ExpertAttachmentVo attachmentVo = expertResourceLibraryMapper.getExpertInfoById(res.getExpertId()); + Map honorsAttachments = expertResourceLibraryMapper.getAttachmentInfo(attachmentVo.getHonorsAttachments()); + buildFullUrl(honorsAttachments); + Map resumeAttachments = expertResourceLibraryMapper.getAttachmentInfo(attachmentVo.getResumeAttachments()); + buildFullUrl(resumeAttachments); + Map titleCertificateAttachments = expertResourceLibraryMapper.getAttachmentInfo(attachmentVo.getTitleCertificateAttachments()); + buildFullUrl(titleCertificateAttachments); + Map academicAchievementsAttachments = expertResourceLibraryMapper.getAttachmentInfo(attachmentVo.getAcademicAchievementsAttachments()); + buildFullUrl(academicAchievementsAttachments); + res.getParams().put("academicAchievementsAttachments", academicAchievementsAttachments); + res.getParams().put("honorsAttachments", honorsAttachments); + res.getParams().put("resumeAttachments", resumeAttachments); + res.getParams().put("titleCertificateAttachments", titleCertificateAttachments); + return res; + } + + private void buildFullUrl(Map map) { + if (map != null && map.containsKey("id") && map.get("id") != null) { + String id = map.get("id").toString(); + map.put("url", String.format(MARKER_SPACE_DOWNLOAD_API_BY_ID, markerSpaceUrl, id)); + } } /** * 查询专家资源库列表 - * + * * @param expertResourceLibrary 专家资源库 * @return 专家资源库 */ @Override - public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary) - { + public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary) { return expertResourceLibraryMapper.selectExpertResourceLibraryList(expertResourceLibrary); } @@ -53,8 +79,7 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS * @return 专家资源库 */ @Override - public List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary) - { + public List selectExpertResourceLibraryList2(ExpertResourceLibrary expertResourceLibrary) { return expertResourceLibraryMapper.selectExpertResourceLibraryList2(expertResourceLibrary); } @@ -80,56 +105,52 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS @Override public AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId) { - return expertResourceLibraryMapper.getWatchFavoriteStatusById(id,userId); + return expertResourceLibraryMapper.getWatchFavoriteStatusById(id, userId); } /** * 新增专家资源库 - * + * * @param expertResourceLibrary 专家资源库 * @return 结果 */ @Override - public int insertExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) - { + public int insertExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) { expertResourceLibrary.setCreateTime(DateUtils.getNowDate()); return expertResourceLibraryMapper.insertExpertResourceLibrary(expertResourceLibrary); } /** * 修改专家资源库 - * + * * @param expertResourceLibrary 专家资源库 * @return 结果 */ @Override - public int updateExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) - { + public int updateExpertResourceLibrary(ExpertResourceLibrary expertResourceLibrary) { expertResourceLibrary.setUpdateTime(DateUtils.getNowDate()); return expertResourceLibraryMapper.updateExpertResourceLibrary(expertResourceLibrary); } /** * 批量删除专家资源库 - * + * * @param ids 需要删除的专家资源库主键 * @return 结果 */ @Override - public int deleteExpertResourceLibraryByIds(Long[] ids) - { + public int deleteExpertResourceLibraryByIds(Long[] ids) { return expertResourceLibraryMapper.deleteExpertResourceLibraryByIds(ids); } /** * 删除专家资源库信息 - * + * * @param id 专家资源库主键 * @return 结果 */ @Override - public int deleteExpertResourceLibraryById(Long id) - { + public int deleteExpertResourceLibraryById(Long id) { return expertResourceLibraryMapper.deleteExpertResourceLibraryById(id); } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java index 179220401..03bad39c2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/UrlUtil.java @@ -1,11 +1,17 @@ package com.microservices.dms.utils; +import com.microservices.common.core.utils.StringUtils; + import java.net.MalformedURLException; import java.net.URL; public class UrlUtil { public static String getUrlPath(String urlString) { + if (StringUtils.isEmpty(urlString)) { + return ""; + } + URL url; try { url = new URL(urlString); @@ -14,4 +20,17 @@ public class UrlUtil { } return url.getPath(); } + + + public static String replaceUrlIp(String urlString,String newIp) { + + urlString = getUrlPath(urlString); + + if (StringUtils.isEmpty(urlString) || StringUtils.isEmpty(newIp)) { + return ""; + } + + + return newIp + urlString; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 79eaaa4ae..3155f0dbf 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -444,4 +444,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select id from achievements + + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index 904a0caf3..fa7429bac 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -129,7 +129,7 @@ (select count(*) as watchSum from watchers where watchable_type = 'Experts' and watchable_id = erl.id) as watcherSum, (select count(*) as favoriteSum from favorites where favorite_type = 'Experts' and favorite_id = erl.id) as favoriteSum, erl.update_by, erl.update_time,erl.sort_no - from expert_resource_library erl left join experts e on e.id = erl.user_id + from expert_resource_library erl left join experts e on e.id = erl.expert_id and user_id = #{userId} and erl.expert_name like concat('%', #{expertName}, '%') @@ -456,4 +456,89 @@ (select count(1) as favoriteSum from favorites where favorite_type = 'Experts' and favorite_id = #{id} and user_id=#{userId}) d ) + + + + + + + + + + + + + + + + + \ No newline at end of file From 476dbff76c237f64b0569112604727dea107581b Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 27 Apr 2025 10:40:36 +0800 Subject: [PATCH 244/270] =?UTF-8?q?feat(=E5=BC=80=E6=BA=90=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=9B=B8=E5=85=B3=E6=88=90=E6=9E=9C=E6=98=BE=E7=A4=BA?= =?UTF-8?q?)=20=E5=BC=80=E6=BA=90=E9=A1=B9=E7=9B=AE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=88=90=E6=9E=9C=E6=98=BE=E7=A4=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 9 +++ .../achievementLibrary/domain/AchQueryVo.java | 3 +- .../domain/AchRelatedVo.java | 67 +++++++++++++++++++ .../mapper/AchievementsMapper.java | 9 +-- .../service/IAchievementsService.java | 7 +- .../service/impl/AchievementsServiceImpl.java | 21 ++++-- .../mapper/dms/AchievementsMapper.xml | 13 ++++ 7 files changed, 115 insertions(+), 14 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index d17c1cd04..7f0a7e8d8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -214,4 +214,13 @@ public class AchievementsController extends BaseController { { return success(achievementsService.getAreaStatistic(areaKey)); } + + /** + * 获取开源项目的相关成果 + */ + @GetMapping("/getRelatedAch") + public AjaxResult getRelatedAch(Long id,Long sourceId) + { + return success(achievementsService.getRelatedAch(id,sourceId)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java index 956dcf935..ec419c8bb 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchQueryVo.java @@ -5,8 +5,7 @@ public class AchQueryVo { private String areaQuery;//领域 private String source;//来源 private String achievementName;//名称 - - + private Long userId; public String getAreaQuery() { return areaQuery; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java new file mode 100644 index 000000000..8495dcbbb --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java @@ -0,0 +1,67 @@ +package com.microservices.dms.achievementLibrary.domain; + +public class AchRelatedVo { + private Long id; + private String attachments; + private String summary; + private String achievementType; + private String achMonthDay; + private String source; + private Long sourceId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAttachments() { + return attachments; + } + + public void setAttachments(String attachments) { + this.attachments = attachments; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getAchievementType() { + return achievementType; + } + + public void setAchievementType(String achievementType) { + this.achievementType = achievementType; + } + + public String getAchMonthDay() { + return achMonthDay; + } + + public void setAchMonthDay(String achMonthDay) { + this.achMonthDay = achMonthDay; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public Long getSourceId() { + return sourceId; + } + + public void setSourceId(Long sourceId) { + this.sourceId = sourceId; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 549d58bf5..28c7de5dc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -7,10 +7,7 @@ import java.util.Set; import com.microservices.common.datasource.annotation.Master; import com.microservices.common.datasource.annotation.Slave; -import com.microservices.dms.achievementLibrary.domain.AchQueryVo; -import com.microservices.dms.achievementLibrary.domain.Achievements; -import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; -import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.domain.*; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import org.apache.ibatis.annotations.MapKey; @@ -129,4 +126,8 @@ public interface AchievementsMapper { List getAllId(); List getAreaStatistic(@Param("areaKey") String areaKey); + + List getRelatedAch(@Param("id")Long id, @Param("sourceId") Long sourceId, @Param("paramYear")String paramYear); + + List getDistinctYear(@Param("id")Long id, @Param("sourceId")Long sourceId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index e0fd13b98..6c6f10cbb 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -3,10 +3,7 @@ package com.microservices.dms.achievementLibrary.service; import java.util.List; import java.util.Map; -import com.microservices.dms.achievementLibrary.domain.AchQueryVo; -import com.microservices.dms.achievementLibrary.domain.Achievements; -import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; -import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.domain.*; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; @@ -102,4 +99,6 @@ public interface IAchievementsService { AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId); List getAreaStatistic(String areaKey); + + List getRelatedAch(Long id, Long sourceId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 59bcc91df..6be6eb069 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -4,10 +4,9 @@ import java.util.*; import java.util.stream.Collectors; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; -import com.microservices.dms.achievementLibrary.domain.AchQueryVo; -import com.microservices.dms.achievementLibrary.domain.AreaStatisticVo; -import com.microservices.dms.achievementLibrary.domain.KeyValueVo; +import com.microservices.dms.achievementLibrary.domain.*; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.behaviorImage.domain.AchievementImageVo; import com.microservices.dms.behaviorImage.service.IBehaviorImageService; @@ -20,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; -import com.microservices.dms.achievementLibrary.domain.Achievements; import com.microservices.dms.achievementLibrary.service.IAchievementsService; /** @@ -333,4 +331,19 @@ public class AchievementsServiceImpl implements IAchievementsService { public List getAreaStatistic(String areaKey) { return achievementsMapper.getAreaStatistic(areaKey); } + + @Override + public List getRelatedAch(Long id,Long sourceId) { + List relatedResultList = new ArrayList<>(); + //想根据开源项目id,获取对应的年度信息 + List allYear = achievementsMapper.getDistinctYear(id,sourceId); + if(StringUtils.isNotNull(allYear)) { + //遍历年度信息,获取年度成果数据 + for(String paramYear : allYear) { + List tmpList = achievementsMapper.getRelatedAch(id,sourceId,paramYear); + relatedResultList.addAll(tmpList); + } + } + return relatedResultList; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 3155f0dbf..2e377753e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -471,4 +471,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by z.name, z.field_1, z.remark + + + \ No newline at end of file From 43c2fcffbaf5b6a7d68dd22608dc42085d96cad6 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 27 Apr 2025 14:16:31 +0800 Subject: [PATCH 245/270] =?UTF-8?q?feat(=E5=BC=80=E6=BA=90=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE)=20=E6=A0=B9=E6=8D=AE=E6=9F=A5=E8=AF=A2=E5=86=85?= =?UTF-8?q?=E5=AE=B9=EF=BC=8C=E8=B0=83=E7=94=A8=E6=90=9C=E7=B4=A2=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementTeamController.java | 6 ---- .../controller/AchievementsController.java | 8 ++++++ .../mapper/AchievementsMapper.java | 2 ++ .../service/IAchievementsService.java | 3 ++ .../service/impl/AchievementsServiceImpl.java | 28 +++++++++++++++++++ .../mapper/dms/AchievementsMapper.xml | 20 +++++++++++-- .../dms/ProjectResourceLibraryMapper.xml | 2 +- 7 files changed, 60 insertions(+), 9 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementTeamController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementTeamController.java index 15ffe5ff1..5089cfe66 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementTeamController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementTeamController.java @@ -41,7 +41,6 @@ public class AchievementTeamController extends BaseController /** * 查询成果团队列表 */ - @RequiresPermissions("system:team:list") @GetMapping("/list") public TableDataInfo list(AchievementTeam achievementTeam) { @@ -53,7 +52,6 @@ public class AchievementTeamController extends BaseController /** * 导出成果团队列表 */ - @RequiresPermissions("system:team:export") @Log(title = "成果团队", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, AchievementTeam achievementTeam) @@ -66,7 +64,6 @@ public class AchievementTeamController extends BaseController /** * 获取成果团队详细信息 */ - @RequiresPermissions("system:team:query") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { @@ -76,7 +73,6 @@ public class AchievementTeamController extends BaseController /** * 新增成果团队 */ - @RequiresPermissions("system:team:add") @Log(title = "成果团队", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody AchievementTeam achievementTeam) @@ -87,7 +83,6 @@ public class AchievementTeamController extends BaseController /** * 修改成果团队 */ - @RequiresPermissions("system:team:edit") @Log(title = "成果团队", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody AchievementTeam achievementTeam) @@ -98,7 +93,6 @@ public class AchievementTeamController extends BaseController /** * 删除成果团队 */ - @RequiresPermissions("system:team:remove") @Log(title = "成果团队", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index 7f0a7e8d8..c5d984249 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -218,9 +218,17 @@ public class AchievementsController extends BaseController { /** * 获取开源项目的相关成果 */ + @ApiOperation(value = "获取开源项目的相关成果") @GetMapping("/getRelatedAch") public AjaxResult getRelatedAch(Long id,Long sourceId) { return success(achievementsService.getRelatedAch(id,sourceId)); } + + @ApiOperation(value = "搜索行为数据记录") + @GetMapping("/getSearchResult") + public AjaxResult getSearchResult(String achName,Long userId) + { + return success(achievementsService.getSearchResult(achName,userId)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 28c7de5dc..e721d77e9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -130,4 +130,6 @@ public interface AchievementsMapper { List getRelatedAch(@Param("id")Long id, @Param("sourceId") Long sourceId, @Param("paramYear")String paramYear); List getDistinctYear(@Param("id")Long id, @Param("sourceId")Long sourceId); + + List selectAchievementsByName(@Param("achName") String achName); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 6c6f10cbb..ffce9cfb2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -101,4 +101,7 @@ public interface IAchievementsService { List getAreaStatistic(String areaKey); List getRelatedAch(Long id, Long sourceId); + + int getSearchResult(String achName, Long userId); + } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 6be6eb069..f6f29220d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -11,6 +11,7 @@ import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.behaviorImage.domain.AchievementImageVo; import com.microservices.dms.behaviorImage.service.IBehaviorImageService; import com.microservices.dms.resourceLibrary.domain.Clicker; +import com.microservices.dms.resourceLibrary.domain.Searcher; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; @@ -346,4 +347,31 @@ public class AchievementsServiceImpl implements IAchievementsService { } return relatedResultList; } + + /** + * 根据查询内容,调用搜索行为接口 + * @param achName + * @param userId + */ + @Override + public int getSearchResult(String achName, Long userId) { + int num = 0; + if (StringUtils.isEmpty(achName)){ + return num; + } + List idList = achievementsMapper.selectAchievementsByName(achName); + if(StringUtils.isNotNull(idList)) { + for (Long searchId : idList) { + Searcher e = new Searcher(); + e.setCreatedAt(DateUtils.getNowDate()); + e.setUserId(userId); + e.setSearchId(searchId); + e.setExtInfo(achName); + e.setSearchType("Achievements"); + num = taskResourceLibraryMapper.insertSearcher(e); + num++; + } + } + return num; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 2e377753e..90c4259dd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -479,9 +479,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index 9207ce8ce..d6bede97b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -50,7 +50,7 @@ + + + and nickname like concat('%', #{userName}, '%') + + + + + + + + \ No newline at end of file From 04f43e8f99de5e6d38c38837c4a3d066cf3427eb Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 29 Apr 2025 16:29:17 +0800 Subject: [PATCH 248/270] =?UTF-8?q?fix(=E6=B4=BB=E8=B7=83=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=B5=84=E6=BA=90=E5=BA=93=E3=80=81=E6=B4=BB=E8=B7=83?= =?UTF-8?q?=E7=94=A8=E6=88=B7)=20=E6=B4=BB=E8=B7=83=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=BA=93=E3=80=81=E6=B4=BB=E8=B7=83=E7=94=A8?= =?UTF-8?q?=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BehaviorImageController.java | 45 ++++++ .../domain/UserCompetitionTotalVo.java | 46 ++++++ .../domain/UserExpertTotalVo.java | 44 +++++ .../behaviorImage/domain/UserMemoTotalVo.java | 45 ++++++ .../domain/UserProjectTotalVo.java | 84 ++++++++++ .../behaviorImage/domain/UserTaskTotalVo.java | 46 ++++++ .../behaviorImage/domain/UserTypeTotalVo.java | 67 ++++++++ .../mapper/BehaviorImageMapper.java | 17 ++ .../service/IBehaviorImageService.java | 19 ++- .../impl/BehaviorImageServiceImpl.java | 152 +++++++++++++++++- .../mapper/dms/BehaviorImageMapper.xml | 123 ++++++++++++++ 11 files changed, 683 insertions(+), 5 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserCompetitionTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserExpertTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserMemoTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserProjectTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTaskTotalVo.java create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTypeTotalVo.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java index 15b5b329f..e570ac4b9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java @@ -116,4 +116,49 @@ public class BehaviorImageController extends BaseController { List list = behaviorImageService.selectActivityUserLibraryList(activityUserLibrary); return getDataTable(list); } + /** + * 根据用户ID,获取用户对应的成果汇总 + */ + @GetMapping(value = "/getUserTypeStatistic") + public AjaxResult getUserTypeStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserTypeStatistic(userId)); + } + + + + @GetMapping(value = "/getUserProjectStatistic") + @ApiOperation("/获取用户开源项目相关数据") + public AjaxResult getUserProjectStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserProjectStatistic(userId)); + } + + @GetMapping(value = "/getUserTaskStatistic") + @ApiOperation("/获取用户创客任务相关数据") + public AjaxResult getUserTaskStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserTaskStatistic(userId)); + } + + @GetMapping(value = "/getUserCompStatistic") + @ApiOperation("/获取用户开放竞赛相关数据") + public AjaxResult getUserCompStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserCompStatistic(userId)); + } + + @GetMapping(value = "/getUserMemoStatistic") + @ApiOperation("/获取用户论坛交流相关数据") + public AjaxResult getUserMemoStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserMemoStatistic(userId)); + } + + @GetMapping(value = "/getUserExpertStatistic") + @ApiOperation("/获取用户专家资源相关数据") + public AjaxResult getUserExpertStatistic(@PathVariable("userId") Long userId) + { + return AjaxResult.success(behaviorImageService.getUserExpertStatistic(userId)); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserCompetitionTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserCompetitionTotalVo.java new file mode 100644 index 000000000..048465e59 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserCompetitionTotalVo.java @@ -0,0 +1,46 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserCompetitionTotalVo { + //创建竞赛数 + private Long joinCompetitionCount; + //关注竞赛数 + private Long watchCompetitionCount; + //报名数 + private Long signUpCount; + //提交作品数 + private Long submitWorkCount; + + + public Long getJoinCompetitionCount() { + return joinCompetitionCount; + } + + public void setJoinCompetitionCount(Long joinCompetitionCount) { + this.joinCompetitionCount = joinCompetitionCount; + } + + public Long getWatchCompetitionCount() { + return watchCompetitionCount; + } + + public void setWatchCompetitionCount(Long watchCompetitionCount) { + this.watchCompetitionCount = watchCompetitionCount; + } + + public Long getSignUpCount() { + return signUpCount; + } + + public void setSignUpCount(Long signUpCount) { + this.signUpCount = signUpCount; + } + + public Long getSubmitWorkCount() { + return submitWorkCount; + } + + public void setSubmitWorkCount(Long submitWorkCount) { + this.submitWorkCount = submitWorkCount; + } + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserExpertTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserExpertTotalVo.java new file mode 100644 index 000000000..bab99b6a7 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserExpertTotalVo.java @@ -0,0 +1,44 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserExpertTotalVo { + //关注专家数 + private Long watchExpertCount; + //收藏专家数 + private Long favoriteExpertCount; + //评审竞赛数 + private Long aduitCompetitionCount; + //评审任务数 + private Long aduitTaskCount; + + public Long getWatchExpertCount() { + return watchExpertCount; + } + + public void setWatchExpertCount(Long watchExpertCount) { + this.watchExpertCount = watchExpertCount; + } + + public Long getFavoriteExpertCount() { + return favoriteExpertCount; + } + + public void setFavoriteExpertCount(Long favoriteExpertCount) { + this.favoriteExpertCount = favoriteExpertCount; + } + + public Long getAduitCompetitionCount() { + return aduitCompetitionCount; + } + + public void setAduitCompetitionCount(Long aduitCompetitionCount) { + this.aduitCompetitionCount = aduitCompetitionCount; + } + + public Long getAduitTaskCount() { + return aduitTaskCount; + } + + public void setAduitTaskCount(Long aduitTaskCount) { + this.aduitTaskCount = aduitTaskCount; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserMemoTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserMemoTotalVo.java new file mode 100644 index 000000000..7910a3a73 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserMemoTotalVo.java @@ -0,0 +1,45 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserMemoTotalVo { +// private Long managerMemoCount; + //参与帖子 + private Long joinMemoCount; + //创建帖子 + private Long createMemoCount; + //回复帖子 + private Long replayMemoCount; + //关注帖子 + private Long watchMemoCount; + + public Long getJoinMemoCount() { + return joinMemoCount; + } + + public void setJoinMemoCount(Long joinMemoCount) { + this.joinMemoCount = joinMemoCount; + } + + public Long getCreateMemoCount() { + return createMemoCount; + } + + public void setCreateMemoCount(Long createMemoCount) { + this.createMemoCount = createMemoCount; + } + + public Long getReplayMemoCount() { + return replayMemoCount; + } + + public void setReplayMemoCount(Long replayMemoCount) { + this.replayMemoCount = replayMemoCount; + } + + public Long getWatchMemoCount() { + return watchMemoCount; + } + + public void setWatchMemoCount(Long watchMemoCount) { + this.watchMemoCount = watchMemoCount; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserProjectTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserProjectTotalVo.java new file mode 100644 index 000000000..faccc01b8 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserProjectTotalVo.java @@ -0,0 +1,84 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserProjectTotalVo { + //创建项目数 + private Long createProjectCount; + //参与项目数 + private Long joinProjectCount; + //fork项目数 + private Long forkProjectCount; + //点赞项目数 + private Long praiseProjectCount; + //关注项目数 + private Long watchProjectCount; + //提交代码数 + private Long commitSum; + //issue相关数 + private Long issueSum; + //合并代码数 + private Long prSum; + + public Long getCreateProjectCount() { + return createProjectCount; + } + + public void setCreateProjectCount(Long createProjectCount) { + this.createProjectCount = createProjectCount; + } + + public Long getJoinProjectCount() { + return joinProjectCount; + } + + public void setJoinProjectCount(Long joinProjectCount) { + this.joinProjectCount = joinProjectCount; + } + + public Long getForkProjectCount() { + return forkProjectCount; + } + + public void setForkProjectCount(Long forkProjectCount) { + this.forkProjectCount = forkProjectCount; + } + + public Long getPraiseProjectCount() { + return praiseProjectCount; + } + + public void setPraiseProjectCount(Long praiseProjectCount) { + this.praiseProjectCount = praiseProjectCount; + } + + public Long getWatchProjectCount() { + return watchProjectCount; + } + + public void setWatchProjectCount(Long watchProjectCount) { + this.watchProjectCount = watchProjectCount; + } + + public Long getCommitSum() { + return commitSum; + } + + public void setCommitSum(Long commitSum) { + this.commitSum = commitSum; + } + + public Long getIssueSum() { + return issueSum; + } + + public void setIssueSum(Long issueSum) { + this.issueSum = issueSum; + } + + public Long getPrSum() { + return prSum; + } + + public void setPrSum(Long prSum) { + this.prSum = prSum; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTaskTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTaskTotalVo.java new file mode 100644 index 000000000..ad3d4cff8 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTaskTotalVo.java @@ -0,0 +1,46 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserTaskTotalVo { + //创建任务数 + private Long createTaskCount; + //任务交稿数 + private Long submitPapersCount; + //关注任务数 + private Long watchTaskCount; + //参加任务数 + private Long joinTaskCount; + + + public Long getCreateTaskCount() { + return createTaskCount; + } + + public void setCreateTaskCount(Long createTaskCount) { + this.createTaskCount = createTaskCount; + } + + public Long getSubmitPapersCount() { + return submitPapersCount; + } + + public void setSubmitPapersCount(Long submitPapersCount) { + this.submitPapersCount = submitPapersCount; + } + + public Long getWatchTaskCount() { + return watchTaskCount; + } + + public void setWatchTaskCount(Long watchTaskCount) { + this.watchTaskCount = watchTaskCount; + } + + public Long getJoinTaskCount() { + return joinTaskCount; + } + + public void setJoinTaskCount(Long joinTaskCount) { + this.joinTaskCount = joinTaskCount; + } + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTypeTotalVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTypeTotalVo.java new file mode 100644 index 000000000..f08911901 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/domain/UserTypeTotalVo.java @@ -0,0 +1,67 @@ +package com.microservices.dms.behaviorImage.domain; + +public class UserTypeTotalVo { + private String resultType; + private Long watchSum; + private Long favoriteSum; + private Long downloadSum; + private Long clickSum; + private Long searchSum; + private Long praiseSum; + + public String getResultType() { + return resultType; + } + + public void setResultType(String resultType) { + this.resultType = resultType; + } + + public Long getWatchSum() { + return watchSum; + } + + public void setWatchSum(Long watchSum) { + this.watchSum = watchSum; + } + + public Long getFavoriteSum() { + return favoriteSum; + } + + public void setFavoriteSum(Long favoriteSum) { + this.favoriteSum = favoriteSum; + } + + public Long getDownloadSum() { + return downloadSum; + } + + public void setDownloadSum(Long downloadSum) { + this.downloadSum = downloadSum; + } + + public Long getClickSum() { + return clickSum; + } + + public void setClickSum(Long clickSum) { + this.clickSum = clickSum; + } + + public Long getSearchSum() { + return searchSum; + } + + public void setSearchSum(Long searchSum) { + this.searchSum = searchSum; + } + + public Long getPraiseSum() { + return praiseSum; + } + + public void setPraiseSum(Long praiseSum) { + this.praiseSum = praiseSum; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java index 2b68862da..c1dcf5710 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java @@ -5,6 +5,7 @@ import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.behaviorImage.domain.ActivityUserLibrary; import com.microservices.dms.behaviorImage.domain.BehaviorImageWeight; +import com.microservices.dms.behaviorImage.domain.UserTypeTotalVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -75,9 +76,25 @@ public interface BehaviorImageMapper { */ public int deleteBehaviorImageWeightByIds(Long[] ids); + List getUserProjecttatistic(@Param("userId")Long userId); + + List getUserTaskStatistic(@Param("userId")Long userId); + List selectActivityUserLibraryList(ActivityUserLibrary activityUserLibrary); Long getrelatedProjectCount(@Param("userId")Long userId); Long getrelatedTaskCount(@Param("userId")Long userId); + + List getUserCompStatistic(@Param("userId")Long userId); + + Long getrelatedCompetitionCount(@Param("userId")Long userId); + + List getUserMemoStatistic(@Param("userId")Long userId); + + Long getrelatedMemoCount(@Param("userId")Long userId); + + List getUserExperttatistic(@Param("userId")Long userId); + + List getUserTypeStatistic(@Param("userId")Long userId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java index a6914c73e..76f67ea76 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java @@ -1,8 +1,6 @@ package com.microservices.dms.behaviorImage.service; -import com.microservices.dms.behaviorImage.domain.ActivityUserLibrary; -import com.microservices.dms.behaviorImage.domain.BehaviorImageWeight; -import com.microservices.dms.behaviorImage.domain.AchievementImageVo; +import com.microservices.dms.behaviorImage.domain.*; import java.util.List; @@ -62,4 +60,17 @@ public interface IBehaviorImageService { * @param activityUserLibrary 活跃用户资源库 * @return 活跃用户资源库集合 */ - List selectActivityUserLibraryList(ActivityUserLibrary activityUserLibrary);} + List selectActivityUserLibraryList(ActivityUserLibrary activityUserLibrary); + + List getUserTypeStatistic(Long userId); + + UserProjectTotalVo getUserProjectStatistic(Long userId); + + UserTaskTotalVo getUserTaskStatistic(Long userId); + + UserCompetitionTotalVo getUserCompStatistic(Long userId); + + UserMemoTotalVo getUserMemoStatistic(Long userId); + + UserExpertTotalVo getUserExpertStatistic(Long userId); +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java index 2a1c2536c..6fe0a513d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java @@ -161,6 +161,153 @@ public class BehaviorImageServiceImpl implements IBehaviorImageService { return behaviorImageMapper.deleteBehaviorImageWeightById(id); } + + /** + * 用户新增分类数据统计 + * @param userId + * @return + */ + public List getUserTypeStatistic(Long userId) { + return behaviorImageMapper.getUserTypeStatistic(userId); + } + + + + /** + * 根据用户ID,获取开源项目相关汇总 + * @param userId + * @return + */ + @Override + public UserProjectTotalVo getUserProjectStatistic(Long userId) { + UserProjectTotalVo userProjectTotalVo = new UserProjectTotalVo(); + List resultVo = behaviorImageMapper.getUserProjecttatistic(userId); + if(StringUtils.isNotNull(resultVo)) { + for(KeyValueVo temResult : resultVo) { + Long result = temResult.getValue(); + if(temResult.getKey().equals("createProjectCount")) { + userProjectTotalVo.setCreateProjectCount(result); + }else if(temResult.getKey().equals("joinProjectCount")){ + userProjectTotalVo.setJoinProjectCount(result); + }else if(temResult.getKey().equals("forkProjectCount")){ + userProjectTotalVo.setForkProjectCount(result); + }else if(temResult.getKey().equals("issueSum")){ + userProjectTotalVo.setIssueSum(result); + }else if(temResult.getKey().equals("prSum")){ + userProjectTotalVo.setPrSum(result); + }else if(temResult.getKey().equals("commitSum")){ + userProjectTotalVo.setCommitSum(result); + }else if(temResult.getKey().equals("watchProjectCount")){ + userProjectTotalVo.setWatchProjectCount(result); + }else if(temResult.getKey().equals("praiseProjectCount")){ + userProjectTotalVo.setPraiseProjectCount(result); + } + } + } + return userProjectTotalVo; + } + + + + /** + * 根据用户ID,获取创客任务相关汇总 + * @param userId + * @return + */ + @Override + public UserTaskTotalVo getUserTaskStatistic(Long userId) { + UserTaskTotalVo userTaskTotalVo = new UserTaskTotalVo(); + List resultVo = behaviorImageMapper.getUserTaskStatistic(userId); + if(StringUtils.isNotNull(resultVo)) { + for(KeyValueVo temResult : resultVo) { + Long result = temResult.getValue(); + if(temResult.getKey().equals("createTaskCount")) { + userTaskTotalVo.setCreateTaskCount(result); + }else if(temResult.getKey().equals("submitPapersCount")){ + userTaskTotalVo.setSubmitPapersCount(result); + }else if(temResult.getKey().equals("watchTaskCount")){ + userTaskTotalVo.setWatchTaskCount(result); + } + } + } + return userTaskTotalVo; + } + + /** + * 根据用户ID,获取开放竞赛相关汇总 + * @param userId + * @return + */ + @Override + public UserCompetitionTotalVo getUserCompStatistic(Long userId) { + UserCompetitionTotalVo userCompetitionTotalVo = new UserCompetitionTotalVo(); + List resultVo = behaviorImageMapper.getUserCompStatistic(userId); + if(StringUtils.isNotNull(resultVo)) { + for(KeyValueVo temResult : resultVo) { + Long result = temResult.getValue(); + if(temResult.getKey().equals("joinCompetitionCount")) { + userCompetitionTotalVo.setJoinCompetitionCount(result); + }else if(temResult.getKey().equals("watchCompetitionCount")){ + userCompetitionTotalVo.setWatchCompetitionCount(result); + }else if(temResult.getKey().equals("signUpCount")){ + userCompetitionTotalVo.setSignUpCount(result); + }else if(temResult.getKey().equals("submitWorkCount")){ + userCompetitionTotalVo.setSubmitWorkCount(result); + } + } + } + return userCompetitionTotalVo; + } + + /** + * 根据用户ID, 获取用户论坛交流相关数据 + * @param userId + * @return + */ + @Override + public UserMemoTotalVo getUserMemoStatistic(Long userId) { + UserMemoTotalVo userMemoTotalVo = new UserMemoTotalVo(); + List resultVo = behaviorImageMapper.getUserMemoStatistic(userId); + if(StringUtils.isNotNull(resultVo)) { + for(KeyValueVo temResult : resultVo) { + Long result = temResult.getValue(); + if(temResult.getKey().equals("createMemoCount")) { + userMemoTotalVo.setCreateMemoCount(result); + }else if(temResult.getKey().equals("replayMemoCount")){ + userMemoTotalVo.setReplayMemoCount(result); + }else if(temResult.getKey().equals("watchMemoCount")){ + userMemoTotalVo.setWatchMemoCount(result); + } + } + } + return userMemoTotalVo; + } + /** + * 根据用户ID, 获取用户专家资源相关数据 + * @param userId + * @return + */ + @Override + public UserExpertTotalVo getUserExpertStatistic(Long userId) { + UserExpertTotalVo userExpertTotalVo = new UserExpertTotalVo(); + List resultVo = behaviorImageMapper.getUserExperttatistic(userId); + if(StringUtils.isNotNull(resultVo)) { + for(KeyValueVo temResult : resultVo) { + Long result = temResult.getValue(); + if(temResult.getKey().equals("watchExpertCount")) { + userExpertTotalVo.setWatchExpertCount(result); + }else if(temResult.getKey().equals("favoriteExpertCount")){ + userExpertTotalVo.setFavoriteExpertCount(result); + }else if(temResult.getKey().equals("aduitCompetitionCount")){ + userExpertTotalVo.setAduitCompetitionCount(result); + }else if(temResult.getKey().equals("aduitTaskCount")){ + userExpertTotalVo.setAduitTaskCount(result); + } + } + } + return userExpertTotalVo; + } + /** * 用户资源库 * @param activityUserLibrary 活跃用户资源库 @@ -174,8 +321,11 @@ public class BehaviorImageServiceImpl implements IBehaviorImageService { a.setRelatedProject(relatedProject); Long relatedTask= behaviorImageMapper.getrelatedTaskCount(a.getUserId()); a.setRelatedTask(relatedTask); + Long relatedCompetition= behaviorImageMapper.getrelatedCompetitionCount(a.getUserId()); + a.setRelatedCompetition(relatedCompetition); + Long relatedMemo= behaviorImageMapper.getrelatedMemoCount(a.getUserId()); + a.setRelatedMemo(relatedMemo); } return list; } - } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml index 323cba2c1..102f5d49e 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/BehaviorImageMapper.xml @@ -162,4 +162,127 @@ + + + + + + + + + + + + + + + \ No newline at end of file From 3c557a8dc94158c232f6f037b112d809f9eb7c0b Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 30 Apr 2025 09:49:03 +0800 Subject: [PATCH 249/270] =?UTF-8?q?fix(=E6=B4=BB=E8=B7=83=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=B5=84=E6=BA=90=E5=BA=93)=20=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=B5=84=E6=BA=90=E5=BA=93=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AchievementsServiceImpl.java | 2 +- .../controller/BehaviorImageController.java | 10 ++++++++++ .../dms/behaviorImage/mapper/BehaviorImageMapper.java | 2 ++ .../behaviorImage/service/IBehaviorImageService.java | 3 +++ .../service/impl/BehaviorImageServiceImpl.java | 5 +++++ .../main/resources/mapper/dms/AchievementsMapper.xml | 6 +++--- .../main/resources/mapper/dms/BehaviorImageMapper.xml | 10 ++++++++++ 7 files changed, 34 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index f6f29220d..13a5e87e2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -210,7 +210,7 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public List> get7DayAdd(AchQueryVo achQueryVo) { - Date[] days = DateUtil.getDays(1, 7); + Date[] days = DateUtil.getDays(0, 6); Map w = achievementsMapper.getAchievement(days[0], days[1], achQueryVo.getSource()) .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java index e570ac4b9..72ffe7020 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/controller/BehaviorImageController.java @@ -161,4 +161,14 @@ public class BehaviorImageController extends BaseController { { return AjaxResult.success(behaviorImageService.getUserExpertStatistic(userId)); } + + /** + * 获取活跃用户相关统计数据 + */ + @GetMapping(value = "/getActivityStatistic") + @ApiOperation("获取用户资源库相关统计数据") + public AjaxResult getActivityStatistic() + { + return AjaxResult.success(behaviorImageService.getActivityStatistic()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java index c1dcf5710..f06c422bc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java @@ -97,4 +97,6 @@ public interface BehaviorImageMapper { List getUserExperttatistic(@Param("userId")Long userId); List getUserTypeStatistic(@Param("userId")Long userId); + + KeyValueVo getActivityStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java index 76f67ea76..e1d0c9d9c 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java @@ -1,5 +1,6 @@ package com.microservices.dms.behaviorImage.service; +import com.microservices.dms.achievementLibrary.domain.KeyValueVo; import com.microservices.dms.behaviorImage.domain.*; import java.util.List; @@ -73,4 +74,6 @@ public interface IBehaviorImageService { UserMemoTotalVo getUserMemoStatistic(Long userId); UserExpertTotalVo getUserExpertStatistic(Long userId); + + KeyValueVo getActivityStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java index 6fe0a513d..884578f5b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java @@ -308,6 +308,11 @@ public class BehaviorImageServiceImpl implements IBehaviorImageService { return userExpertTotalVo; } + @Override + public KeyValueVo getActivityStatistic() { + return behaviorImageMapper.getActivityStatistic(); + } + /** * 用户资源库 * @param activityUserLibrary 活跃用户资源库 diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 90c4259dd..1516096ba 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -293,13 +293,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + \ No newline at end of file From de341e0aec44cba845c2bf6ec0a339997260958b Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 6 May 2025 11:31:07 +0800 Subject: [PATCH 250/270] =?UTF-8?q?fix(=E7=94=A8=E6=88=B7=E7=94=BB?= =?UTF-8?q?=E5=83=8F)=20=E7=94=A8=E6=88=B7=E7=94=BB=E5=83=8F=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/AchRelatedResult.java | 24 +++++++++++++++++++ .../domain/AchRelatedVo.java | 9 +++++++ .../service/IAchievementsService.java | 2 +- .../service/impl/AchievementsServiceImpl.java | 13 ++++++---- .../mapper/BehaviorImageMapper.java | 2 +- .../service/IBehaviorImageService.java | 2 +- .../impl/BehaviorImageServiceImpl.java | 2 +- .../mapper/TaskResourceLibraryMapper.java | 1 + .../mapper/dms/AchievementsMapper.xml | 7 +++--- .../mapper/dms/TaskResourceLibraryMapper.xml | 15 ++++++++++-- 10 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedResult.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedResult.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedResult.java new file mode 100644 index 000000000..58ce387e7 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedResult.java @@ -0,0 +1,24 @@ +package com.microservices.dms.achievementLibrary.domain; + +import java.util.List; + +public class AchRelatedResult { + private String year; + private List achRelatedVoList; + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public List getAchRelatedVoList() { + return achRelatedVoList; + } + + public void setAchRelatedVoList(List achRelatedVoList) { + this.achRelatedVoList = achRelatedVoList; + } +} diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java index 8495dcbbb..42b7ac5a9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/AchRelatedVo.java @@ -8,6 +8,7 @@ public class AchRelatedVo { private String achMonthDay; private String source; private Long sourceId; + private String achRelateName; public Long getId() { return id; @@ -64,4 +65,12 @@ public class AchRelatedVo { public void setSourceId(Long sourceId) { this.sourceId = sourceId; } + + public String getAchRelateName() { + return achRelateName; + } + + public void setAchRelateName(String achRelateName) { + this.achRelateName = achRelateName; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index ffce9cfb2..592d68918 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -100,7 +100,7 @@ public interface IAchievementsService { List getAreaStatistic(String areaKey); - List getRelatedAch(Long id, Long sourceId); + List getRelatedAch(Long id, Long sourceId); int getSearchResult(String achName, Long userId); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 13a5e87e2..3cbf5d928 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -257,7 +257,7 @@ public class AchievementsServiceImpl implements IAchievementsService { Long enterpriseCount = achievementsMapper.indexSchoolEnterpriseStatistic("4", "2"); res.put("enterpriseCount", enterpriseCount); Clicker clicker = new Clicker(); - clicker.setClickType("schoolEnterprise"); + clicker.setClickType("Achievements"); long clickCount = taskResourceLibraryMapper.countClicker(clicker); res.put("clickCount", clickCount); return res; @@ -274,7 +274,7 @@ public class AchievementsServiceImpl implements IAchievementsService { res.put("auditCompetitionAuditExpertCount", auditCompetitionAuditExpertCount); Clicker clicker = new Clicker(); clicker.setClickType("Experts"); - long clickCount = taskResourceLibraryMapper.countClicker(clicker); + long clickCount = taskResourceLibraryMapper.countClickerSimple(clicker); res.put("clickCount", clickCount); return res; } @@ -334,16 +334,19 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public List getRelatedAch(Long id,Long sourceId) { - List relatedResultList = new ArrayList<>(); + public List getRelatedAch(Long id,Long sourceId) { + List relatedResultList = new ArrayList<>(); //想根据开源项目id,获取对应的年度信息 List allYear = achievementsMapper.getDistinctYear(id,sourceId); if(StringUtils.isNotNull(allYear)) { + AchRelatedResult relatedResult = new AchRelatedResult(); //遍历年度信息,获取年度成果数据 for(String paramYear : allYear) { + relatedResult.setYear(paramYear); List tmpList = achievementsMapper.getRelatedAch(id,sourceId,paramYear); - relatedResultList.addAll(tmpList); + relatedResult.setAchRelatedVoList(tmpList); } + relatedResultList.add(relatedResult); } return relatedResultList; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java index f06c422bc..36bb29ad4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/mapper/BehaviorImageMapper.java @@ -98,5 +98,5 @@ public interface BehaviorImageMapper { List getUserTypeStatistic(@Param("userId")Long userId); - KeyValueVo getActivityStatistic(); + List getActivityStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java index e1d0c9d9c..485bb949d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/IBehaviorImageService.java @@ -75,5 +75,5 @@ public interface IBehaviorImageService { UserExpertTotalVo getUserExpertStatistic(Long userId); - KeyValueVo getActivityStatistic(); + List getActivityStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java index 884578f5b..a8e17f5b3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/behaviorImage/service/impl/BehaviorImageServiceImpl.java @@ -309,7 +309,7 @@ public class BehaviorImageServiceImpl implements IBehaviorImageService { } @Override - public KeyValueVo getActivityStatistic() { + public List getActivityStatistic() { return behaviorImageMapper.getActivityStatistic(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index 77abcb7b8..f88455e04 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -17,6 +17,7 @@ public interface TaskResourceLibraryMapper { int insertClicker(Clicker record); long countClicker(Clicker record); + long countClickerSimple(Clicker record); int insertSearcher(Searcher record); int insertDownloader(Downloader record); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 1516096ba..a0145f94d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -305,7 +305,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select COUNT(*) as taskCount, - (select COUNT(*) from clickers where click_type = 'makerSpaceTask') as clickCount, + (select count(1) from clickers c inner join achievements a ON a.id = c.click_id where click_type = 'Achievements' and a.source='2') as clickCount, IFNULL(SUM(is_expert_audit), 0) as expertAuditCount from achievements where source = '2'; @@ -321,7 +321,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select count(*) from clickers + select count(*) from clickers c inner join achievements a ON a.id = c.click_id - click_type = #{clickType} + c.click_type = #{clickType} + + and a.source='2' + + + + + INSERT INTO searchers From 475756bd0d7dacb38a96532406afd9bccb9c3b10 Mon Sep 17 00:00:00 2001 From: 13036795865 Date: Wed, 7 May 2025 08:54:14 +0800 Subject: [PATCH 251/270] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=A5=E6=BA=90=E8=8E=B7=E5=8F=96=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E9=A2=86=E5=9F=9F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AchievementsController.java | 10 +++++- .../domain/Achievements.java | 10 ++++++ .../mapper/AchievementsMapper.java | 4 +++ .../service/IAchievementsService.java | 1 + .../service/impl/AchievementsServiceImpl.java | 10 ++++++ .../domain/ProjectResourceLibrary.java | 10 ++++++ .../mapper/dms/AchievementsMapper.xml | 34 +++++++++++++++++++ 7 files changed, 78 insertions(+), 1 deletion(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java index c5d984249..481d400bd 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/controller/AchievementsController.java @@ -120,7 +120,7 @@ public class AchievementsController extends BaseController { } /** - * 根据领域分类名称,获取领域相关数据 + * 根据领域分类名称,获取领域相关数据(创客任务、开放竞赛、校企成果) */ @ApiOperation("根据领域分类名称,获取领域相关数据") @GetMapping("/getAreasByName") @@ -128,6 +128,14 @@ public class AchievementsController extends BaseController { return success(achievementsService.getAreasByName(areaName)); } + + @ApiOperation("根据领域分类名称,获取领域相关数据") + @GetMapping("/getProjectAreasByName") + public AjaxResult getProjectAreasByName(String areaName) { + return success(achievementsService.getProjectAreasByName(areaName)); + } + + /* 获取全部成果,根据成果名称、成果领域、成果来源进行查询 * @return */ diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java index 50b622a10..ce8ce70f3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/Achievements.java @@ -35,6 +35,8 @@ public class Achievements extends BaseEntity { */ @Excel(name = "成果领域1") private String field1; + //成果领域名称 + private String field1Name; /** * 成果领域2 @@ -176,6 +178,14 @@ public class Achievements extends BaseEntity { private Long attachmentCount; private Integer isExpertAudit; + public String getField1Name() { + return field1Name; + } + + public void setField1Name(String field1Name) { + this.field1Name = field1Name; + } + public Long getWatcherSum() { return watcherSum; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index e721d77e9..0e8dcd031 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -132,4 +132,8 @@ public interface AchievementsMapper { List getDistinctYear(@Param("id")Long id, @Param("sourceId")Long sourceId); List selectAchievementsByName(@Param("achName") String achName); + + String getField1NameByParam(@Param("source")String source, @Param("id") Long id); + + List getProjectAreasByName(@Param("areaName") String areaName); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index ffce9cfb2..8eb2c2b83 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -104,4 +104,5 @@ public interface IAchievementsService { int getSearchResult(String achName, Long userId); + List getProjectAreasByName(String areaName); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 13a5e87e2..9a535b8d5 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -166,6 +166,11 @@ public class AchievementsServiceImpl implements IAchievementsService { List list = achievementsMapper.selectAchievementsByParam(achQueryVo); //遍历成果数据,获取对应成果的点击数 for (Achievements a : list) { + //根据id获取领域名称 + String field1Name = achievementsMapper.getField1NameByParam(a.getSource(),a.getId()); + if(StringUtils.isNotNull(field1Name)){ + a.setField1Name(field1Name); + } Long clickSum = achievementsMapper.getAchievementClickSum(a.getId()); a.setClickSum(clickSum); } @@ -374,4 +379,9 @@ public class AchievementsServiceImpl implements IAchievementsService { } return num; } + + @Override + public List getProjectAreasByName(String areaName) { + return achievementsMapper.getProjectAreasByName(areaName); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java index e5cb23970..6c7b26657 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -21,6 +21,8 @@ public class ProjectResourceLibrary extends BaseEntity { private String projectName; //项目领域 private String projectDomain; + //项目领域名称 + private String projectDomainName; // private String identifier; //开源项目ID @@ -246,4 +248,12 @@ public class ProjectResourceLibrary extends BaseEntity { public String getAttachments() { return attachments; } + + public String getProjectDomainName() { + return projectDomainName; + } + + public void setProjectDomainName(String projectDomainName) { + this.projectDomainName = projectDomainName; + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 1516096ba..25c511695 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -343,6 +343,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + \ No newline at end of file From b7569966393bbea1824192c5a19d82d0d2e1e6d3 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 7 May 2025 09:33:49 +0800 Subject: [PATCH 252/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E3=80=91?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F=E5=A4=84=E7=90=86=E3=80=81?= =?UTF-8?q?=E3=80=90=E8=B5=84=E6=BA=90=E5=BA=93=E3=80=91=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E8=B5=84=E6=BA=90=E5=BA=93=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=EF=BC=8C=E6=8E=A5=E5=8F=A3401=E3=80=81=E3=80=90=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E3=80=91=E9=A1=B9=E7=9B=AE=E6=80=BB=E6=95=B0/=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=85=AC=E5=BC=80=E6=95=B0=E9=9C=80=E8=A6=81=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/common/controller/OpenController.java | 148 ++++++++++++++++++ .../mapper/dms/AchievementsMapper.xml | 1 + .../dms/CompetitionResourceLibraryMapper.xml | 1 + .../dms/ExpertResourceLibraryMapper.xml | 2 +- .../dms/ProjectResourceLibraryMapper.xml | 7 +- .../mapper/dms/TaskResourceLibraryMapper.xml | 1 + 6 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java new file mode 100644 index 000000000..59cf3dcf4 --- /dev/null +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java @@ -0,0 +1,148 @@ +package com.microservices.dms.common.controller; + +import com.microservices.common.core.web.controller.BaseController; +import com.microservices.common.core.web.domain.AjaxResult; +import com.microservices.common.core.web.page.TableDataInfo; +import com.microservices.dms.achievementLibrary.domain.AchQueryVo; +import com.microservices.dms.achievementLibrary.service.IAchievementsService; +import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; +import com.microservices.dms.resourceLibrary.service.IExpertResourceLibraryService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author otto + */ +@RestController +@Api(tags = "数据管理体系-公开接口") +@RequestMapping("/open") +@RefreshScope +public class OpenController extends BaseController { + + @Autowired + private IAchievementsService achievementsService; + + @Autowired + private IExpertResourceLibraryService expertResourceLibraryService; + + /** + * 获取精选成果 + * + * @return + */ + @ApiOperation("获取精选成果") + @GetMapping("/achievements/getChoiceImport") + public AjaxResult getChoiceImport() { + return success(achievementsService.getChoiceImport()); + } + + /** + * 根据成果来源对成果数据进行分类统计 + * + * @return + */ + @ApiOperation("根据成果来源对成果数据进行分类统计") + @GetMapping("/achievements/getTjBySources") + public AjaxResult getTjBySources() { + return success(achievementsService.getTjBySources()); + } + + /** + * 根据成果领域对成功数据进行汇总 + * + * @return + */ + @ApiOperation("根据成果领域对成果数据进行汇总") + @GetMapping("/achievements/getTjByAreas") + public AjaxResult getTjByAreas() { + return success(achievementsService.getTjByAreas()); + } + + /** + * 根据领域分类名称,获取领域相关数据 + */ + @ApiOperation("根据领域分类名称,获取领域相关数据") + @GetMapping("/achievements/getAreasByName") + public AjaxResult getAreasByName(String areaName) { + return success(achievementsService.getAreasByName(areaName)); + } + + /* 获取全部成果,根据成果名称、成果领域、成果来源进行查询 + * @return + */ + @ApiOperation("获取全部成果,根据成果名称、成果领域、成果来源进行查询") + @GetMapping("/achievements/getAllResult") + public TableDataInfo getAllResult(AchQueryVo achQueryVo) { + startPage(); + return getDataTable(achievementsService.getAllResult(achQueryVo)); + } + + @ApiOperation("近七日用户行为数据") + @GetMapping("/achievements/getUerActionData") + public AjaxResult getUerActionData() { + return success(achievementsService.getUerActionData()); + } + + @ApiOperation("热门成果") + @GetMapping("/achievements/getHotAchievement") + public AjaxResult getHotAchievement() { + return success(achievementsService.getHotAchievement()); + } + + @ApiOperation("七日新增") + @GetMapping("/achievements/get7DayAdd") + public AjaxResult get7DayAdd(AchQueryVo achQueryVo) { + return success(achievementsService.get7DayAdd(achQueryVo)); + } + + + @ApiOperation("首页项目统计") + @GetMapping("/achievements/indexProjectStatistic") + public AjaxResult indexProjectStatistic() { + return success(achievementsService.indexProjectStatistic()); + } + + @ApiOperation("首页task统计") + @GetMapping("/achievements/indexTaskStatistic") + public AjaxResult indexTaskStatistic() { + return success(achievementsService.indexTaskStatistic()); + } + + @ApiOperation("首页Competition统计") + @GetMapping("/achievements/indexCompetitionStatistic") + public AjaxResult indexCompetitionStatistic() { + return success(achievementsService.indexCompetitionStatistic()); + } + + @ApiOperation("首页SchoolEnterprise统计") + @GetMapping("/achievements/indexSchoolEnterpriseStatistic") + public AjaxResult indexSchoolEnterpriseStatistic() { + return success(achievementsService.indexSchoolEnterpriseStatistic()); + } + + + @ApiOperation("首页专家统计") + @GetMapping("/achievements/indexExpertStatistic") + public AjaxResult indexExpertStatistic() { + return success(achievementsService.indexExpertStatistic()); + } + + /** + * 查询专家资源库列表 + */ + @GetMapping("/listFront") + public TableDataInfo listFront(ExpertResourceLibrary expertResourceLibrary) + { + startPage(); + List list = expertResourceLibraryService.selectExpertResourceLibraryList2(expertResourceLibrary); + return getDataTable(list); + } + +} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 1e084f506..8d9885bc9 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -71,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and images = #{images} and attachments = #{attachments} and hot_rank = #{hotRank} + and create_by = #{createBy} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index 9faa12b53..2779c0100 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -187,6 +187,7 @@ and image = #{image} and attachment = #{attachment} + order by is_transferred_to_result_library - select COUNT(*) + select COUNT(distinct p.id) from projects p join repositories r on p.id = r.project_id join version_releases v on r.id = v.repository_id @@ -445,7 +445,7 @@ t.name as task_name, t.category_id as task_domain, t.bounty as task_amount, - (select u.login from users u where u.id = p.user_id) as submission_name, + p.number as submission_name, p.created_at as submission_date, (select u.login from users u where u.id = p.user_id) as submitter_name, submission_type, @@ -524,7 +524,7 @@ @@ -532,7 +532,7 @@ From e26876b85cc2f9ea3b6dc821908a5378a6e743dd Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Wed, 7 May 2025 17:08:23 +0800 Subject: [PATCH 254/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E3=80=91=E8=B5=84=E6=BA=90=E5=BA=93-=E6=88=90?= =?UTF-8?q?=E6=9E=9C=E7=AE=A1=E7=90=86=E9=A6=96=E9=A1=B5bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IAchievementsService.java | 2 +- .../service/impl/AchievementsServiceImpl.java | 90 +++++++++++++------ ...hoolEnterpriseAchievementsServiceImpl.java | 3 +- .../ProjectResourceLibraryService.java | 9 +- .../service/TaskResourceLibraryService.java | 4 - .../com/microservices/dms/utils/DateUtil.java | 7 +- .../mapper/dms/AchievementsMapper.xml | 16 ++-- 7 files changed, 83 insertions(+), 48 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java index 52ce4140f..2c14672df 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/IAchievementsService.java @@ -62,7 +62,7 @@ public interface IAchievementsService { */ public int deleteAchievementsById(Long id); - void buildFileInfoByIdents(String img, String att, Map map); + String buildFileInfoByIdents(String aStr, String source); List selectAchievementsFrontList(Achievements achievements); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index b2a183e09..cfd8df110 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -3,6 +3,8 @@ package com.microservices.dms.achievementLibrary.service.impl; import java.util.*; import java.util.stream.Collectors; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; @@ -17,11 +19,14 @@ import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; import com.microservices.dms.achievementLibrary.service.IAchievementsService; +import static com.microservices.dms.utils.UrlUtil.getUrlPath; + /** * 成果Service业务层处理 * @@ -42,6 +47,15 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private IBehaviorImageService behaviorImageService; + @Value("${markerSpaceUrl}") + public String markerSpaceUrl; + + @Value("${http.gitLinkUrl}") + public String gitLinkUrl; + + @Value("${http.gatewayUrl}") + public String gatewayUrl; + /** * 查询成果 @@ -64,7 +78,8 @@ public class AchievementsServiceImpl implements IAchievementsService { public List selectAchievementsList(Achievements achievements) { List list = achievementsMapper.selectAchievementsList(achievements); for (Achievements a : list) { - buildFileInfoByIdents(a.getImages(), a.getAttachments(), a.getParams()); + a.setImages(buildFileInfoByIdents(a.getImages(), a.getSource())); + a.setAttachments(buildFileInfoByIdents(a.getAttachments(), a.getSource())); } return list; } @@ -75,7 +90,8 @@ public class AchievementsServiceImpl implements IAchievementsService { List list = achievementsMapper.selectAchievementsList(achievements); for (Achievements a : list) { a.setDetails(null); - buildFileInfoByIdents(a.getImages(), a.getAttachments(), a.getParams()); + a.setImages(buildFileInfoByIdents(a.getImages(), a.getSource())); + a.setAttachments(buildFileInfoByIdents(a.getAttachments(), a.getSource())); } return list; } @@ -129,19 +145,34 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public void buildFileInfoByIdents(String img, String att, Map map) { -// Set imgs = Arrays.stream(Optional.ofNullable(img).orElse("").split(",")).collect(Collectors.toSet()); -// imgs = imgs.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); -// HashMap imgMap = new HashMap<>(); -// if (!CollectionUtils.isEmpty(imgs)) { -// Optional.ofNullable(achievementsMapper.getFileInfoByIdents(imgs)).orElse(new ArrayList<>()).forEach(s -> { -// imgMap.put(s.get("k"), s.get("v")); -// }); -// } -// map.put("img", imgMap); -// String a = Optional.ofNullable(img).orElse("[]"); -// JSONArray ao = JSONArray.parseArray(a); -// map.put("att", ao); + public String buildFileInfoByIdents(String aStr, String source) { + if (StringUtils.isEmpty(aStr) || StringUtils.isEmpty(source)) { + return aStr; + } + + List> list = JSON.parseObject(aStr,new TypeReference>>() {}); + + if (Objects.equals(source, "1") || Objects.equals(source, "3")) { + concatUrl(list,gitLinkUrl); + } + + if (Objects.equals(source, "2")) { + concatUrl(list,markerSpaceUrl); + } + + if (Objects.equals(source, "4")) { + concatUrl(list,gatewayUrl); + } + + return JSON.toJSONString(list); + } + + private void concatUrl(List> list, String url) { + for (Map map : list) { + String v = map.getOrDefault("v", ""); + String urlPath = getUrlPath(v); + map.put("v", url + urlPath); + } } @@ -167,8 +198,8 @@ public class AchievementsServiceImpl implements IAchievementsService { //遍历成果数据,获取对应成果的点击数 for (Achievements a : list) { //根据id获取领域名称 - String field1Name = achievementsMapper.getField1NameByParam(a.getSource(),a.getId()); - if(StringUtils.isNotNull(field1Name)){ + String field1Name = achievementsMapper.getField1NameByParam(a.getSource(), a.getId()); + if (StringUtils.isNotNull(field1Name)) { a.setField1Name(field1Name); } Long clickSum = achievementsMapper.getAchievementClickSum(a.getId()); @@ -286,7 +317,7 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public List getAreasByName(String areaName) { - return achievementsMapper.getAreasByName(areaName); + return achievementsMapper.getAreasByName(areaName); } @Override @@ -298,7 +329,7 @@ public class AchievementsServiceImpl implements IAchievementsService { public List> get7AddClickById(String id) { Date[] days = DateUtil.getDays(0, 6); - Map w = achievementsMapper.get7AddClickById(days[0], days[1], "Achievements",id) + Map w = achievementsMapper.get7AddClickById(days[0], days[1], "Achievements", id) .stream().collect(Collectors.toMap(KeyValVo::getK, KeyValVo::getV)); List dateStr = DateUtil.getDateStrMMDD(days[0], days[1]); @@ -316,12 +347,12 @@ public class AchievementsServiceImpl implements IAchievementsService { @Override public AchievementBehaviorSumVo getWatchFavoriteStatusById(Long id, Long userId) { - return achievementsMapper.getWatchFavoriteStatusById(id,userId); + return achievementsMapper.getWatchFavoriteStatusById(id, userId); } @Scheduled(cron = "${cron.calculateHotRank}") - public void timingCalcHotRank(){ + public void timingCalcHotRank() { List ids = achievementsMapper.getAllId(); for (Long id : ids) { AchievementImageVo image = behaviorImageService.getAchievementImageById(id); @@ -339,16 +370,16 @@ public class AchievementsServiceImpl implements IAchievementsService { } @Override - public List getRelatedAch(Long id,Long sourceId) { - List relatedResultList = new ArrayList<>(); + public List getRelatedAch(Long id, Long sourceId) { + List relatedResultList = new ArrayList<>(); //想根据开源项目id,获取对应的年度信息 - List allYear = achievementsMapper.getDistinctYear(id,sourceId); - if(StringUtils.isNotNull(allYear)) { + List allYear = achievementsMapper.getDistinctYear(id, sourceId); + if (StringUtils.isNotNull(allYear)) { AchRelatedResult relatedResult = new AchRelatedResult(); //遍历年度信息,获取年度成果数据 - for(String paramYear : allYear) { + for (String paramYear : allYear) { relatedResult.setYear(paramYear); - List tmpList = achievementsMapper.getRelatedAch(id,sourceId,paramYear); + List tmpList = achievementsMapper.getRelatedAch(id, sourceId, paramYear); relatedResult.setAchRelatedVoList(tmpList); } relatedResultList.add(relatedResult); @@ -358,17 +389,18 @@ public class AchievementsServiceImpl implements IAchievementsService { /** * 根据查询内容,调用搜索行为接口 + * * @param achName * @param userId */ @Override public int getSearchResult(String achName, Long userId) { int num = 0; - if (StringUtils.isEmpty(achName)){ + if (StringUtils.isEmpty(achName)) { return num; } List idList = achievementsMapper.selectAchievementsByName(achName); - if(StringUtils.isNotNull(idList)) { + if (StringUtils.isNotNull(idList)) { for (Long searchId : idList) { Searcher e = new Searcher(); e.setCreatedAt(DateUtils.getNowDate()); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java index 7abfd863b..ed40dcefc 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java @@ -53,7 +53,8 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris { List list = schoolEnterpriseAchievementsMapper.selectSchoolEnterpriseAchievementsList(schoolEnterpriseAchievements); for (SchoolEnterpriseAchievements a : list) { - achievementsService.buildFileInfoByIdents(a.getImages(),a.getAttachments(),a.getParams()); + a.setImages(achievementsService.buildFileInfoByIdents(a.getImages(), "4")); + a.setAttachments(achievementsService.buildFileInfoByIdents(a.getAttachments(), "4")); } return list; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java index 3cbd44b21..f56052b85 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -9,13 +9,12 @@ import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.domain.vo.ProjectListVo; import com.microservices.dms.resourceLibrary.domain.vo.UserActionDataVo; import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; -import com.microservices.dms.utils.UrlUtil; +import com.microservices.dms.utils.DateUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.net.MalformedURLException; -import java.net.URL; +import java.util.Date; import java.util.List; import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; @@ -68,6 +67,8 @@ public class ProjectResourceLibraryService { List list = projectResourceLibraryMapper.selectProjectResourceLibraryList(projectResourceLibrary); // /api/attachments/10e9c28d-f8cb-4fbd-83c3-e46d2ff1b325 for (ProjectResourceLibrary l : list) { + Date releaseDate = l.getReleaseDate(); + l.setReleaseDate(DateUtil.plusHours(releaseDate, 8)); List> attachments = projectResourceLibraryMapper.getAttachments(l.getVersionReleasesId()); for (KeyValVo a : attachments) { String v = a.getV(); @@ -75,7 +76,7 @@ public class ProjectResourceLibraryService { if (v.startsWith("http")) { String urlPath = getUrlPath(v); if (StringUtils.isNotEmpty(urlPath)) { - a.setV(gitLinkUrl + "/api"+urlPath); + a.setV(gitLinkUrl + urlPath); } } else { a.setV(String.format(PROJECT_DOWNLOAD_API, gitLinkUrl, v)); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 570a41711..573829b8f 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -1,7 +1,6 @@ package com.microservices.dms.resourceLibrary.service; import com.microservices.common.core.utils.DateUtils; -import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; import com.microservices.dms.constant.TaskConstant; import com.microservices.dms.resourceLibrary.domain.*; @@ -15,11 +14,8 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import static com.microservices.dms.constant.TaskConstant.MARKER_SPACE_DOWNLOAD_API_BY_ID; -import static com.microservices.dms.constant.TaskConstant.PROJECT_DOWNLOAD_API; -import static com.microservices.dms.utils.UrlUtil.getUrlPath; @Service @RequiredArgsConstructor diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java index 5ca20f898..5843e5095 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/utils/DateUtil.java @@ -5,7 +5,6 @@ import java.time.LocalDateTime; import java.time.Year; import java.time.ZoneId; import java.time.format.DateTimeFormatter; -import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -80,4 +79,10 @@ public class DateUtil { .map(formatter::format) .collect(Collectors.toList()); } + + public static Date plusHours(Date date, long plusHours){ + if (date == null) {return null;} + LocalDateTime s = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + return Date.from(s.plusHours(plusHours).atZone(ZoneId.systemDefault()).toInstant()); + } } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 0cd1f51da..e48e71861 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -304,12 +304,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + From 30f049427f2b81dc69df52d74f664410b03f318f Mon Sep 17 00:00:00 2001 From: 13036795865 Date: Thu, 8 May 2025 14:04:28 +0800 Subject: [PATCH 257/270] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=9D=A5=E6=BA=90?= =?UTF-8?q?=E4=B8=8E=E9=A2=86=E5=9F=9F=E6=90=9C=E7=B4=A2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AchievementsServiceImpl.java | 8 ++- .../mapper/dms/AchievementsMapper.xml | 60 ++++++++++++++----- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 396509361..a61757624 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -198,9 +198,11 @@ public class AchievementsServiceImpl implements IAchievementsService { //遍历成果数据,获取对应成果的点击数 for (Achievements a : list) { //根据id获取领域名称 - String field1Name = achievementsMapper.getField1NameByParam(a.getSource(), a.getId()); - if (StringUtils.isNotNull(field1Name)) { - a.setField1Name(field1Name); + if(StringUtils.isEmpty(achQueryVo.getSource()) && StringUtils.isNotEmpty(a.getField1())) { + String field1Name = achievementsMapper.getField1NameByParam(a.getSource(), a.getId()); + if (StringUtils.isNotNull(field1Name)) { + a.setField1Name(field1Name); + } } Long clickSum = achievementsMapper.getAchievementClickSum(a.getId()); a.setClickSum(clickSum); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 747e30a9f..f86f4d094 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -242,18 +242,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select p.name from achievements a - inner join project_categories p on a.source = p.id + inner join project_categories p on a.field_1 = p.id where a.id=#{id} select p.name from achievements a - inner join categories p on a.source = p.id + inner join categories p on a.field_1 = p.id where a.id=#{id} select p.name from achievements a - inner join categories p on a.source = p.id + inner join categories p on a.field_1 = p.id where a.id=#{id} select p.name from achievements a - inner join categories p on a.source = p.id + inner join categories p on a.field_1 = p.id where a.id=#{id} From f8c3d42a326c96d0d02989954c90056e1ea8e66a Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Thu, 8 May 2025 14:29:18 +0800 Subject: [PATCH 258/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C=E3=80=91?= =?UTF-8?q?=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C=E8=A2=AB=E5=88=A0=E9=99=A4?= =?UTF-8?q?=EF=BC=8C=E5=AF=B9=E5=BA=94=E7=9A=84=E6=88=90=E5=91=98=E4=B9=9F?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E4=B8=80=E5=B9=B6=E5=88=A0=E9=99=A4=E3=80=81?= =?UTF-8?q?=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C=E8=AF=A6=E6=83=85=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=98=BE=E7=A4=BA=E8=B4=9F=E8=B4=A3=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/SchoolEnterpriseAchievements.java | 2 +- .../mapper/AchievementTeamMapper.java | 3 ++ ...hoolEnterpriseAchievementsServiceImpl.java | 31 ++++++++++++---- .../ProjectResourceLibraryService.java | 8 ++++- .../mapper/dms/AchievementTeamMapper.xml | 6 ++++ .../mapper/dms/AchievementsMapper.xml | 35 ++++++++++++++++++- .../SchoolEnterpriseAchievementsMapper.xml | 1 + 7 files changed, 77 insertions(+), 9 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java index 43e5b0f8d..026fb8a67 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/domain/SchoolEnterpriseAchievements.java @@ -127,7 +127,7 @@ public class SchoolEnterpriseAchievements extends BaseEntity { /** * 成果状态 */ - @Excel(name = "成果状态") + @Excel(name = "校企成果的状态 1是通过,3是不通过") private String status; /** diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementTeamMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementTeamMapper.java index 2d34eeb21..20e5502aa 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementTeamMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementTeamMapper.java @@ -5,6 +5,7 @@ import java.util.List; import com.microservices.common.datasource.annotation.Slave; import com.microservices.dms.achievementLibrary.domain.AchievementTeam; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 成果团队Mapper接口 @@ -63,4 +64,6 @@ public interface AchievementTeamMapper * @return 结果 */ public int deleteAchievementTeamByIds(Long[] ids); + + void deleteAchievementTeamByAId(@Param("aid") Long aid); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java index ed40dcefc..ac0287187 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java @@ -6,8 +6,11 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import com.microservices.common.core.exception.ServiceException; import com.microservices.common.core.utils.DateUtils; import com.microservices.dms.achievementLibrary.domain.Achievements; +import com.microservices.dms.achievementLibrary.mapper.AchievementTeamMapper; +import com.microservices.dms.achievementLibrary.mapper.AchievementsMapper; import com.microservices.dms.achievementLibrary.service.IAchievementsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,12 +30,17 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris @Autowired private SchoolEnterpriseAchievementsMapper schoolEnterpriseAchievementsMapper; + @Autowired + private AchievementTeamMapper achievementTeamMapper; + @Autowired private IAchievementsService achievementsService; + @Autowired + private AchievementsMapper achievementsMapper; /** * 查询校企成果 - * + * * @param id 校企成果主键 * @return 校企成果 */ @@ -44,7 +52,7 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris /** * 查询校企成果列表 - * + * * @param schoolEnterpriseAchievements 校企成果 * @return 校企成果 */ @@ -61,7 +69,7 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris /** * 新增校企成果 - * + * * @param schoolEnterpriseAchievements 校企成果 * @return 结果 */ @@ -75,7 +83,7 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris /** * 修改校企成果 - * + * * @param schoolEnterpriseAchievements 校企成果 * @return 结果 */ @@ -88,7 +96,7 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris /** * 批量删除校企成果 - * + * * @param ids 需要删除的校企成果主键 * @return 结果 */ @@ -100,13 +108,24 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris /** * 删除校企成果信息 - * + * * @param id 校企成果主键 * @return 结果 */ @Override public int deleteSchoolEnterpriseAchievementsById(Long id) { + // 校企成果删除前判断数据仓库是否存在数据,存在则不允许删除该数据 + Achievements achievements = new Achievements(); + achievements.setSource("4"); + achievements.setSourceId(id); + List ss = achievementsMapper.selectAchievementsList(achievements); + if (ss != null && !ss.isEmpty()) { + throw new ServiceException("数据仓库是否存在数据,不允许删除"); + } + + // 校企成果被删除,对应的成员也应该一并删除 + achievementTeamMapper.deleteAchievementTeamByAId(id); return schoolEnterpriseAchievementsMapper.deleteSchoolEnterpriseAchievementsById(id); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java index 38ace06e2..bd473e1af 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/ProjectResourceLibraryService.java @@ -1,6 +1,7 @@ package com.microservices.dms.resourceLibrary.service; +import com.alibaba.fastjson.JSON; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.common.security.utils.SecurityUtils; @@ -82,7 +83,11 @@ public class ProjectResourceLibraryService { if (v.startsWith("http")) { String urlPath = getUrlPath(v); if (StringUtils.isNotEmpty(urlPath)) { - a.setV(gitLinkUrl + urlPath); + if (urlPath.startsWith("/")) { + a.setV(gitLinkUrl + urlPath); + }else { + a.setV(gitLinkUrl +"/api"+ urlPath); + } } } else { a.setV(String.format(PROJECT_DOWNLOAD_API, gitLinkUrl, v)); @@ -90,6 +95,7 @@ public class ProjectResourceLibraryService { } } l.setAttachmentList(attachments); + l.setAttachments(JSON.toJSONString(attachments)); } return list; } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementTeamMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementTeamMapper.xml index 0200ef9b0..502333c48 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementTeamMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementTeamMapper.xml @@ -119,4 +119,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + + delete + from achievement_team + where achievement_id = #{aid} + \ No newline at end of file diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index f86f4d094..53775cde4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -76,7 +76,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml index ee73fa740..b83b2b6ce 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/SchoolEnterpriseAchievementsMapper.xml @@ -69,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and review_comments = #{reviewComments} and images = #{images} and attachments = #{attachments} + and create_by = #{createBy} From 12573eaeced3645d8286abe67acc8e88c03de553 Mon Sep 17 00:00:00 2001 From: 13036795865 Date: Thu, 8 May 2025 14:50:29 +0800 Subject: [PATCH 259/270] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E9=A2=86=E5=9F=9F=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AchievementsServiceImpl.java | 7 +++++++ .../dms/common/controller/OpenController.java | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index a61757624..5841ba698 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -78,6 +78,13 @@ public class AchievementsServiceImpl implements IAchievementsService { public List selectAchievementsList(Achievements achievements) { List list = achievementsMapper.selectAchievementsList(achievements); for (Achievements a : list) { + //根据id获取领域名称 + if(StringUtils.isNotEmpty(a.getField1())) { + String field1Name = achievementsMapper.getField1NameByParam(a.getSource(), a.getId()); + if (StringUtils.isNotNull(field1Name)) { + a.setField1Name(field1Name); + } + } a.setImages(buildFileInfoByIdents(a.getImages(), a.getSource())); a.setAttachments(buildFileInfoByIdents(a.getAttachments(), a.getSource())); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java index 3d27d70d8..664e9eafb 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/common/controller/OpenController.java @@ -74,6 +74,18 @@ public class OpenController extends BaseController { return success(achievementsService.getAreasByName(areaName)); } + @ApiOperation("根据领域分类名称,获取项目领域") + @GetMapping("/achievements/getProjectAreasByName") + public AjaxResult getProjectAreasByName(String areaName) { + return success(achievementsService.getProjectAreasByName(areaName)); + } + + @ApiOperation("根据领域分类名称,获取专家领域") + @GetMapping("/achievements/getExpertAreasByName") + public AjaxResult getExpertAreasByName(String areaName) { + return success(achievementsService.getExpertAreasByName(areaName)); + } + /* 获取全部成果,根据成果名称、成果领域、成果来源进行查询 * @return */ From c54be832a121b4965c4e20b0a40c9e5a0be7fda8 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Thu, 8 May 2025 16:05:41 +0800 Subject: [PATCH 260/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93=E3=80=91=E9=A1=B9=E7=9B=AE=E6=88=90=E6=9E=9C=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E5=85=B3=E8=81=94=E6=88=90=E6=9E=9C=E4=BD=86=E6=98=AF?= =?UTF-8?q?=E6=9C=AA=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/AchievementsMapper.java | 6 ++++-- .../service/impl/AchievementsServiceImpl.java | 13 +++++++++---- .../mapper/dms/AchievementsMapper.xml | 19 +++++++++++++++---- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java index 55fa503a3..35284f5b3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/mapper/AchievementsMapper.java @@ -127,9 +127,9 @@ public interface AchievementsMapper { List getAreaStatistic(@Param("areaKey") String areaKey); - List getRelatedAch(@Param("id")Long id, @Param("sourceId") Long sourceId, @Param("paramYear")String paramYear); + List getRelatedAch(@Param("id")Long id, @Param("sourceId") List sourceId, @Param("paramYear")String paramYear); - List getDistinctYear(@Param("id")Long id, @Param("sourceId")Long sourceId); + List getDistinctYear(@Param("id")Long id, @Param("sourceId")List sourceId); List selectAchievementsByName(@Param("achName") String achName); @@ -138,4 +138,6 @@ public interface AchievementsMapper { List getProjectAreasByName(@Param("areaName") String areaName); List getExpertAreasByName(@Param("areaName") String areaName); + + List getAllSourceId(@Param("id")Long id, @Param("sourceId")Long sourceId); } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java index 5841ba698..e2d0e1704 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/AchievementsServiceImpl.java @@ -16,6 +16,7 @@ import com.microservices.dms.resourceLibrary.domain.Clicker; import com.microservices.dms.resourceLibrary.domain.Searcher; import com.microservices.dms.resourceLibrary.domain.vo.KeyValVo; import com.microservices.dms.resourceLibrary.mapper.ExpertResourceLibraryMapper; +import com.microservices.dms.resourceLibrary.mapper.ProjectResourceLibraryMapper; import com.microservices.dms.resourceLibrary.mapper.TaskResourceLibraryMapper; import com.microservices.dms.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +45,9 @@ public class AchievementsServiceImpl implements IAchievementsService { @Autowired private ExpertResourceLibraryMapper expertResourceLibraryMapper; + @Autowired + private ProjectResourceLibraryMapper projectResourceLibraryMapper; + @Autowired private IBehaviorImageService behaviorImageService; @@ -382,16 +386,17 @@ public class AchievementsServiceImpl implements IAchievementsService { public List getRelatedAch(Long id, Long sourceId) { List relatedResultList = new ArrayList<>(); //想根据开源项目id,获取对应的年度信息 - List allYear = achievementsMapper.getDistinctYear(id, sourceId); + List allSourceId = achievementsMapper.getAllSourceId(id, sourceId); + List allYear = achievementsMapper.getDistinctYear(id, allSourceId); if (StringUtils.isNotNull(allYear)) { - AchRelatedResult relatedResult = new AchRelatedResult(); //遍历年度信息,获取年度成果数据 for (String paramYear : allYear) { + AchRelatedResult relatedResult = new AchRelatedResult(); relatedResult.setYear(paramYear); - List tmpList = achievementsMapper.getRelatedAch(id, sourceId, paramYear); + List tmpList = achievementsMapper.getRelatedAch(id, allSourceId, paramYear); relatedResult.setAchRelatedVoList(tmpList); + relatedResultList.add(relatedResult); } - relatedResultList.add(relatedResult); } return relatedResultList; } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 53775cde4..7440a90a4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -554,10 +554,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by z.name, z.field_1, z.remark + + @@ -572,8 +581,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" achievement_name as "achRelateName", #{paramYear} as resultYear from achievements - where id = #{id} - and source_id = #{sourceId} + where source_id in + + #{fileId} + and DATE_FORMAT(create_time, '%Y') = #{paramYear} order by DATE_FORMAT(create_time, '%m-%d') From efa8bdef79c195b01fe5532919e5e9a93d8bf2b2 Mon Sep 17 00:00:00 2001 From: 13036795865 Date: Thu, 8 May 2025 17:28:14 +0800 Subject: [PATCH 261/270] =?UTF-8?q?=E4=B8=93=E5=AE=B6=E6=80=A7=E5=88=AB?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E9=BB=98=E8=AE=A4=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/ExpertResourceLibrary.java | 19 +++++++++++++++++++ .../ExpertResourceLibraryServiceImpl.java | 12 +++++++++++- .../dms/ExpertResourceLibraryMapper.xml | 8 +++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 997c544d5..50186b9d3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -74,6 +74,25 @@ public class ExpertResourceLibrary extends BaseEntity { private Long watcherSum; private Long favoriteSum; + private String userImg; + private String userNickName; + + public String getUserImg() { + return userImg; + } + + public void setUserImg(String userImg) { + this.userImg = userImg; + } + + public String getUserNickName() { + return userNickName; + } + + public void setUserNickName(String userNickName) { + this.userNickName = userNickName; + } + public String getAreaQuery() { return areaQuery; } diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index d56d9f76d..1784b7ada 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -1,6 +1,7 @@ package com.microservices.dms.resourceLibrary.service.impl; import com.microservices.common.core.utils.DateUtils; +import com.microservices.common.core.utils.StringUtils; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; import com.microservices.dms.resourceLibrary.domain.ExpertResourceLibrary; import com.microservices.dms.resourceLibrary.domain.vo.ExpertAttachmentVo; @@ -68,7 +69,16 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS */ @Override public List selectExpertResourceLibraryList(ExpertResourceLibrary expertResourceLibrary) { - return expertResourceLibraryMapper.selectExpertResourceLibraryList(expertResourceLibrary); + List expertResourceLibraryList = expertResourceLibraryMapper.selectExpertResourceLibraryList(expertResourceLibrary); + for (ExpertResourceLibrary a : expertResourceLibraryList) { + String gender = a.getGender(); + String img = "images/avatars/User/boy.jpg"; + if(StringUtils.isNotEmpty(gender) && gender.equals("1")){ + img = "images/avatars/User/girl.jpg"; + } + a.setUserImg(img); + } + return expertResourceLibraryList; } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index 006ae726e..30d8bad0b 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -72,7 +72,8 @@ + - + select a.id,a.achievement_name,a.hot_rank,a.field_1,a.field_2,a.field_3,a.attachment_count,a.is_expert_audit,a.achievement_type,a.source,a.source_id + ,u.login as "userLogin",u.nickname as "userNickName",ue.gender as "gender", + a.source_link,a.tags,a.summary,a.publishing_unit,a.address,a.is_featured,a.contact_person,a.contact_number,a.owner_id,a.owner_name, a.status,a.details, + a.reviewer,a.review_date,a.review_comments, a.images,a.attachments,a.create_by,a.create_time,a.update_by,a.update_time, (select IFNULL(nickname,login) from users where login=owner_name) as remark - from achievements - where id = #{id} + from achievements a + left join users u on a.owner_name = u.login + left join user_extensions ue on u.id = ue.user_id + where a.id = #{id} - select id, achievement_name,summary,create_time,owner_name,tags,field_1,field_2,field_3,source,source_id, + select a.id, a.achievement_name,a.summary,a.create_time,a.owner_name,a.tags,a.field_1,a.field_2,a.field_3,a.source,a.source_id, + u.login as "userLogin",u.nickname as "userNickName",ue.gender as "gender", (select IFNULL(count(*), 0) from favorites where favorite_type = 'Achievements' and favorite_id = id) as watcherSum, (select IFNULL(count(*), 0) from watchers where watchable_type = 'Achievements' and watchable_id = id) as favoriteSum - from achievements + from achievements a + left join users u on a.owner_name = u.login + left join user_extensions ue on u.id = ue.user_id - and achievement_name like concat('%', #{achievementName}, '%') + and a.achievement_name like concat('%', #{achievementName}, '%') - order by create_time desc + order by a.create_time desc - select a.id, a.achievement_name, a.summary, a.create_time, a.owner_name, a.tags, a.field_1, a.field_2, a.field_3, a.source, a.source_id,c.name as "field1Name", + select a.id, a.achievement_name, a.summary, a.create_time, a.owner_name, a.tags, a.field_1, a.field_2, a.field_3, a.source, a.source_id, + c.name as "field1Name",u.login as "userLogin",u.nickname as "userNickName",ue.gender as "gender", (select IFNULL(count(*), 0) from favorites where favorite_type = 'Achievements' and favorite_id = a.id) as watcherSum, (select IFNULL(count(*), 0) from watchers where watchable_type = 'Achievements' and watchable_id = a.id) as favoriteSum from achievements a + left join users u on a.owner_name = u.login + left join user_extensions ue on u.id = ue.user_id left join project_categories c on a.field_1 = c.id - and achievement_name like concat('%', #{achievementName}, '%') - and source = #{source} + and a.achievement_name like concat('%', #{achievementName}, '%') + and a.source = #{source} - and (field_1 = #{areaQuery} or field_2 = #{areaQuery} or field_3 = #{areaQuery}) + and (a.field_1 = #{areaQuery} or a.field_2 = #{areaQuery} or a.field_3 = #{areaQuery}) order by create_time desc - select a.id, a.achievement_name, a.summary, a.create_time, a.owner_name, a.tags, a.field_1, a.field_2, a.field_3, a.source, a.source_id,c.name as "field1Name", + select a.id, a.achievement_name, a.summary, a.create_time, a.owner_name, a.tags, a.field_1, a.field_2, a.field_3, a.source, a.source_id, + c.name as "field1Name",u.login as "userLogin",u.nickname as "userNickName",ue.gender as "gender", (select IFNULL(count(*), 0) from favorites where favorite_type = 'Achievements' and favorite_id = a.id) as watcherSum, (select IFNULL(count(*), 0) from watchers where watchable_type = 'Achievements' and watchable_id = a.id) as favoriteSum from achievements a + left join users u on a.owner_name = u.login + left join user_extensions ue on u.id = ue.user_id left join categories c on a.field_1 = c.id - and achievement_name like concat('%', #{achievementName}, '%') - and source = #{source} + and a.achievement_name like concat('%', #{achievementName}, '%') + and a.source = #{source} - and (field_1 = #{areaQuery} or field_2 = #{areaQuery} or field_3 = #{areaQuery}) + and (a.field_1 = #{areaQuery} or a.field_2 = #{areaQuery} or a.field_3 = #{areaQuery}) - order by create_time desc + order by a.create_time desc From 25803e31e0ab055aa754ba5f59d243a307074374 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 9 May 2025 09:50:23 +0800 Subject: [PATCH 264/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E3=80=91?= =?UTF-8?q?=E7=AB=9E=E4=BA=89=E4=BD=9C=E5=93=81=E5=90=8D=E7=A7=B0=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5=20=E7=AB=9E=E8=B5=9B=E5=90=8D=E7=A7=B0+=E5=8F=82?= =?UTF-8?q?=E8=B5=9B=E9=98=9F=E9=95=BF=E5=A7=93=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/CompetitionResourceLibrary.java | 18 ++++++++++++++++++ .../domain/ProjectResourceLibrary.java | 9 +++++++++ .../dms/CompetitionResourceLibraryMapper.xml | 2 ++ .../dms/ProjectResourceLibraryMapper.xml | 10 ++++++++-- .../mapper/dms/TaskResourceLibraryMapper.xml | 2 +- 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java index ddf23aacd..f67ef6ed1 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/CompetitionResourceLibrary.java @@ -95,6 +95,24 @@ public class CompetitionResourceLibrary extends BaseEntity { * 附件 */ private String attachment; + private String leader; + private String identifier; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public String getLeader() { + return leader; + } + + public void setLeader(String leader) { + this.leader = leader; + } private List> attachmentList = new ArrayList<>(); diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java index 6c7b26657..42acbbace 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ProjectResourceLibrary.java @@ -25,6 +25,7 @@ public class ProjectResourceLibrary extends BaseEntity { private String projectDomainName; // private String identifier; + private String userIdentifier; //开源项目ID private Long projectId; //仓库ID @@ -65,6 +66,14 @@ public class ProjectResourceLibrary extends BaseEntity { private String attachments; private List> attachmentList = new ArrayList<>(); + public String getUserIdentifier() { + return userIdentifier; + } + + public void setUserIdentifier(String userIdentifier) { + this.userIdentifier = userIdentifier; + } + public String getProjectDomain() { return projectDomain; } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index 2779c0100..ca9d94fd2 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -136,6 +136,8 @@ cu.sub_item as submission_summary, cu.sub_item as submission_details, cu.leader as contact_person, + cu.leader as leader, + ci.identifier as identifier, cu.phone as contact_phone, is_transferred_to_result_library, transferred_to_result_library_time, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index fc27bd3a3..f026eddcf 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -125,6 +125,7 @@ + @@ -151,7 +152,7 @@ create_by, create_time, update_by, - update_time + update_time,project_domain from project_resource_library @@ -167,7 +168,8 @@ v.name as release_name, v.updated_at as release_date, (select login from users where id=v.user_id) as release_person, - p.project_category_id as project_domain, + (select login from users where id=v.user_id) as user_identifier, + IFNULL(pl.project_domain,p.project_category_id) as project_domain, pl.release_type, pl.release_unit, p.description as release_summary, @@ -209,6 +211,7 @@ and is_selected_achievement = #{isSelectedAchievement} and images = #{images} and attachments = #{attachments} + and project_domain = #{projectDomain} order by is_transferred_to_achievement @@ -245,6 +248,7 @@ create_time, update_by, update_time, + project_domain, @@ -270,6 +274,7 @@ #{createTime}, #{updateBy}, #{updateTime}, + #{projectDomain}, @@ -300,6 +305,7 @@ create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, + project_domain = #{projectDomain}, where id = #{id} diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 9d1ee8b62..48c90d08d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -443,7 +443,7 @@ t.id as task_id, pd.paper_id as paper_id, t.name as task_name, - t.category_id as task_domain, + IFNULL(ts.task_domain, t.category_id) as task_domain, t.bounty as task_amount, p.number as submission_name, p.created_at as submission_date, From 93dd90fc474107165013ce102706ee417a770a31 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 9 May 2025 10:07:33 +0800 Subject: [PATCH 265/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E3=80=91?= =?UTF-8?q?=E4=BC=98=E8=B4=A8=E4=B8=93=E5=AE=B6=E8=B5=84=E6=BA=90=E5=BA=93?= =?UTF-8?q?=E4=B8=80=E7=B3=BB=E5=88=97=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resourceLibrary/domain/ExpertResourceLibrary.java | 9 +++++++++ .../service/impl/ExpertResourceLibraryServiceImpl.java | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java index 50186b9d3..9841e3550 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/domain/ExpertResourceLibrary.java @@ -76,6 +76,15 @@ public class ExpertResourceLibrary extends BaseEntity { private String userImg; private String userNickName; + private String otherAttachments; + + public String getOtherAttachments() { + return otherAttachments; + } + + public void setOtherAttachments(String otherAttachments) { + this.otherAttachments = otherAttachments; + } public String getUserImg() { return userImg; diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java index 1784b7ada..1100963c6 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/impl/ExpertResourceLibraryServiceImpl.java @@ -1,5 +1,6 @@ package com.microservices.dms.resourceLibrary.service.impl; +import com.alibaba.fastjson.JSON; import com.microservices.common.core.utils.DateUtils; import com.microservices.common.core.utils.StringUtils; import com.microservices.dms.behaviorImage.domain.AchievementBehaviorSumVo; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -37,6 +39,7 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS */ @Override public ExpertResourceLibrary selectExpertResourceLibraryById(Long id) { + List> mmp = new ArrayList<>(); ExpertResourceLibrary res = expertResourceLibraryMapper.selectExpertResourceLibraryById(id); ExpertAttachmentVo attachmentVo = expertResourceLibraryMapper.getExpertInfoById(res.getExpertId()); Map honorsAttachments = expertResourceLibraryMapper.getAttachmentInfo(attachmentVo.getHonorsAttachments()); @@ -51,6 +54,11 @@ public class ExpertResourceLibraryServiceImpl implements IExpertResourceLibraryS res.getParams().put("honorsAttachments", honorsAttachments); res.getParams().put("resumeAttachments", resumeAttachments); res.getParams().put("titleCertificateAttachments", titleCertificateAttachments); + mmp.add(academicAchievementsAttachments); + mmp.add(honorsAttachments); + mmp.add(resumeAttachments); + mmp.add(titleCertificateAttachments); + res.setOtherAttachments(JSON.toJSONString(mmp)); return res; } From 10a520bf98e702d4ea7227bdb845f4c2aa630720 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 9 May 2025 11:21:25 +0800 Subject: [PATCH 266/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=88=90=E6=9E=9C=E7=AE=A1=E7=90=86=E3=80=91?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E4=BC=98=E8=B4=A8=E4=B8=93=E5=AE=B6=E6=97=B6?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=BC=98=E5=8C=96SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/CompetitionResourceLibraryMapper.xml | 4 ++-- .../dms/ExpertResourceLibraryMapper.xml | 24 +++++++++---------- .../dms/ProjectResourceLibraryMapper.xml | 3 +++ .../mapper/dms/TaskResourceLibraryMapper.xml | 4 ++-- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml index ca9d94fd2..e1457d782 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/CompetitionResourceLibraryMapper.xml @@ -133,8 +133,8 @@ cu.leader as submitter, submission_type, cu.org_name as submitting_unit, - cu.sub_item as submission_summary, - cu.sub_item as submission_details, + IFNULL(crl.submission_summary,cu.sub_item) as submission_summary, + IFNULL(crl.submission_details,cu.sub_item) as submission_details, cu.leader as contact_person, cu.leader as leader, ci.identifier as identifier, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index 30d8bad0b..530bacaa8 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -79,8 +79,8 @@ expert_domain,u.authentication as expertAuth, e.title_rank, erl.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, erl.create_time, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1) as taskAuditCount, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2) as competitionAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1 and `status` in (1,2)) as taskAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2 and `status` in (1,2)) as competitionAuditCount, erl.update_by, erl.update_time,erl.sort_no from experts e inner join users u on e.user_id = u.id @@ -126,8 +126,8 @@ expert_domain,images, attachments, e.title_rank, erl.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, erl.create_time, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1) as taskAuditCount, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2) as competitionAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1 and `status` in (1,2)) as taskAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2 and `status` in (1,2)) as competitionAuditCount, (select count(*) as watchSum from watchers where watchable_type = 'Experts' and watchable_id = erl.id) as watcherSum, (select count(*) as favoriteSum from favorites where favorite_type = 'Experts' and favorite_id = erl.id) as favoriteSum, erl.update_by, erl.update_time,erl.sort_no @@ -167,11 +167,11 @@ @@ -423,11 +423,11 @@ tmp.competitionAuditCount as "competitionAuditSum", (tmp.taskAuditCount + tmp.competitionAuditCount) as "total" from (select e.expert_name, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1) as taskAuditCount, + (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1 and `status` in (1,2)) as taskAuditCount, (select COUNT(*) from task_expert where expert_id = e.id - and container_type = 2) as competitionAuditCount + and container_type = 2 and `status` in (1,2)) as competitionAuditCount from experts e inner join users u on e.user_id = u.id left join expert_resource_library erl on e.id = erl.user_id diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml index f026eddcf..cf9729b5d 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ProjectResourceLibraryMapper.xml @@ -172,6 +172,9 @@ IFNULL(pl.project_domain,p.project_category_id) as project_domain, pl.release_type, pl.release_unit, + v.body, + IFNULL( pl.release_summary,v.body) as release_summary, + IFNULL( pl.release_details,v.body) as release_details, p.description as release_summary, p.description as release_details, pl.contact_person, diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml index 48c90d08d..5bd74ecab 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/TaskResourceLibraryMapper.xml @@ -450,8 +450,8 @@ (select u.login from users u where u.id = p.user_id) as submitter_name, submission_type, submission_organization, - pd.content as submission_summary, - pd.content as release_details, + IFNULL(ts.submission_summary,pd.content) as submission_summary, + IFNULL(ts.release_details,pd.content) as release_details, t.contact_name, t.contact_phone, is_transferred_to_results_library, From 3270ae7cddf0855a697cb7e10fbed98e8f2d02f6 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 9 May 2025 14:27:30 +0800 Subject: [PATCH 267/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93=E3=80=91=E7=AB=9E=E8=B5=9B=E6=88=90=E6=9E=9C=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/TaskResourceLibraryMapper.java | 2 +- .../service/TaskResourceLibraryService.java | 2 +- .../resources/mapper/dms/AchievementsMapper.xml | 8 ++++---- .../mapper/dms/ExpertResourceLibraryMapper.xml | 16 ++++++++-------- .../mapper/dms/TaskResourceLibraryMapper.xml | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java index f88455e04..4737100f4 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/mapper/TaskResourceLibraryMapper.java @@ -92,7 +92,7 @@ public interface TaskResourceLibraryMapper { * * @return 任务金额 */ - long getTaskAmount(); + Double getTaskAmount(); /** * 获取需评审任务数 diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java index 573829b8f..ef16e8fe3 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/resourceLibrary/service/TaskResourceLibraryService.java @@ -166,7 +166,7 @@ public class TaskResourceLibraryService { * * @return 任务金额 */ - public Long getTaskAmount() { + public Double getTaskAmount() { return taskResourceLibraryMapper.getTaskAmount(); } diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index eed37323c..8580dd590 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -357,17 +357,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml index 530bacaa8..32d1edcad 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/ExpertResourceLibraryMapper.xml @@ -126,8 +126,8 @@ expert_domain,images, attachments, e.title_rank, erl.status, e.review_area_one, e.review_area_two, e.review_area_three, e.is_delete, erl.create_by, erl.create_time, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 1 and `status` in (1,2)) as taskAuditCount, - (select COUNT(*) from task_expert where expert_id = e.id and container_type = 2 and `status` in (1,2)) as competitionAuditCount, + (select COUNT(distinct container_id) from task_expert where expert_id = e.id and container_type = 1 and `status` in (1,2)) as taskAuditCount, + (select COUNT(distinct container_id) from task_expert where expert_id = e.id and container_type = 2 and `status` in (1,2)) as competitionAuditCount, (select count(*) as watchSum from watchers where watchable_type = 'Experts' and watchable_id = erl.id) as watcherSum, (select count(*) as favoriteSum from favorites where favorite_type = 'Experts' and favorite_id = erl.id) as favoriteSum, erl.update_by, erl.update_time,erl.sort_no @@ -167,8 +167,8 @@ select IFNULL(SUM(competitionAuditCount), 0) - from (select (select COUNT(*) + from (select (select COUNT(distinct container_id) from task_expert where expert_id = e.id and container_type = 2 and `status` in (1,2)) as competitionAuditCount from experts e) tmp @@ -540,7 +540,7 @@ - select IFNULL(sum(t.bounty), 0) from tasks t join (select distinct task_id from papers where status = 2) p on t.id = p.task_id From 677fb671bbfebabdf3e28d2d026b466c799f8f50 Mon Sep 17 00:00:00 2001 From: liuhuazhong Date: Fri, 9 May 2025 16:54:21 +0800 Subject: [PATCH 269/270] =?UTF-8?q?fix=20=E3=80=90=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=BA=93-=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C=E3=80=91?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E8=AE=B0=E5=BD=95=E5=88=9B=E5=BB=BA=E4=BA=BA?= =?UTF-8?q?=EF=BC=8C=E6=A0=A1=E4=BC=81=E6=88=90=E6=9E=9C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=BB=85=E5=B1=95=E7=A4=BA=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9A=84=E6=95=B0=E6=8D=AE=E3=80=82=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E6=8E=A5=E5=8F=A3=E5=9B=9E=E6=BB=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SchoolEnterpriseAchievementsServiceImpl.java | 10 +++++----- .../main/resources/mapper/dms/AchievementsMapper.xml | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java index cd7a47e4a..25b1c4ce7 100644 --- a/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java +++ b/microservices-modules/microservices-modules-dms/src/main/java/com/microservices/dms/achievementLibrary/service/impl/SchoolEnterpriseAchievementsServiceImpl.java @@ -61,11 +61,11 @@ public class SchoolEnterpriseAchievementsServiceImpl implements ISchoolEnterpris @Override public List selectSchoolEnterpriseAchievementsList(SchoolEnterpriseAchievements schoolEnterpriseAchievements) { - LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - String username = loginUser.getUsername(); - schoolEnterpriseAchievements.setCreateBy(username); - } +// LoginUser loginUser = SecurityUtils.getLoginUser(); +// if (loginUser != null){ +// String username = loginUser.getUsername(); +// schoolEnterpriseAchievements.setCreateBy(username); +// } List list = schoolEnterpriseAchievementsMapper.selectSchoolEnterpriseAchievementsList(schoolEnterpriseAchievements); for (SchoolEnterpriseAchievements a : list) { a.setImages(achievementsService.buildFileInfoByIdents(a.getImages(), "4")); diff --git a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml index 8580dd590..365e79f64 100644 --- a/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml +++ b/microservices-modules/microservices-modules-dms/src/main/resources/mapper/dms/AchievementsMapper.xml @@ -77,10 +77,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"