mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 20:49:00 +08:00
🔖 Releasing / Version tags. 5.2
This commit is contained in:
1 parent
8e07c3724a
commit
d535271c89
73 files changed
+540
-878
No files matched your search
+2
-3
@@ -183,9 +183,8 @@ class DefaultRedisCacheWriter implements RedisCacheWriter {
|
||||
wasLocked = true;
|
||||
}
|
||||
|
||||
byte[][] keys = Optional.ofNullable(connection.keys(pattern))
|
||||
.orElse(Collections.emptySet())
|
||||
.toArray(new byte[0][]);
|
||||
byte[][] keys = Optional.ofNullable(connection.keys(pattern)).orElse(Collections.emptySet())
|
||||
.toArray(new byte[0][]);
|
||||
|
||||
if (keys.length > 0) {
|
||||
connection.del(keys);
|
||||
|
||||
+1
-2
@@ -44,8 +44,7 @@ public class DataScopeInnerInterceptor implements DataScopeInterceptor {
|
||||
|
||||
// 返回true 不拦截直接返回原始 SQL (只针对 COUNT 查询)
|
||||
if (dataScopeHandle.calcScope(dataScope) && DataScopeFuncEnum.COUNT.equals(dataScope.getFunc())) {
|
||||
mpBs.sql(String.format("SELECT %s FROM (%s) temp_data_scope",
|
||||
dataScope.getFunc().getType(), originalSql));
|
||||
mpBs.sql(String.format("SELECT %s FROM (%s) temp_data_scope", dataScope.getFunc().getType(), originalSql));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -1,7 +1,6 @@
|
||||
package com.pig4cloud.pigx.common.data.datascope;
|
||||
|
||||
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
|
||||
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
|
||||
import com.baomidou.mybatisplus.core.metadata.TableInfo;
|
||||
import com.github.yulichang.injector.MPJSqlInjector;
|
||||
|
||||
|
||||
-1
@@ -1,7 +1,6 @@
|
||||
package com.pig4cloud.pigx.common.data.datascope;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
|
||||
+5
-8
@@ -60,12 +60,9 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle {
|
||||
return true;
|
||||
}
|
||||
|
||||
List<String> roleIdList = user.getAuthorities()
|
||||
.stream()
|
||||
.map(GrantedAuthority::getAuthority)
|
||||
.filter(authority -> authority.startsWith(SecurityConstants.ROLE))
|
||||
.map(authority -> authority.split(StrUtil.UNDERLINE)[1])
|
||||
.collect(Collectors.toList());
|
||||
List<String> roleIdList = user.getAuthorities().stream().map(GrantedAuthority::getAuthority)
|
||||
.filter(authority -> authority.startsWith(SecurityConstants.ROLE))
|
||||
.map(authority -> authority.split(StrUtil.UNDERLINE)[1]).collect(Collectors.toList());
|
||||
|
||||
List<Long> deptList = dataScope.getDeptList();
|
||||
|
||||
@@ -92,8 +89,8 @@ public class PigxDefaultDatascopeHandle implements DataScopeHandle {
|
||||
// 自定义
|
||||
if (DataScopeTypeEnum.CUSTOM.getType() == dsType && StrUtil.isNotBlank(role.getDsScope())) {
|
||||
String dsScope = role.getDsScope();
|
||||
deptList
|
||||
.addAll(Arrays.stream(dsScope.split(StrUtil.COMMA)).map(Long::parseLong).collect(Collectors.toList()));
|
||||
deptList.addAll(
|
||||
Arrays.stream(dsScope.split(StrUtil.COMMA)).map(Long::parseLong).collect(Collectors.toList()));
|
||||
}
|
||||
// 查询本级及其下级
|
||||
if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) {
|
||||
|
||||
+2
-4
@@ -32,7 +32,6 @@ import com.alibaba.druid.stat.TableStat;
|
||||
import com.alibaba.druid.util.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.time.temporal.TemporalAccessor;
|
||||
@@ -125,9 +124,8 @@ public class DruidSqlLogFilter extends FilterEventAdapter {
|
||||
List<String> skipTableList = properties.getSkipTable();
|
||||
|
||||
List<String> tableNameList = getTablesBydruid(sql, dbType);
|
||||
if (tableNameList.stream()
|
||||
.anyMatch(tableName -> StrUtil.containsAnyIgnoreCase(tableName,
|
||||
ArrayUtil.toArray(skipTableList, String.class)))) {
|
||||
if (tableNameList.stream().anyMatch(tableName -> StrUtil.containsAnyIgnoreCase(tableName,
|
||||
ArrayUtil.toArray(skipTableList, String.class)))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -3,7 +3,6 @@ package com.pig4cloud.pigx.common.data.mybatis;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
|
||||
import com.pig4cloud.pigx.common.security.util.SecurityUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
import org.springframework.security.authentication.AnonymousAuthenticationToken;
|
||||
|
||||
-1
@@ -25,7 +25,6 @@ import com.pig4cloud.pigx.common.datasource.support.DataSourceConstants;
|
||||
import com.pig4cloud.pigx.common.datasource.util.DsConfTypeEnum;
|
||||
import com.pig4cloud.pigx.common.datasource.util.DsJdbcUrlEnum;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
+6
-7
@@ -100,8 +100,8 @@ public class ApiCryptoUtil {
|
||||
return aes.encryptBase64(jsonData);
|
||||
}
|
||||
if (type == EncryptType.RSA) {
|
||||
return SecureUtil.rsa(secretKey.getBytes(StandardCharsets.UTF_8), null)
|
||||
.encryptBase64(jsonData, KeyType.PrivateKey);
|
||||
return SecureUtil.rsa(secretKey.getBytes(StandardCharsets.UTF_8), null).encryptBase64(jsonData,
|
||||
KeyType.PrivateKey);
|
||||
}
|
||||
|
||||
if (type == EncryptType.SM4) {
|
||||
@@ -140,14 +140,13 @@ public class ApiCryptoUtil {
|
||||
return SecureUtil.des(secretKey.getBytes(StandardCharsets.UTF_8)).decrypt(bodyData);
|
||||
}
|
||||
if (type == EncryptType.RSA) {
|
||||
return SecureUtil.rsa(secretKey.getBytes(StandardCharsets.UTF_8), null)
|
||||
.decrypt(bodyData, KeyType.PrivateKey);
|
||||
return SecureUtil.rsa(secretKey.getBytes(StandardCharsets.UTF_8), null).decrypt(bodyData,
|
||||
KeyType.PrivateKey);
|
||||
}
|
||||
|
||||
if (type == EncryptType.SM4) {
|
||||
return SmUtil.sm4(HexUtil.decodeHex(secretKey))
|
||||
.decryptStr(StrUtil.str(bodyData, Charset.defaultCharset()))
|
||||
.getBytes();
|
||||
return SmUtil.sm4(HexUtil.decodeHex(secretKey)).decryptStr(StrUtil.str(bodyData, Charset.defaultCharset()))
|
||||
.getBytes();
|
||||
}
|
||||
|
||||
throw new EncryptMethodNotFoundException();
|
||||
|
||||
-3
@@ -24,11 +24,8 @@ import com.pig4cloud.pigx.common.core.util.KeyStrResolver;
|
||||
import com.pig4cloud.pigx.common.log.aspect.SysLogAspect;
|
||||
import com.pig4cloud.pigx.common.log.config.PigXLogProperties;
|
||||
import com.pig4cloud.pigx.common.log.event.SysLogListener;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
-2
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.ser.FilterProvider;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
|
||||
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
|
||||
import com.pig4cloud.pigx.admin.api.dto.SysLogDTO;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysLog;
|
||||
import com.pig4cloud.pigx.admin.api.feign.RemoteLogService;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import com.pig4cloud.pigx.common.core.jackson.PigxJavaTimeModule;
|
||||
@@ -31,7 +30,6 @@ import com.pig4cloud.pigx.common.log.config.PigXLogProperties;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.core.annotation.Order;
|
||||
|
||||
+2
-2
@@ -25,7 +25,6 @@ import cn.hutool.http.HttpUtil;
|
||||
import com.pig4cloud.pigx.admin.api.dto.SysLogDTO;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import com.pig4cloud.pigx.common.log.config.PigXLogProperties;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.springframework.core.StandardReflectionParameterNameDiscoverer;
|
||||
import org.springframework.expression.EvaluationContext;
|
||||
@@ -39,6 +38,7 @@ import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -53,7 +53,7 @@ public class SysLogUtils {
|
||||
|
||||
public SysLogDTO getSysLog() {
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects
|
||||
.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
SysLogDTO sysLog = new SysLogDTO();
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setRequestUri(URLUtil.getPath(request.getRequestURI()));
|
||||
|
||||
+10
-15
@@ -55,22 +55,17 @@ public class PigxResourceServerConfiguration {
|
||||
@Bean
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||
AntPathRequestMatcher[] requestMatchers = permitAllUrl.getIgnoreUrls()
|
||||
.stream()
|
||||
.map(AntPathRequestMatcher::new)
|
||||
.collect(Collectors.toList())
|
||||
.toArray(new AntPathRequestMatcher[] {});
|
||||
AntPathRequestMatcher[] requestMatchers = permitAllUrl.getIgnoreUrls().stream().map(AntPathRequestMatcher::new)
|
||||
.collect(Collectors.toList()).toArray(new AntPathRequestMatcher[] {});
|
||||
|
||||
http.authorizeHttpRequests(authorizeRequests -> authorizeRequests.requestMatchers(requestMatchers)
|
||||
.permitAll()
|
||||
.anyRequest()
|
||||
.authenticated())
|
||||
.oauth2ResourceServer(
|
||||
oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
|
||||
.authenticationEntryPoint(resourceAuthExceptionEntryPoint)
|
||||
.bearerTokenResolver(pigxBearerTokenExtractor))
|
||||
.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
|
||||
.csrf(AbstractHttpConfigurer::disable);
|
||||
http.authorizeHttpRequests(authorizeRequests -> authorizeRequests.requestMatchers(requestMatchers).permitAll()
|
||||
.anyRequest().authenticated())
|
||||
.oauth2ResourceServer(
|
||||
oauth2 -> oauth2.opaqueToken(token -> token.introspector(customOpaqueTokenIntrospector))
|
||||
.authenticationEntryPoint(resourceAuthExceptionEntryPoint)
|
||||
.bearerTokenResolver(pigxBearerTokenExtractor))
|
||||
.headers(headers -> headers.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
|
||||
.csrf(AbstractHttpConfigurer::disable);
|
||||
|
||||
return http.build();
|
||||
}
|
||||
|
||||
+2
-1
@@ -19,7 +19,6 @@ package com.pig4cloud.pigx.common.security.component;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import com.pig4cloud.pigx.common.security.annotation.Inner;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -30,6 +29,8 @@ import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
* @date 2022-06-04
|
||||
|
||||
+11
-14
@@ -46,38 +46,35 @@ public class PigxRedisOAuth2AuthorizationService implements OAuth2AuthorizationS
|
||||
if (isState(authorization)) {
|
||||
String token = authorization.getAttribute("state");
|
||||
redisTemplate.setValueSerializer(RedisSerializer.java());
|
||||
redisTemplate.opsForValue()
|
||||
.set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT, TimeUnit.MINUTES);
|
||||
redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.STATE, token), authorization, TIMEOUT,
|
||||
TimeUnit.MINUTES);
|
||||
}
|
||||
|
||||
if (isCode(authorization)) {
|
||||
OAuth2Authorization.Token<OAuth2AuthorizationCode> authorizationCode = authorization
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
|
||||
long between = ChronoUnit.MINUTES.between(authorizationCodeToken.getIssuedAt(),
|
||||
authorizationCodeToken.getExpiresAt());
|
||||
redisTemplate.setValueSerializer(RedisSerializer.java());
|
||||
redisTemplate.opsForValue()
|
||||
.set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()), authorization,
|
||||
between, TimeUnit.MINUTES);
|
||||
redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()),
|
||||
authorization, between, TimeUnit.MINUTES);
|
||||
}
|
||||
|
||||
if (isRefreshToken(authorization)) {
|
||||
OAuth2RefreshToken refreshToken = authorization.getRefreshToken().getToken();
|
||||
long between = ChronoUnit.SECONDS.between(refreshToken.getIssuedAt(), refreshToken.getExpiresAt());
|
||||
redisTemplate.setValueSerializer(RedisSerializer.java());
|
||||
redisTemplate.opsForValue()
|
||||
.set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()), authorization, between,
|
||||
TimeUnit.SECONDS);
|
||||
redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.REFRESH_TOKEN, refreshToken.getTokenValue()),
|
||||
authorization, between, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
if (isAccessToken(authorization)) {
|
||||
OAuth2AccessToken accessToken = authorization.getAccessToken().getToken();
|
||||
long between = ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt());
|
||||
redisTemplate.setValueSerializer(RedisSerializer.java());
|
||||
redisTemplate.opsForValue()
|
||||
.set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()), authorization, between,
|
||||
TimeUnit.SECONDS);
|
||||
redisTemplate.opsForValue().set(buildKey(OAuth2ParameterNames.ACCESS_TOKEN, accessToken.getTokenValue()),
|
||||
authorization, between, TimeUnit.SECONDS);
|
||||
|
||||
// 扩展记录 access-token 、username 的关系 1::token::username::admin::xxx
|
||||
String tokenUsername = String.format("%s::%s::%s::%s::%s", tenantKeyStrResolver.key(), AUTHORIZATION,
|
||||
@@ -98,7 +95,7 @@ public class PigxRedisOAuth2AuthorizationService implements OAuth2AuthorizationS
|
||||
|
||||
if (isCode(authorization)) {
|
||||
OAuth2Authorization.Token<OAuth2AuthorizationCode> authorizationCode = authorization
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
OAuth2AuthorizationCode authorizationCodeToken = authorizationCode.getToken();
|
||||
keys.add(buildKey(OAuth2ParameterNames.CODE, authorizationCodeToken.getTokenValue()));
|
||||
}
|
||||
@@ -146,7 +143,7 @@ public class PigxRedisOAuth2AuthorizationService implements OAuth2AuthorizationS
|
||||
|
||||
private static boolean isCode(OAuth2Authorization authorization) {
|
||||
OAuth2Authorization.Token<OAuth2AuthorizationCode> authorizationCode = authorization
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
.getToken(OAuth2AuthorizationCode.class);
|
||||
return Objects.nonNull(authorizationCode);
|
||||
}
|
||||
|
||||
|
||||
+24
-31
@@ -88,53 +88,46 @@ public class PigxRemoteRegisteredClientRepository implements RegisteredClientRep
|
||||
public RegisteredClient findByClientId(String clientId) {
|
||||
|
||||
SysOauthClientDetails clientDetails = RetOps
|
||||
.of(clientDetailsService.getClientDetailsById(clientId, SecurityConstants.FROM_IN))
|
||||
.getData()
|
||||
.orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
|
||||
new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
|
||||
.of(clientDetailsService.getClientDetailsById(clientId, SecurityConstants.FROM_IN)).getData()
|
||||
.orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
|
||||
new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
|
||||
|
||||
RegisteredClient.Builder builder = RegisteredClient.withId(clientDetails.getClientId())
|
||||
.clientId(clientDetails.getClientId())
|
||||
.clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
|
||||
.clientAuthenticationMethods(clientAuthenticationMethods -> {
|
||||
clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
|
||||
clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_POST);
|
||||
});
|
||||
.clientId(clientDetails.getClientId())
|
||||
.clientSecret(SecurityConstants.NOOP + clientDetails.getClientSecret())
|
||||
.clientAuthenticationMethods(clientAuthenticationMethods -> {
|
||||
clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_BASIC);
|
||||
clientAuthenticationMethods.add(ClientAuthenticationMethod.CLIENT_SECRET_POST);
|
||||
});
|
||||
// 授权模式
|
||||
Arrays.stream(clientDetails.getAuthorizedGrantTypes())
|
||||
.forEach(grant -> builder.authorizationGrantType(new AuthorizationGrantType(grant)));
|
||||
.forEach(grant -> builder.authorizationGrantType(new AuthorizationGrantType(grant)));
|
||||
|
||||
// 回调地址
|
||||
Optional.ofNullable(clientDetails.getWebServerRedirectUri())
|
||||
.ifPresent(redirectUri -> Arrays.stream(redirectUri.split(StrUtil.COMMA))
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.forEach(builder::redirectUri));
|
||||
Optional.ofNullable(clientDetails.getWebServerRedirectUri()).ifPresent(redirectUri -> Arrays
|
||||
.stream(redirectUri.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::redirectUri));
|
||||
|
||||
// scope
|
||||
Optional.ofNullable(clientDetails.getScope())
|
||||
.ifPresent(scope -> Arrays.stream(scope.split(StrUtil.COMMA))
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.forEach(builder::scope));
|
||||
Optional.ofNullable(clientDetails.getScope()).ifPresent(
|
||||
scope -> Arrays.stream(scope.split(StrUtil.COMMA)).filter(StrUtil::isNotBlank).forEach(builder::scope));
|
||||
|
||||
// 注入扩展配置
|
||||
Optional.ofNullable(clientDetails.getAdditionalInformation()).ifPresent(ext -> {
|
||||
Map map = JSONUtil.parseObj(ext).toBean(Map.class);
|
||||
builder.clientSettings(ClientSettings.withSettings(map)
|
||||
.requireProofKey(false)
|
||||
.requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove()))
|
||||
.build());
|
||||
builder.clientSettings(ClientSettings.withSettings(map).requireProofKey(false)
|
||||
.requireAuthorizationConsent(!BooleanUtil.toBoolean(clientDetails.getAutoapprove())).build());
|
||||
});
|
||||
|
||||
return builder
|
||||
.tokenSettings(TokenSettings.builder()
|
||||
.accessTokenFormat(OAuth2TokenFormat.REFERENCE)
|
||||
.accessTokenTimeToLive(Duration.ofSeconds(
|
||||
Optional.ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
|
||||
.refreshTokenTimeToLive(Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
|
||||
.orElse(refreshTokenValiditySeconds)))
|
||||
.build())
|
||||
.tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE)
|
||||
.accessTokenTimeToLive(Duration.ofSeconds(Optional
|
||||
.ofNullable(clientDetails.getAccessTokenValidity()).orElse(accessTokenValiditySeconds)))
|
||||
.refreshTokenTimeToLive(
|
||||
Duration.ofSeconds(Optional.ofNullable(clientDetails.getRefreshTokenValidity())
|
||||
.orElse(refreshTokenValiditySeconds)))
|
||||
.build())
|
||||
|
||||
.build();
|
||||
.build();
|
||||
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -37,7 +37,7 @@ public class OAuth2EndpointUtils {
|
||||
|
||||
public boolean matchesPkceTokenRequest(HttpServletRequest request) {
|
||||
return AuthorizationGrantType.AUTHORIZATION_CODE.getValue()
|
||||
.equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
|
||||
.equals(request.getParameter(OAuth2ParameterNames.GRANT_TYPE))
|
||||
&& request.getParameter(OAuth2ParameterNames.CODE) != null
|
||||
&& request.getParameter(PkceParameterNames.CODE_VERIFIER) != null;
|
||||
}
|
||||
@@ -61,8 +61,7 @@ public class OAuth2EndpointUtils {
|
||||
OAuth2RefreshToken refreshToken = authentication.getRefreshToken().getToken();
|
||||
|
||||
OAuth2AccessTokenResponse.Builder builder = OAuth2AccessTokenResponse.withToken(accessToken.getTokenValue())
|
||||
.tokenType(accessToken.getTokenType())
|
||||
.scopes(accessToken.getScopes());
|
||||
.tokenType(accessToken.getTokenType()).scopes(accessToken.getScopes());
|
||||
if (accessToken.getIssuedAt() != null && accessToken.getExpiresAt() != null) {
|
||||
builder.expiresIn(ChronoUnit.SECONDS.between(accessToken.getIssuedAt(), accessToken.getExpiresAt()));
|
||||
}
|
||||
|
||||
+14
-27
@@ -1,6 +1,5 @@
|
||||
package com.pig4cloud.pigx.flow.engine.controller;
|
||||
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
@@ -20,7 +19,6 @@ import com.pig4cloud.pigx.flow.task.utils.NodeUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.bpmn.BpmnAutoLayout;
|
||||
import org.flowable.bpmn.converter.BpmnXMLConverter;
|
||||
import org.flowable.bpmn.model.BpmnModel;
|
||||
import org.flowable.common.engine.impl.identity.Authentication;
|
||||
@@ -30,14 +28,14 @@ import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.history.HistoricActivityInstance;
|
||||
import org.flowable.engine.history.HistoricActivityInstanceQuery;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.runtime.Execution;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.image.impl.DefaultProcessDiagramGenerator;
|
||||
import org.flowable.task.api.TaskQuery;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.*;
|
||||
@@ -133,20 +131,14 @@ public class EngineFlowController {
|
||||
processInstanceIdList.forEach(processInstanceId -> {
|
||||
// 查询流程实例
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.singleResult();
|
||||
.processInstanceId(processInstanceId).singleResult();
|
||||
if (Optional.ofNullable(processInstance).isPresent()) {
|
||||
// 查询执行实例
|
||||
List<String> executionIds = runtimeService.createExecutionQuery()
|
||||
.parentId(processInstanceId)
|
||||
.list()
|
||||
.stream()
|
||||
.map(Execution::getId)
|
||||
.collect(Collectors.toList());
|
||||
List<String> executionIds = runtimeService.createExecutionQuery().parentId(processInstanceId).list()
|
||||
.stream().map(Execution::getId).collect(Collectors.toList());
|
||||
// 更改活动状态为结束
|
||||
runtimeService.createChangeActivityStateBuilder()
|
||||
.moveExecutionsToSingleActivityId(executionIds, "end")
|
||||
.changeState();
|
||||
runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, "end")
|
||||
.changeState();
|
||||
}
|
||||
});
|
||||
return R.ok();
|
||||
@@ -160,12 +152,9 @@ public class EngineFlowController {
|
||||
@PostMapping("/queryCompletedTask")
|
||||
public R queryCompletedTask(@RequestBody TaskQueryParamDto taskQueryParamDto) {
|
||||
HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService
|
||||
.createHistoricActivityInstanceQuery();
|
||||
.createHistoricActivityInstanceQuery();
|
||||
HistoricActivityInstanceQuery activityInstanceQuery = historicActivityInstanceQuery
|
||||
.taskAssignee(taskQueryParamDto.getAssign())
|
||||
.finished()
|
||||
.orderByHistoricActivityInstanceEndTime()
|
||||
.desc();
|
||||
.taskAssignee(taskQueryParamDto.getAssign()).finished().orderByHistoricActivityInstanceEndTime().desc();
|
||||
|
||||
if (ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime())) {
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
@@ -237,12 +226,10 @@ public class EngineFlowController {
|
||||
TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(assign).orderByTaskCreateTime().desc();
|
||||
if (StrUtil.isNotBlank(taskQueryParamDto.getProcessName())) {
|
||||
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceNameLikeIgnoreCase(taskQueryParamDto.getProcessName())
|
||||
.list();
|
||||
.processInstanceNameLikeIgnoreCase(taskQueryParamDto.getProcessName()).list();
|
||||
if (CollUtil.isNotEmpty(processInstanceList)) {
|
||||
taskQuery.processInstanceIdIn(processInstanceList.stream()
|
||||
.map(ProcessInstance::getProcessDefinitionId)
|
||||
.collect(Collectors.toList()));
|
||||
taskQuery.processInstanceIdIn(processInstanceList.stream().map(ProcessInstance::getProcessDefinitionId)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-5
@@ -42,14 +42,12 @@ public class EngineProcessInstanceController {
|
||||
long pendingNum = taskQuery.taskAssignee(String.valueOf(userId)).count();
|
||||
// 已完成任务
|
||||
HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService
|
||||
.createHistoricActivityInstanceQuery();
|
||||
.createHistoricActivityInstanceQuery();
|
||||
|
||||
long completedNum = historicActivityInstanceQuery.taskAssignee(String.valueOf(userId)).finished().count();
|
||||
|
||||
IndexPageStatistics indexPageStatistics = IndexPageStatistics.builder()
|
||||
.pendingNum(pendingNum)
|
||||
.completedNum(completedNum)
|
||||
.build();
|
||||
IndexPageStatistics indexPageStatistics = IndexPageStatistics.builder().pendingNum(pendingNum)
|
||||
.completedNum(completedNum).build();
|
||||
|
||||
return R.ok(indexPageStatistics);
|
||||
}
|
||||
|
||||
+3
-6
@@ -74,7 +74,7 @@ public class EngineTaskController {
|
||||
@GetMapping("/engine/queryTask")
|
||||
public R queryTask(String taskId, String userId) {
|
||||
Optional<Task> task = Optional
|
||||
.ofNullable(taskService.createTaskQuery().taskId(taskId).taskAssignee(userId).singleResult());
|
||||
.ofNullable(taskService.createTaskQuery().taskId(taskId).taskAssignee(userId).singleResult());
|
||||
|
||||
if (task.isPresent()) {
|
||||
String processDefinitionId = task.get().getProcessDefinitionId();
|
||||
@@ -100,11 +100,8 @@ public class EngineTaskController {
|
||||
return R.ok(taskResultDto);
|
||||
}
|
||||
else {
|
||||
Optional<HistoricTaskInstance> historicTaskInstance = Optional
|
||||
.ofNullable(historyService.createHistoricTaskInstanceQuery()
|
||||
.taskId(taskId)
|
||||
.taskAssignee(userId)
|
||||
.singleResult());
|
||||
Optional<HistoricTaskInstance> historicTaskInstance = Optional.ofNullable(historyService
|
||||
.createHistoricTaskInstanceQuery().taskId(taskId).taskAssignee(userId).singleResult());
|
||||
|
||||
if (historicTaskInstance.isPresent()) {
|
||||
String processDefinitionId = historicTaskInstance.get().getProcessDefinitionId();
|
||||
|
||||
+6
-9
@@ -43,9 +43,8 @@ public class ExpressionHandler {
|
||||
public Long getUserId(String key, DelegateExecution execution) {
|
||||
Object variable = execution.getVariable(key);
|
||||
NodeUser nodeUserDto = objectMapper
|
||||
.readValue(objectMapper.writeValueAsString(variable), new TypeReference<List<NodeUser>>() {
|
||||
})
|
||||
.get(0);
|
||||
.readValue(objectMapper.writeValueAsString(variable), new TypeReference<List<NodeUser>>() {
|
||||
}).get(0);
|
||||
return nodeUserDto.getId();
|
||||
}
|
||||
|
||||
@@ -290,14 +289,12 @@ public class ExpressionHandler {
|
||||
});
|
||||
|
||||
List<Long> deptIdList = paramDeptList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey())).map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Long> userIdList = paramDeptList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey())).map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(deptIdList)) {
|
||||
R<List<SysUser>> r = remoteUserService.getUserIdListByDeptIdList(deptIdList);
|
||||
|
||||
+2
-2
@@ -15,9 +15,9 @@ public class NodeExpressionStrategyFactory {
|
||||
|
||||
public static String handleSingleCondition(Condition nodeConditionDto) {
|
||||
Map<String, NodeConditionStrategy> nodeConditionStrategyMap = SpringUtil
|
||||
.getBeansOfType(NodeConditionStrategy.class);
|
||||
.getBeansOfType(NodeConditionStrategy.class);
|
||||
NodeConditionStrategy nodeConditionHandler = nodeConditionStrategyMap
|
||||
.get(nodeConditionDto.getKeyType() + "NodeConditionStrategy");
|
||||
.get(nodeConditionDto.getKeyType() + "NodeConditionStrategy");
|
||||
if (nodeConditionHandler == null) {
|
||||
return "(1==1)";
|
||||
}
|
||||
|
||||
+11
-14
@@ -70,12 +70,10 @@ public class FlowProcessEventListener implements FlowableEventListener {
|
||||
remoteFlowTaskService.startNodeEvent(processNodeRecordParamDto);
|
||||
}
|
||||
|
||||
if (event.getType()
|
||||
.toString()
|
||||
.equals(FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION.toString())
|
||||
|| event.getType()
|
||||
.toString()
|
||||
.equals(FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED.toString())) {
|
||||
if (event.getType().toString()
|
||||
.equals(FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION.toString())
|
||||
|| event.getType().toString()
|
||||
.equals(FlowableEngineEventType.MULTI_INSTANCE_ACTIVITY_COMPLETED.toString())) {
|
||||
// 多实例任务
|
||||
FlowableMultiInstanceActivityCompletedEventImpl flowableActivityEvent = (FlowableMultiInstanceActivityCompletedEventImpl) event;
|
||||
String activityId = flowableActivityEvent.getActivityId();
|
||||
@@ -141,9 +139,8 @@ public class FlowProcessEventListener implements FlowableEventListener {
|
||||
log.debug("变量[{}]删除了:{} ", flowableVariableEvent.getVariableName(),
|
||||
flowableVariableEvent.getVariableValue());
|
||||
}
|
||||
if (event.getType()
|
||||
.toString()
|
||||
.equals(FlowableEngineEventType.PROCESS_COMPLETED_WITH_TERMINATE_END_EVENT.toString())) {
|
||||
if (event.getType().toString()
|
||||
.equals(FlowableEngineEventType.PROCESS_COMPLETED_WITH_TERMINATE_END_EVENT.toString())) {
|
||||
// 流程开完成
|
||||
FlowableProcessTerminatedEventImpl e = (FlowableProcessTerminatedEventImpl) event;
|
||||
DelegateExecution execution = e.getExecution();
|
||||
@@ -180,9 +177,9 @@ public class FlowProcessEventListener implements FlowableEventListener {
|
||||
processNodeRecordAssignUserParamDto.setFlowId(flowId);
|
||||
processNodeRecordAssignUserParamDto.setProcessInstanceId(processInstanceId);
|
||||
processNodeRecordAssignUserParamDto
|
||||
.setData(objectMapper.writeValueAsString(taskService.getVariables(task.getId())));
|
||||
.setData(objectMapper.writeValueAsString(taskService.getVariables(task.getId())));
|
||||
processNodeRecordAssignUserParamDto
|
||||
.setLocalData(objectMapper.writeValueAsString(taskService.getVariablesLocal(task.getId())));
|
||||
.setLocalData(objectMapper.writeValueAsString(taskService.getVariablesLocal(task.getId())));
|
||||
processNodeRecordAssignUserParamDto.setNodeId(taskDefinitionKey);
|
||||
processNodeRecordAssignUserParamDto.setUserId(Long.parseLong(assignee));
|
||||
processNodeRecordAssignUserParamDto.setTaskId(task.getId());
|
||||
@@ -223,9 +220,9 @@ public class FlowProcessEventListener implements FlowableEventListener {
|
||||
processNodeRecordAssignUserParamDto.setTaskId(task.getId());
|
||||
processNodeRecordAssignUserParamDto.setNodeName(task.getName());
|
||||
processNodeRecordAssignUserParamDto
|
||||
.setTaskType(StrUtil.equals(DelegationState.PENDING.toString(), delegationStateString) ? "DELEGATION"
|
||||
: (StrUtil.equals(DelegationState.RESOLVED.toString(), delegationStateString) ? "RESOLVED"
|
||||
: ""));
|
||||
.setTaskType(StrUtil.equals(DelegationState.PENDING.toString(), delegationStateString)
|
||||
? "DELEGATION" : (StrUtil.equals(DelegationState.RESOLVED.toString(), delegationStateString)
|
||||
? "RESOLVED" : ""));
|
||||
processNodeRecordAssignUserParamDto.setApproveDesc(Convert.toStr(task.getVariableLocal("approveDesc")));
|
||||
processNodeRecordAssignUserParamDto.setExecutionId(task.getExecutionId());
|
||||
|
||||
|
||||
+3
-3
@@ -62,8 +62,8 @@ public class MultiInstanceHandler {
|
||||
if (node != null) {
|
||||
Map<String, Object> variables = execution.getVariables();
|
||||
Integer assignedType = node.getAssignedType();
|
||||
List<Long> userIdList = assignUserStrategyMap.get(assignedType + "AssignUserStrategy")
|
||||
.handle(node, rootUser, variables);
|
||||
List<Long> userIdList = assignUserStrategyMap.get(assignedType + "AssignUserStrategy").handle(node,
|
||||
rootUser, variables);
|
||||
assignList.addAll(userIdList);
|
||||
}
|
||||
else {
|
||||
@@ -128,7 +128,7 @@ public class MultiInstanceHandler {
|
||||
|
||||
if (multipleMode == ProcessInstanceConstant.MULTIPLE_MODE_AL_SAME) {
|
||||
return BigDecimal.valueOf(nrOfCompletedInstances * 100L)
|
||||
.compareTo(BigDecimal.valueOf(nrOfCompletedInstances).multiply(modePercentage)) > 0;
|
||||
.compareTo(BigDecimal.valueOf(nrOfCompletedInstances).multiply(modePercentage)) > 0;
|
||||
}
|
||||
|
||||
return nrOfCompletedInstances == nrOfInstances;
|
||||
|
||||
+4
-6
@@ -44,14 +44,12 @@ public class AssignUserFixedStrategyImpl implements AssignUserStrategy {
|
||||
List<NodeUser> userDtoList = node.getNodeUserList();
|
||||
// 用户ID列表
|
||||
List<Long> userIdList = userDtoList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey())).map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
// 部门ID列表
|
||||
List<Long> deptIdList = userDtoList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey())).map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(deptIdList)) {
|
||||
R<List<SysUser>> r = remoteUserService.getUserIdListByDeptIdList(deptIdList);
|
||||
|
||||
+4
-6
@@ -31,12 +31,10 @@ public class AssignUserLeaderStrategyImpl implements AssignUserStrategy {
|
||||
@Override
|
||||
public List<Long> handle(Node node, NodeUser rootUser, Map<String, Object> variables) {
|
||||
// 获取部门ID
|
||||
return node.getNodeUserList()
|
||||
.stream()
|
||||
.map(nodeUser -> deptService.getAllDeptLeader(nodeUser.getId()))
|
||||
.flatMap((Function<R<List<Long>>, Stream<Long>>) listR -> listR.getData() == null ? null
|
||||
: listR.getData().stream())
|
||||
.collect(Collectors.toList());
|
||||
return node.getNodeUserList().stream().map(nodeUser -> deptService.getAllDeptLeader(nodeUser.getId()))
|
||||
.flatMap((Function<R<List<Long>>, Stream<Long>>) listR -> listR.getData() == null ? null
|
||||
: listR.getData().stream())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
+2
-3
@@ -40,9 +40,8 @@ public class AssignUserRoleStrategyImpl implements AssignUserStrategy {
|
||||
// 使用 lambda 表达式和方法引用从 NodeUser 列表中提取角色 ID
|
||||
List<Long> roleIds = node.getNodeUserList().stream().map(NodeUser::getId).collect(Collectors.toList());
|
||||
// 提取 Optional 结果中的数据
|
||||
List<Long> data = RetOps.of(remoteUserService.getUserIdListByRoleIdList(roleIds))
|
||||
.getData()
|
||||
.orElseGet(Collections::emptyList);
|
||||
List<Long> data = RetOps.of(remoteUserService.getUserIdListByRoleIdList(roleIds)).getData()
|
||||
.orElseGet(Collections::emptyList);
|
||||
|
||||
// 返回用户 ID 列表
|
||||
return new ArrayList<>(data);
|
||||
|
||||
+4
-8
@@ -41,16 +41,12 @@ public class ApproveServiceTask implements JavaDelegate {
|
||||
if (refuse != null) {
|
||||
String handler = refuse.getHandler();
|
||||
if (StrUtil.equals(handler, "TO_NODE")) {
|
||||
runtimeService.createChangeActivityStateBuilder()
|
||||
.processInstanceId(processInstanceId)
|
||||
.moveActivityIdTo(nodeIdO, refuse.getNodeId())
|
||||
.changeState();
|
||||
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId)
|
||||
.moveActivityIdTo(nodeIdO, refuse.getNodeId()).changeState();
|
||||
}
|
||||
else {
|
||||
runtimeService.createChangeActivityStateBuilder()
|
||||
.processInstanceId(processInstanceId)
|
||||
.moveActivityIdTo(nodeIdO, "end")
|
||||
.changeState();
|
||||
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId)
|
||||
.moveActivityIdTo(nodeIdO, "end").changeState();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-9
@@ -46,14 +46,12 @@ public class CopyServiceTask implements JavaDelegate {
|
||||
List<NodeUser> userDtoList = node.getNodeUserList();
|
||||
// 用户ID列表
|
||||
List<String> userIdList = userDtoList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(w -> Convert.toStr(w.getId()))
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(w -> Convert.toStr(w.getId())).collect(Collectors.toList());
|
||||
// 部门ID列表
|
||||
List<String> deptIdList = userDtoList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(w -> Convert.toStr(w.getId()))
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(w -> Convert.toStr(w.getId())).collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(deptIdList)) {
|
||||
|
||||
@@ -73,9 +71,8 @@ public class CopyServiceTask implements JavaDelegate {
|
||||
// 获取发起人
|
||||
Object rootUserObj = execution.getVariable("root");
|
||||
NodeUser rootUser = objectMapper
|
||||
.readValue(objectMapper.writeValueAsString(rootUserObj), new TypeReference<List<NodeUser>>() {
|
||||
})
|
||||
.get(0);
|
||||
.readValue(objectMapper.writeValueAsString(rootUserObj), new TypeReference<List<NodeUser>>() {
|
||||
}).get(0);
|
||||
|
||||
Map<String, Object> variables = execution.getVariables();
|
||||
|
||||
|
||||
+7
-7
@@ -128,7 +128,7 @@ public class FlowableUtils {
|
||||
// 获取子流程用户任务节点
|
||||
List<UserTask> childUserTaskList = findChildProcessUserTasks(
|
||||
(StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
|
||||
.toArray()[0],
|
||||
.toArray()[0],
|
||||
null, null);
|
||||
// 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
|
||||
if (childUserTaskList != null && childUserTaskList.size() > 0) {
|
||||
@@ -189,7 +189,7 @@ public class FlowableUtils {
|
||||
if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
|
||||
List<FlowElement> childUserTaskList = iteratorFindChildUserTasks(
|
||||
(FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
|
||||
.toArray()[0]),
|
||||
.toArray()[0]),
|
||||
runActiveIdList, hasSequenceFlow, null);
|
||||
// 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
|
||||
if (childUserTaskList != null && childUserTaskList.size() > 0) {
|
||||
@@ -240,7 +240,7 @@ public class FlowableUtils {
|
||||
if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
|
||||
List<UserTask> childUserTaskList = findChildProcessUserTasks(
|
||||
(FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
|
||||
.toArray()[0]),
|
||||
.toArray()[0]),
|
||||
hasSequenceFlow, null);
|
||||
// 如果找到节点,则说明该线路找到节点,不继续向下找,反之继续
|
||||
if (childUserTaskList != null && childUserTaskList.size() > 0) {
|
||||
@@ -302,12 +302,12 @@ public class FlowableUtils {
|
||||
if (sequenceFlow.getSourceFlowElement() instanceof SubProcess) {
|
||||
dirtyRoads = findChildProcessAllDirtyRoad(
|
||||
(StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
|
||||
.toArray()[0],
|
||||
.toArray()[0],
|
||||
null, dirtyRoads);
|
||||
// 是否存在子流程上,true 是,false 否
|
||||
Boolean isInChildProcess = dirtyTargetInChildProcess(
|
||||
(StartEvent) ((SubProcess) sequenceFlow.getSourceFlowElement()).getFlowElements()
|
||||
.toArray()[0],
|
||||
.toArray()[0],
|
||||
null, targets, null);
|
||||
if (isInChildProcess) {
|
||||
// 已在子流程上找到,该路线结束
|
||||
@@ -354,7 +354,7 @@ public class FlowableUtils {
|
||||
if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
|
||||
dirtyRoads = findChildProcessAllDirtyRoad(
|
||||
(FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
|
||||
.toArray()[0]),
|
||||
.toArray()[0]),
|
||||
hasSequenceFlow, dirtyRoads);
|
||||
}
|
||||
// 继续迭代
|
||||
@@ -401,7 +401,7 @@ public class FlowableUtils {
|
||||
if (sequenceFlow.getTargetFlowElement() instanceof SubProcess) {
|
||||
inChildProcess = dirtyTargetInChildProcess(
|
||||
(FlowElement) (((SubProcess) sequenceFlow.getTargetFlowElement()).getFlowElements()
|
||||
.toArray()[0]),
|
||||
.toArray()[0]),
|
||||
hasSequenceFlow, targets, inChildProcess);
|
||||
}
|
||||
// 继续迭代
|
||||
|
||||
+84
-154
@@ -28,9 +28,9 @@ import java.util.List;
|
||||
*/
|
||||
@Slf4j
|
||||
public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 构建模型
|
||||
*
|
||||
* @param nodeDto 前端传输节点
|
||||
* @return
|
||||
*/
|
||||
@@ -42,17 +42,16 @@ public class ModelUtil {
|
||||
process.setId(flowId);
|
||||
process.setName(processName);
|
||||
|
||||
//流程监听器
|
||||
// 流程监听器
|
||||
ArrayList<EventListener> eventListeners = new ArrayList<>();
|
||||
|
||||
{
|
||||
//流程实例监听器
|
||||
// 流程实例监听器
|
||||
EventListener eventListener = new EventListener();
|
||||
|
||||
eventListener.setImplementationType("class");
|
||||
eventListener.setImplementation(FlowProcessEventListener.class.getCanonicalName());
|
||||
|
||||
|
||||
eventListeners.add(eventListener);
|
||||
|
||||
}
|
||||
@@ -60,24 +59,20 @@ public class ModelUtil {
|
||||
|
||||
NodeUtil.addEndNode(nodeDto);
|
||||
|
||||
|
||||
//创建所有的节点
|
||||
// 创建所有的节点
|
||||
buildAllNode(process, nodeDto, flowId);
|
||||
//创建所有的内部节点连接线
|
||||
// 创建所有的内部节点连接线
|
||||
buildAllNodeInnerSequence(process, nodeDto, flowId);
|
||||
//创建节点间连线
|
||||
// 创建节点间连线
|
||||
buildAllNodeOuterSequence(process, nodeDto, null);
|
||||
//处理分支和下级连线
|
||||
|
||||
// 处理分支和下级连线
|
||||
|
||||
bpmnModel.addProcess(process);
|
||||
return bpmnModel;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 先创建所有的节点
|
||||
*
|
||||
* @param process
|
||||
* @param nodeDto
|
||||
* @param flowId
|
||||
@@ -87,7 +82,6 @@ public class ModelUtil {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
List<FlowElement> flowElementList = buildNode(nodeDto, flowId);
|
||||
for (FlowElement flowElement : flowElementList) {
|
||||
if (process.getFlowElement(flowElement.getId()) == null) {
|
||||
@@ -95,36 +89,33 @@ public class ModelUtil {
|
||||
}
|
||||
}
|
||||
|
||||
//子节点
|
||||
// 子节点
|
||||
Node children = nodeDto.getChildren();
|
||||
|
||||
if (NodeTypeEnum.getByValue(nodeDto.getType()).getBranch()) {
|
||||
|
||||
//条件分支
|
||||
// 条件分支
|
||||
List<Node> branchs = nodeDto.getConditionNodes();
|
||||
for (Node branch : branchs) {
|
||||
buildAllNode(process, branch.getChildren(),
|
||||
flowId);
|
||||
|
||||
buildAllNode(process, branch.getChildren(), flowId);
|
||||
|
||||
}
|
||||
if (NodeUtil.isNode(children)) {
|
||||
buildAllNode(process, children, flowId);
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
|
||||
if (NodeUtil.isNode(children)) {
|
||||
buildAllNode(process, children, flowId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 先创建所有的内部节点连接线
|
||||
*
|
||||
* @param process
|
||||
* @param nodeDto
|
||||
* @param flowId
|
||||
@@ -134,41 +125,37 @@ public class ModelUtil {
|
||||
return;
|
||||
}
|
||||
|
||||
//画内部线
|
||||
// 画内部线
|
||||
List<SequenceFlow> flowList = buildInnerSequenceFlow(nodeDto, flowId);
|
||||
for (SequenceFlow sequenceFlow : flowList) {
|
||||
process.addFlowElement(sequenceFlow);
|
||||
}
|
||||
|
||||
//子节点
|
||||
// 子节点
|
||||
Node children = nodeDto.getChildren();
|
||||
if (NodeTypeEnum.getByValue(nodeDto.getType()).getBranch() ) {
|
||||
//条件分支
|
||||
if (NodeTypeEnum.getByValue(nodeDto.getType()).getBranch()) {
|
||||
// 条件分支
|
||||
List<Node> branchs = nodeDto.getConditionNodes();
|
||||
for (Node branch : branchs) {
|
||||
buildAllNodeInnerSequence(process, branch.getChildren(),
|
||||
flowId);
|
||||
|
||||
buildAllNodeInnerSequence(process, branch.getChildren(), flowId);
|
||||
|
||||
}
|
||||
if (NodeUtil.isNode(children)) {
|
||||
buildAllNodeInnerSequence(process, children, flowId);
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
|
||||
if (NodeUtil.isNode(children)) {
|
||||
buildAllNodeInnerSequence(process, children, flowId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 递归创建节点间连线
|
||||
*
|
||||
* @param process 流程
|
||||
* @param nodeDto 节点对象
|
||||
* @param nextId
|
||||
@@ -179,85 +166,81 @@ public class ModelUtil {
|
||||
return;
|
||||
}
|
||||
|
||||
//子节点
|
||||
// 子节点
|
||||
Node children = nodeDto.getChildren();
|
||||
if (NodeTypeEnum.getByValue(nodeDto.getType()).getBranch() ) {
|
||||
// children = children.getChildren();
|
||||
//条件分支
|
||||
if (NodeTypeEnum.getByValue(nodeDto.getType()).getBranch()) {
|
||||
// children = children.getChildren();
|
||||
// 条件分支
|
||||
List<Node> branchs = nodeDto.getConditionNodes();
|
||||
int ord = 1;
|
||||
int size = branchs.size();
|
||||
for (Node branch : branchs) {
|
||||
|
||||
|
||||
buildAllNodeOuterSequence(process, branch.getChildren(), nodeDto.getTailId());
|
||||
|
||||
String expression = null;
|
||||
|
||||
if (nodeDto.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue() ) {
|
||||
if (nodeDto.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue()) {
|
||||
if (ord == size) {
|
||||
expression = NodeExpressionStrategyFactory.handleDefaultBranch(branchs, ord - 1);
|
||||
} else if (nodeDto.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue() && ord > 1) {
|
||||
}
|
||||
else if (nodeDto.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue() && ord > 1) {
|
||||
expression = NodeExpressionStrategyFactory.handleDefaultBranch(branchs, ord - 1);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
expression = NodeExpressionStrategyFactory.handle(branch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//添加连线
|
||||
// 添加连线
|
||||
if (!NodeUtil.isNode(branch.getChildren())) {
|
||||
//当前分支 没有其他节点了 所有就是网关和网关后面节点直接连线
|
||||
// 当前分支 没有其他节点了 所有就是网关和网关后面节点直接连线
|
||||
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getId(), nodeDto.getTailId(),
|
||||
expression,
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), nodeDto.getName())
|
||||
);
|
||||
expression, StrUtil.format("{}->{}", nodeDto.getName(), nodeDto.getName()));
|
||||
process.addFlowElement(sequenceFlow);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getId(), branch.getChildren().getHeadId(),
|
||||
expression,
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), branch.getChildren().getName())
|
||||
);
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getId(),
|
||||
branch.getChildren().getHeadId(), expression,
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), branch.getChildren().getName()));
|
||||
process.addFlowElement(sequenceFlow);
|
||||
}
|
||||
ord++;
|
||||
|
||||
}
|
||||
//分支结尾的合并分支节点-》下一个节点
|
||||
if (children != null && StrUtil.isNotBlank(children.getHeadId()) && StrUtil.isNotBlank(nodeDto.getTailId())) {
|
||||
// 分支结尾的合并分支节点-》下一个节点
|
||||
if (children != null && StrUtil.isNotBlank(children.getHeadId())
|
||||
&& StrUtil.isNotBlank(nodeDto.getTailId())) {
|
||||
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getTailId(), children.getHeadId(),
|
||||
"",
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), children.getName())
|
||||
);
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getTailId(), children.getHeadId(), "",
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), children.getName()));
|
||||
process.addFlowElement(sequenceFlow);
|
||||
|
||||
} else if (StrUtil.isAllNotBlank(nodeDto.getTailId(), nextId)) {
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getTailId(), nextId,
|
||||
"",
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), nextId)
|
||||
);
|
||||
}
|
||||
else if (StrUtil.isAllNotBlank(nodeDto.getTailId(), nextId)) {
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeDto.getTailId(), nextId, "",
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), nextId));
|
||||
process.addFlowElement(sequenceFlow);
|
||||
}
|
||||
|
||||
|
||||
buildAllNodeOuterSequence(process, children, nextId);
|
||||
|
||||
|
||||
} else {
|
||||
//添加连线
|
||||
}
|
||||
else {
|
||||
// 添加连线
|
||||
if (NodeUtil.isNode(children)) {
|
||||
List<SequenceFlow> sequenceFlowList = buildSequenceFlow(children, nodeDto, "");
|
||||
for (SequenceFlow sequenceFlow : sequenceFlowList) {
|
||||
process.addFlowElement(sequenceFlow);
|
||||
}
|
||||
buildAllNodeOuterSequence(process, children, nextId);
|
||||
} else if (nodeDto.getType() != NodeTypeEnum.END.getValue().intValue()) {
|
||||
SequenceFlow seq = buildSingleSequenceFlow(nodeDto.getTailId(), nextId, "", StrUtil.format("{}->{}",
|
||||
nodeDto.getName(), nextId));
|
||||
}
|
||||
else if (nodeDto.getType() != NodeTypeEnum.END.getValue().intValue()) {
|
||||
SequenceFlow seq = buildSingleSequenceFlow(nodeDto.getTailId(), nextId, "",
|
||||
StrUtil.format("{}->{}", nodeDto.getName(), nextId));
|
||||
|
||||
process.addFlowElement(seq);
|
||||
|
||||
@@ -266,11 +249,9 @@ public class ModelUtil {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建节点
|
||||
*
|
||||
* @param node 前端传输节点
|
||||
* @param node 前端传输节点
|
||||
* @param flowId
|
||||
* @return
|
||||
*/
|
||||
@@ -280,13 +261,13 @@ public class ModelUtil {
|
||||
return flowElementList;
|
||||
}
|
||||
|
||||
//设置节点的连线头节点
|
||||
// 设置节点的连线头节点
|
||||
node.setHeadId(node.getId());
|
||||
//设置节点的连线尾节点
|
||||
// 设置节点的连线尾节点
|
||||
node.setTailId(node.getId());
|
||||
node.setName(StrUtil.format("{}[{}]", node.getName(), RandomUtil.randomNumbers(5)));
|
||||
|
||||
//存储节点数据
|
||||
// 存储节点数据
|
||||
RemoteFlowTaskService remoteFlowTaskService = SpringUtil.getBean(RemoteFlowTaskService.class);
|
||||
ProcessNodeDataDto processNodeDataDto = new ProcessNodeDataDto();
|
||||
processNodeDataDto.setFlowId(flowId);
|
||||
@@ -294,32 +275,31 @@ public class ModelUtil {
|
||||
processNodeDataDto.setData(JSONUtil.toJsonStr(node));
|
||||
remoteFlowTaskService.saveNodeOriData(processNodeDataDto);
|
||||
|
||||
//开始
|
||||
// 开始
|
||||
if (node.getType() == NodeTypeEnum.ROOT.getValue().intValue()) {
|
||||
flowElementList.addAll(buildStartNode(node));
|
||||
}
|
||||
|
||||
//结束
|
||||
// 结束
|
||||
if (node.getType() == NodeTypeEnum.END.getValue().intValue()) {
|
||||
flowElementList.add(buildEndNode(node, false));
|
||||
}
|
||||
|
||||
//审批
|
||||
// 审批
|
||||
if (node.getType() == NodeTypeEnum.APPROVAL.getValue().intValue()) {
|
||||
|
||||
|
||||
flowElementList.addAll(buildApproveNode(node));
|
||||
}
|
||||
|
||||
//抄送
|
||||
// 抄送
|
||||
if (node.getType() == NodeTypeEnum.CC.getValue().intValue()) {
|
||||
flowElementList.add(buildCCNode(node));
|
||||
}
|
||||
//条件分支
|
||||
// 条件分支
|
||||
if (node.getType() == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue()) {
|
||||
flowElementList.addAll(buildInclusiveGatewayNode(node));
|
||||
}
|
||||
//并行分支
|
||||
// 并行分支
|
||||
if (node.getType() == NodeTypeEnum.PARALLEL_GATEWAY.getValue().intValue()) {
|
||||
flowElementList.addAll(buildParallelGatewayNode(node));
|
||||
}
|
||||
@@ -328,9 +308,7 @@ public class ModelUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建开始节点
|
||||
* 添加一个自动完成任务的用户任务节点
|
||||
*
|
||||
* 构建开始节点 添加一个自动完成任务的用户任务节点
|
||||
* @param node 前端传输节点
|
||||
* @return
|
||||
*/
|
||||
@@ -338,22 +316,17 @@ public class ModelUtil {
|
||||
|
||||
List<FlowElement> flowElementList = new ArrayList<>();
|
||||
|
||||
|
||||
StartEvent startEvent = new StartEvent();
|
||||
startEvent.setId(node.getId());
|
||||
startEvent.setName(node.getName());
|
||||
|
||||
flowElementList.add(startEvent);
|
||||
|
||||
|
||||
|
||||
|
||||
return flowElementList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建审批节点
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
@@ -361,21 +334,17 @@ public class ModelUtil {
|
||||
List<FlowElement> flowElementList = new ArrayList<>();
|
||||
node.setTailId(StrUtil.format("approve_service_task_{}", node.getId()));
|
||||
|
||||
|
||||
//创建了任务执行监听器
|
||||
//先执行指派人 后创建
|
||||
//https://tkjohn.github.io/flowable-userguide/#eventDispatcher
|
||||
// 创建了任务执行监听器
|
||||
// 先执行指派人 后创建
|
||||
// https://tkjohn.github.io/flowable-userguide/#eventDispatcher
|
||||
FlowableListener createListener = new FlowableListener();
|
||||
createListener.setImplementation(ApprovalCreateListener.class.getCanonicalName());
|
||||
createListener.setImplementationType("class");
|
||||
createListener.setEvent("create");
|
||||
|
||||
|
||||
UserTask userTask = buildUserTask(node, createListener);
|
||||
flowElementList.add(userTask);
|
||||
|
||||
|
||||
|
||||
ServiceTask serviceTask = new ServiceTask();
|
||||
serviceTask.setId(StrUtil.format("approve_service_task_{}", node.getId()));
|
||||
serviceTask.setName(StrUtil.format("{}_服务任务", node.getName()));
|
||||
@@ -383,36 +352,31 @@ public class ModelUtil {
|
||||
serviceTask.setImplementation(ApproveServiceTask.class.getCanonicalName());
|
||||
serviceTask.setAsynchronous(false);
|
||||
|
||||
|
||||
|
||||
flowElementList.add(serviceTask);
|
||||
|
||||
|
||||
{
|
||||
|
||||
|
||||
//执行人处理
|
||||
// 执行人处理
|
||||
|
||||
String inputDataItem = "${multiInstanceHandler.resolveAssignee(execution)}";
|
||||
|
||||
|
||||
//串行
|
||||
// 串行
|
||||
|
||||
boolean isSequential = true;
|
||||
|
||||
Integer multipleMode = node.getMultipleMode();
|
||||
//多人
|
||||
// 多人
|
||||
if ((multipleMode == ProcessInstanceConstant.MULTIPLE_MODE_AL_SAME)) {
|
||||
//并行会签
|
||||
// 并行会签
|
||||
isSequential = false;
|
||||
}
|
||||
if ((multipleMode == ProcessInstanceConstant.MULTIPLE_MODE_ALL_SORT)) {
|
||||
|
||||
//串行会签
|
||||
// 串行会签
|
||||
}
|
||||
if ((multipleMode == ProcessInstanceConstant.MULTIPLE_MODE_ONE)) {
|
||||
|
||||
//或签
|
||||
// 或签
|
||||
isSequential = false;
|
||||
}
|
||||
|
||||
@@ -431,11 +395,8 @@ public class ModelUtil {
|
||||
return flowElementList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 创建用户任务
|
||||
*
|
||||
* @param node 前端传输节点
|
||||
* @return
|
||||
*/
|
||||
@@ -459,13 +420,11 @@ public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 构建简单的包容网关
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
private static FlowElement buildSimpleExclusiveGatewayNode(Node node) {
|
||||
|
||||
|
||||
ExclusiveGateway exclusiveGateway = new ExclusiveGateway();
|
||||
exclusiveGateway.setId(node.getId());
|
||||
exclusiveGateway.setName(node.getName());
|
||||
@@ -474,10 +433,8 @@ public class ModelUtil {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建并行网关
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
@@ -490,7 +447,7 @@ public class ModelUtil {
|
||||
inclusiveGateway.setName(node.getName());
|
||||
flowElementList.add(inclusiveGateway);
|
||||
|
||||
//合并网关
|
||||
// 合并网关
|
||||
ParallelGateway parallelGateway = new ParallelGateway();
|
||||
parallelGateway.setId(StrUtil.format("{}_merge_gateway", node.getId()));
|
||||
parallelGateway.setName(StrUtil.format("{}_合并网关", node.getName()));
|
||||
@@ -501,7 +458,6 @@ public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 构建包容网关
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
@@ -516,7 +472,7 @@ public class ModelUtil {
|
||||
inclusiveGateway.setName(node.getName());
|
||||
flowElementList.add(inclusiveGateway);
|
||||
|
||||
//合并网关
|
||||
// 合并网关
|
||||
InclusiveGateway gateway = new InclusiveGateway();
|
||||
gateway.setId(StrUtil.format("{}_merge_gateway", node.getId()));
|
||||
gateway.setName(StrUtil.format("{}_合并网关", node.getName()));
|
||||
@@ -527,8 +483,7 @@ public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 构建结束节点
|
||||
*
|
||||
* @param node 前端传输节点
|
||||
* @param node 前端传输节点
|
||||
* @param terminateAll
|
||||
* @return
|
||||
*/
|
||||
@@ -537,7 +492,6 @@ public class ModelUtil {
|
||||
endEvent.setId(node.getId());
|
||||
endEvent.setName(node.getName());
|
||||
|
||||
|
||||
List<EventDefinition> definitionList = new ArrayList<>();
|
||||
TerminateEventDefinition definition = new TerminateEventDefinition();
|
||||
definition.setTerminateAll(terminateAll);
|
||||
@@ -549,16 +503,14 @@ public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 创建连接线
|
||||
*
|
||||
* @param node 子级节点
|
||||
* @param node 子级节点
|
||||
* @param parentNode 父级节点
|
||||
* @param expression
|
||||
* @return 所有连接线
|
||||
*/
|
||||
private static List<SequenceFlow> buildSequenceFlow(Node node, Node parentNode, String expression
|
||||
) {
|
||||
private static List<SequenceFlow> buildSequenceFlow(Node node, Node parentNode, String expression) {
|
||||
List<SequenceFlow> sequenceFlowList = new ArrayList<>();
|
||||
//没有子级了
|
||||
// 没有子级了
|
||||
if (!NodeUtil.isNode(node)) {
|
||||
return sequenceFlowList;
|
||||
}
|
||||
@@ -569,19 +521,15 @@ public class ModelUtil {
|
||||
return sequenceFlowList;
|
||||
}
|
||||
|
||||
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(parentNode.getTailId(), node.getHeadId(), expression,
|
||||
StrUtil.format("{}->{}", parentNode.getName(), node.getName())
|
||||
);
|
||||
StrUtil.format("{}->{}", parentNode.getName(), node.getName()));
|
||||
sequenceFlowList.add(sequenceFlow);
|
||||
|
||||
|
||||
return sequenceFlowList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成扩展数据
|
||||
*
|
||||
* @param key
|
||||
* @param val
|
||||
* @return
|
||||
@@ -596,7 +544,6 @@ public class ModelUtil {
|
||||
|
||||
/**
|
||||
* 创建抄送节点
|
||||
*
|
||||
* @param node
|
||||
* @return
|
||||
*/
|
||||
@@ -612,9 +559,8 @@ public class ModelUtil {
|
||||
ExtensionElement e = new ExtensionElement();
|
||||
{
|
||||
|
||||
|
||||
e.setName("flowable:failedJobRetryTimeCycle");
|
||||
//上面的例子会让作业执行器重试5次,并在每次重试前等待1分钟。
|
||||
// 上面的例子会让作业执行器重试5次,并在每次重试前等待1分钟。
|
||||
e.setElementText("R5/PT1M");
|
||||
|
||||
}
|
||||
@@ -623,57 +569,42 @@ public class ModelUtil {
|
||||
return serviceTask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 创建连接线
|
||||
*
|
||||
* @param node 父级节点
|
||||
* @param node 父级节点
|
||||
* @param flowId
|
||||
* @return 所有连接线
|
||||
*/
|
||||
private static List<SequenceFlow> buildInnerSequenceFlow(Node node, String flowId
|
||||
) {
|
||||
|
||||
private static List<SequenceFlow> buildInnerSequenceFlow(Node node, String flowId) {
|
||||
|
||||
List<SequenceFlow> sequenceFlowList = new ArrayList<>();
|
||||
if (!NodeUtil.isNode(node)) {
|
||||
return sequenceFlowList;
|
||||
}
|
||||
|
||||
|
||||
String nodeId = node.getId();
|
||||
if (StrUtil.hasBlank(nodeId)) {
|
||||
return sequenceFlowList;
|
||||
}
|
||||
|
||||
|
||||
if (node.getType() == NodeTypeEnum.APPROVAL.getValue().intValue()) {
|
||||
|
||||
|
||||
String gatewayId = StrUtil.format("approve_service_task_{}", nodeId);
|
||||
|
||||
|
||||
{
|
||||
SequenceFlow sequenceFlow = buildSingleSequenceFlow(nodeId, gatewayId, "${12==12}", null);
|
||||
sequenceFlowList.add(sequenceFlow);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return sequenceFlowList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建单个连接线
|
||||
*
|
||||
* @param pId 父级id
|
||||
* @param childId 子级id
|
||||
* @param pId 父级id
|
||||
* @param childId 子级id
|
||||
* @param expression 表达式
|
||||
* @param name
|
||||
* @return
|
||||
@@ -693,5 +624,4 @@ public class ModelUtil {
|
||||
return sequenceFlow;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+15
-71
@@ -12,29 +12,8 @@
|
||||
*/
|
||||
package org.flowable.common.engine.impl;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.naming.InitialContext;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
|
||||
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
|
||||
@@ -47,27 +26,7 @@ import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
|
||||
import org.apache.ibatis.transaction.TransactionFactory;
|
||||
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
||||
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
|
||||
import org.apache.ibatis.type.ArrayTypeHandler;
|
||||
import org.apache.ibatis.type.BigDecimalTypeHandler;
|
||||
import org.apache.ibatis.type.BlobInputStreamTypeHandler;
|
||||
import org.apache.ibatis.type.BlobTypeHandler;
|
||||
import org.apache.ibatis.type.BooleanTypeHandler;
|
||||
import org.apache.ibatis.type.ByteTypeHandler;
|
||||
import org.apache.ibatis.type.ClobTypeHandler;
|
||||
import org.apache.ibatis.type.DateOnlyTypeHandler;
|
||||
import org.apache.ibatis.type.DateTypeHandler;
|
||||
import org.apache.ibatis.type.DoubleTypeHandler;
|
||||
import org.apache.ibatis.type.FloatTypeHandler;
|
||||
import org.apache.ibatis.type.IntegerTypeHandler;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
import org.apache.ibatis.type.LongTypeHandler;
|
||||
import org.apache.ibatis.type.NClobTypeHandler;
|
||||
import org.apache.ibatis.type.NStringTypeHandler;
|
||||
import org.apache.ibatis.type.ShortTypeHandler;
|
||||
import org.apache.ibatis.type.SqlxmlTypeHandler;
|
||||
import org.apache.ibatis.type.StringTypeHandler;
|
||||
import org.apache.ibatis.type.TimeOnlyTypeHandler;
|
||||
import org.apache.ibatis.type.TypeHandlerRegistry;
|
||||
import org.apache.ibatis.type.*;
|
||||
import org.flowable.common.engine.api.FlowableException;
|
||||
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
|
||||
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
|
||||
@@ -78,25 +37,10 @@ import org.flowable.common.engine.impl.cfg.CommandExecutorImpl;
|
||||
import org.flowable.common.engine.impl.cfg.IdGenerator;
|
||||
import org.flowable.common.engine.impl.cfg.TransactionContextFactory;
|
||||
import org.flowable.common.engine.impl.cfg.standalone.StandaloneMybatisTransactionContextFactory;
|
||||
import org.flowable.common.engine.impl.db.CommonDbSchemaManager;
|
||||
import org.flowable.common.engine.impl.db.DbSqlSessionFactory;
|
||||
import org.flowable.common.engine.impl.db.LogSqlExecutionTimePlugin;
|
||||
import org.flowable.common.engine.impl.db.MybatisTypeAliasConfigurator;
|
||||
import org.flowable.common.engine.impl.db.MybatisTypeHandlerConfigurator;
|
||||
import org.flowable.common.engine.impl.db.SchemaManager;
|
||||
import org.flowable.common.engine.impl.db.*;
|
||||
import org.flowable.common.engine.impl.event.EventDispatchAction;
|
||||
import org.flowable.common.engine.impl.event.FlowableEventDispatcherImpl;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandConfig;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContextFactory;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContextInterceptor;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandInterceptor;
|
||||
import org.flowable.common.engine.impl.interceptor.CrDbRetryInterceptor;
|
||||
import org.flowable.common.engine.impl.interceptor.DefaultCommandInvoker;
|
||||
import org.flowable.common.engine.impl.interceptor.LogInterceptor;
|
||||
import org.flowable.common.engine.impl.interceptor.SessionFactory;
|
||||
import org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor;
|
||||
import org.flowable.common.engine.impl.interceptor.*;
|
||||
import org.flowable.common.engine.impl.lock.LockManager;
|
||||
import org.flowable.common.engine.impl.lock.LockManagerImpl;
|
||||
import org.flowable.common.engine.impl.logging.LoggingListener;
|
||||
@@ -106,13 +50,7 @@ import org.flowable.common.engine.impl.persistence.GenericManagerFactory;
|
||||
import org.flowable.common.engine.impl.persistence.StrongUuidGenerator;
|
||||
import org.flowable.common.engine.impl.persistence.cache.EntityCache;
|
||||
import org.flowable.common.engine.impl.persistence.cache.EntityCacheImpl;
|
||||
import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManager;
|
||||
import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManagerImpl;
|
||||
import org.flowable.common.engine.impl.persistence.entity.Entity;
|
||||
import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManager;
|
||||
import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManagerImpl;
|
||||
import org.flowable.common.engine.impl.persistence.entity.TableDataManager;
|
||||
import org.flowable.common.engine.impl.persistence.entity.TableDataManagerImpl;
|
||||
import org.flowable.common.engine.impl.persistence.entity.*;
|
||||
import org.flowable.common.engine.impl.persistence.entity.data.ByteArrayDataManager;
|
||||
import org.flowable.common.engine.impl.persistence.entity.data.PropertyDataManager;
|
||||
import org.flowable.common.engine.impl.persistence.entity.data.impl.MybatisByteArrayDataManager;
|
||||
@@ -126,8 +64,14 @@ import org.flowable.eventregistry.api.EventRegistryEventConsumer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import javax.naming.InitialContext;
|
||||
import javax.sql.DataSource;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.sql.*;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 覆盖原有配置支持国产化数据库
|
||||
@@ -506,7 +450,7 @@ public abstract class AbstractEngineConfiguration {
|
||||
databaseTypeMappings.setProperty("DB2/PTX", DATABASE_TYPE_DB2);
|
||||
databaseTypeMappings.setProperty("DB2/2", DATABASE_TYPE_DB2);
|
||||
databaseTypeMappings.setProperty("DB2 UDB AS400", DATABASE_TYPE_DB2);
|
||||
databaseTypeMappings.setProperty("DM DBMS",DATABASE_TYPE_MYSQL);//扩展支持达梦数据
|
||||
databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_MYSQL);// 扩展支持达梦数据
|
||||
databaseTypeMappings.setProperty(PRODUCT_NAME_CRDB, DATABASE_TYPE_COCKROACHDB);
|
||||
return databaseTypeMappings;
|
||||
}
|
||||
|
||||
-1
@@ -115,7 +115,6 @@ public interface RemoteFlowEngineService {
|
||||
@PostMapping("/task/delegateTask")
|
||||
R<String> delegateTask(@RequestBody TaskParamDto taskParamDto);
|
||||
|
||||
|
||||
/**
|
||||
* 查询任务
|
||||
* @param taskId 任务ID
|
||||
|
||||
+2
-4
@@ -61,10 +61,8 @@ public interface IBaseEnum<T> {
|
||||
Objects.requireNonNull(label);
|
||||
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
|
||||
String finalLabel = label;
|
||||
E matchEnum = allEnums.stream()
|
||||
.filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
E matchEnum = allEnums.stream().filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel)).findFirst()
|
||||
.orElse(null);
|
||||
|
||||
Object value = null;
|
||||
if (matchEnum != null) {
|
||||
|
||||
+2
-2
@@ -10,8 +10,8 @@ import lombok.Data;
|
||||
@Data
|
||||
public class SelectValue {
|
||||
|
||||
private String key;
|
||||
private String key;
|
||||
|
||||
private String value;
|
||||
private String value;
|
||||
|
||||
}
|
||||
+3
-6
@@ -28,12 +28,9 @@ public class SequenceConfiguration {
|
||||
@Bean
|
||||
public Sequence flowSequence(DataSource dataSource, SequenceDbProperties properties) {
|
||||
return DbSeqBuilder.create()
|
||||
.bizName(() -> String.format("flow_%s_%s", TenantContextHolder.getTenantId(), DateUtil.today()))
|
||||
.dataSource(dataSource)
|
||||
.step(properties.getStep())
|
||||
.retryTimes(properties.getRetryTimes())
|
||||
.tableName(properties.getTableName())
|
||||
.build();
|
||||
.bizName(() -> String.format("flow_%s_%s", TenantContextHolder.getTenantId(), DateUtil.today()))
|
||||
.dataSource(dataSource).step(properties.getStep()).retryTimes(properties.getRetryTimes())
|
||||
.tableName(properties.getTableName()).build();
|
||||
}
|
||||
|
||||
}
|
||||
-1
@@ -52,7 +52,6 @@ public interface IProcessInstanceService {
|
||||
*/
|
||||
R queryMineCC(TaskQueryParamDto taskQueryParamDto);
|
||||
|
||||
|
||||
/**
|
||||
* 格式化流程显示
|
||||
* @param nodeFormatParamVo
|
||||
|
||||
+17
-37
@@ -38,12 +38,8 @@ public class CombinationGroupServiceImpl implements ICombinationGroupService {
|
||||
*/
|
||||
@Override
|
||||
public R listGroupWithProcess(Page page, Long groupId) {
|
||||
return R.ok(processService.lambdaQuery()
|
||||
.eq(Process::getGroupId, groupId)
|
||||
.eq(Process::getHidden, false)
|
||||
.orderByAsc(Process::getSort)
|
||||
.orderByDesc(Process::getCreateTime)
|
||||
.page(page));
|
||||
return R.ok(processService.lambdaQuery().eq(Process::getGroupId, groupId).eq(Process::getHidden, false)
|
||||
.orderByAsc(Process::getSort).orderByDesc(Process::getCreateTime).page(page));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -56,24 +52,16 @@ public class CombinationGroupServiceImpl implements ICombinationGroupService {
|
||||
|
||||
List<FormGroupVo> formGroupVos = new LinkedList<>();
|
||||
|
||||
List<ProcessGroup> processGroupList = processGroupService.lambdaQuery()
|
||||
.orderByAsc(ProcessGroup::getSort)
|
||||
.list();
|
||||
List<ProcessGroup> processGroupList = processGroupService.lambdaQuery().orderByAsc(ProcessGroup::getSort)
|
||||
.list();
|
||||
|
||||
processGroupList.forEach(group -> {
|
||||
FormGroupVo formGroupVo = FormGroupVo.builder()
|
||||
.id(group.getId())
|
||||
.name(group.getGroupName())
|
||||
.items(new LinkedList<>())
|
||||
.build();
|
||||
FormGroupVo formGroupVo = FormGroupVo.builder().id(group.getId()).name(group.getGroupName())
|
||||
.items(new LinkedList<>()).build();
|
||||
formGroupVos.add(formGroupVo);
|
||||
|
||||
List<Process> processList = processService.lambdaQuery()
|
||||
.eq(Process::getGroupId, group.getId())
|
||||
.eq(Process::getHidden, false)
|
||||
.eq(Process::getStop, false)
|
||||
.orderByAsc(Process::getSort)
|
||||
.list();
|
||||
List<Process> processList = processService.lambdaQuery().eq(Process::getGroupId, group.getId())
|
||||
.eq(Process::getHidden, false).eq(Process::getStop, false).orderByAsc(Process::getSort).list();
|
||||
|
||||
Map<Long, Boolean> existMap = new HashMap<>();
|
||||
|
||||
@@ -81,10 +69,9 @@ public class CombinationGroupServiceImpl implements ICombinationGroupService {
|
||||
List<Long> idList = processList.stream().map(Process::getId).collect(Collectors.toList());
|
||||
// 查询发起人集合
|
||||
List<ProcessStarter> processStarterList = processStarterService.lambdaQuery()
|
||||
.in(ProcessStarter::getProcessId, idList)
|
||||
.list();
|
||||
.in(ProcessStarter::getProcessId, idList).list();
|
||||
Map<Long, List<ProcessStarter>> groupmap = processStarterList.stream()
|
||||
.collect(Collectors.groupingBy(ProcessStarter::getProcessId));
|
||||
.collect(Collectors.groupingBy(ProcessStarter::getProcessId));
|
||||
|
||||
for (Process process : processList) {
|
||||
List<ProcessStarter> processStarters = groupmap.get(process.getId());
|
||||
@@ -92,17 +79,15 @@ public class CombinationGroupServiceImpl implements ICombinationGroupService {
|
||||
existMap.put(process.getId(), true);
|
||||
continue;
|
||||
}
|
||||
boolean match = processStarters.stream()
|
||||
.anyMatch(w -> w.getTypeId().longValue() == user.getId()
|
||||
&& w.getType().equals(NodeUserTypeEnum.USER.getKey()));
|
||||
boolean match = processStarters.stream().anyMatch(w -> w.getTypeId().longValue() == user.getId()
|
||||
&& w.getType().equals(NodeUserTypeEnum.USER.getKey()));
|
||||
if (match) {
|
||||
existMap.put(process.getId(), true);
|
||||
continue;
|
||||
}
|
||||
Set<Long> deptIdSet = processStarters.stream()
|
||||
.filter(w -> w.getType().equals(NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(w -> w.getTypeId())
|
||||
.collect(Collectors.toSet());
|
||||
.filter(w -> w.getType().equals(NodeUserTypeEnum.DEPT.getKey())).map(w -> w.getTypeId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
existMap.put(process.getId(), deptIdSet.contains(user.getDeptId()));
|
||||
|
||||
@@ -117,14 +102,9 @@ public class CombinationGroupServiceImpl implements ICombinationGroupService {
|
||||
}
|
||||
|
||||
formGroupVo.getItems()
|
||||
.add(FormGroupVo.FlowVo.builder()
|
||||
.flowId(process.getFlowId())
|
||||
.name(process.getName())
|
||||
.logo(process.getLogo())
|
||||
.remark(process.getRemark())
|
||||
.stop(process.getStop())
|
||||
.updated(process.getUpdateTime())
|
||||
.build());
|
||||
.add(FormGroupVo.FlowVo.builder().flowId(process.getFlowId()).name(process.getName())
|
||||
.logo(process.getLogo()).remark(process.getRemark()).stop(process.getStop())
|
||||
.updated(process.getUpdateTime()).build());
|
||||
});
|
||||
});
|
||||
return R.ok(formGroupVos);
|
||||
|
||||
+14
-22
@@ -58,18 +58,14 @@ public class OrgServiceImpl implements IOrgService {
|
||||
orgs.add(orgTreeVo);
|
||||
}
|
||||
|
||||
Dict dict = Dict.create()
|
||||
.set("roleList", orgs)
|
||||
.set("childDepartments", orgs)
|
||||
.set("employees", new ArrayList<>());
|
||||
Dict dict = Dict.create().set("roleList", orgs).set("childDepartments", orgs).set("employees",
|
||||
new ArrayList<>());
|
||||
return R.ok(dict);
|
||||
|
||||
}
|
||||
|
||||
Dict dict = Dict.create()
|
||||
.set("titleDepartments", new ArrayList<>())
|
||||
.set("roleList", new ArrayList<>())
|
||||
.set("employees", new ArrayList<>());
|
||||
Dict dict = Dict.create().set("titleDepartments", new ArrayList<>()).set("roleList", new ArrayList<>())
|
||||
.set("employees", new ArrayList<>());
|
||||
|
||||
List<SysDept> deptList = remoteDeptService.getAllDept().getData();
|
||||
|
||||
@@ -120,20 +116,16 @@ public class OrgServiceImpl implements IOrgService {
|
||||
*/
|
||||
@Override
|
||||
public R getOrgTreeUser(String userName) {
|
||||
return R.ok(RetOps.of(remoteUserService.getUserListByUserName(userName))
|
||||
.getData()
|
||||
.orElseGet(ArrayList::new)
|
||||
.stream()
|
||||
.map(user -> {
|
||||
OrgTreeVo orgTreeVo = new OrgTreeVo();
|
||||
orgTreeVo.setId(user.getUserId());
|
||||
orgTreeVo.setName(user.getUsername());
|
||||
orgTreeVo.setType(NodeUserTypeEnum.USER.getKey());
|
||||
orgTreeVo.setSelected(false);
|
||||
orgTreeVo.setAvatar(user.getAvatar());
|
||||
return orgTreeVo;
|
||||
})
|
||||
.collect(Collectors.toList()));
|
||||
return R.ok(RetOps.of(remoteUserService.getUserListByUserName(userName)).getData().orElseGet(ArrayList::new)
|
||||
.stream().map(user -> {
|
||||
OrgTreeVo orgTreeVo = new OrgTreeVo();
|
||||
orgTreeVo.setId(user.getUserId());
|
||||
orgTreeVo.setName(user.getUsername());
|
||||
orgTreeVo.setType(NodeUserTypeEnum.USER.getKey());
|
||||
orgTreeVo.setSelected(false);
|
||||
orgTreeVo.setAvatar(user.getAvatar());
|
||||
return orgTreeVo;
|
||||
}).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
}
|
||||
+3
-2
@@ -68,8 +68,9 @@ public class ProcessCopyServiceImpl extends ServiceImpl<ProcessCopyMapper, Proce
|
||||
Node node = nodeDataService.getNodeData(flowId, nodeId).getData();
|
||||
Map<String, String> formPerms = node.getFormPerms();
|
||||
|
||||
List<FormItemVO> jsonObjectList = objectMapper.readValue(oaForms.getFormItems(), new TypeReference<List<FormItemVO>>() {
|
||||
});
|
||||
List<FormItemVO> jsonObjectList = objectMapper.readValue(oaForms.getFormItems(),
|
||||
new TypeReference<List<FormItemVO>>() {
|
||||
});
|
||||
for (FormItemVO formItemVO : jsonObjectList) {
|
||||
String fid = formItemVO.getId();
|
||||
String perm = formPerms.get(fid);
|
||||
|
||||
+59
-87
@@ -73,10 +73,8 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
processInstanceParamDto.setStartUserId(String.valueOf(user.getId()));
|
||||
Map<String, Object> paramMap = processInstanceParamDto.getParamMap();
|
||||
Dict rootUser = Dict.create()
|
||||
.set("id", user.getId())
|
||||
.set("name", user.getUsername())
|
||||
.set("type", NodeUserTypeEnum.USER.getKey());
|
||||
Dict rootUser = Dict.create().set("id", user.getId()).set("name", user.getUsername()).set("type",
|
||||
NodeUserTypeEnum.USER.getKey());
|
||||
paramMap.put("root", CollUtil.newArrayList(rootUser));
|
||||
return flowEngineService.startProcess(processInstanceParamDto);
|
||||
}
|
||||
@@ -96,37 +94,29 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
return r;
|
||||
}
|
||||
|
||||
Set<String> processInstanceIdSet = r.getData()
|
||||
.getRecords()
|
||||
.stream()
|
||||
.map(TaskDto::getProcessInstanceId)
|
||||
.collect(Collectors.toSet());
|
||||
Set<String> processInstanceIdSet = r.getData().getRecords().stream().map(TaskDto::getProcessInstanceId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 流程实例记录
|
||||
List<ProcessInstanceRecord> processInstanceRecordList = processInstanceRecordService.lambdaQuery()
|
||||
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet)
|
||||
.list();
|
||||
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet).list();
|
||||
|
||||
// 发起人
|
||||
List<SysUser> startUserList = processInstanceRecordList.stream()
|
||||
.map(ProcessInstanceRecord::getUserId)
|
||||
.map(userId -> userService.getUserById(userId).getData())
|
||||
.collect(Collectors.toList());
|
||||
List<SysUser> startUserList = processInstanceRecordList.stream().map(ProcessInstanceRecord::getUserId)
|
||||
.map(userId -> userService.getUserById(userId).getData()).collect(Collectors.toList());
|
||||
|
||||
Page<TaskDto> pageResultDto = r.getData();
|
||||
List<TaskDto> taskDtoList = new ArrayList<>();
|
||||
for (TaskDto record : r.getData().getRecords()) {
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId()))
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId())).findAny()
|
||||
.orElse(null);
|
||||
|
||||
if (processInstanceRecord != null) {
|
||||
record.setProcessName(processInstanceRecord.getName());
|
||||
SysUser startUser = startUserList.stream()
|
||||
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId())
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId()).findAny()
|
||||
.orElse(null);
|
||||
|
||||
record.setRootUserId(processInstanceRecord.getUserId());
|
||||
record.setGroupName(processInstanceRecord.getGroupName());
|
||||
@@ -160,37 +150,31 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
}
|
||||
|
||||
Set<String> processInstanceIdSet = records.stream()
|
||||
.map(TaskDto::getProcessInstanceId)
|
||||
.collect(Collectors.toSet());
|
||||
Set<String> processInstanceIdSet = records.stream().map(TaskDto::getProcessInstanceId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// 流程实例记录
|
||||
List<ProcessInstanceRecord> processInstanceRecordList = processInstanceRecordService.lambdaQuery()
|
||||
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet)
|
||||
.list();
|
||||
.in(ProcessInstanceRecord::getProcessInstanceId, processInstanceIdSet).list();
|
||||
|
||||
// 发起人
|
||||
List<SysUser> startUserList = processInstanceRecordList.stream()
|
||||
.map(ProcessInstanceRecord::getUserId)
|
||||
.map(userId -> userService.getUserById(userId).getData())
|
||||
.collect(Collectors.toList());
|
||||
List<SysUser> startUserList = processInstanceRecordList.stream().map(ProcessInstanceRecord::getUserId)
|
||||
.map(userId -> userService.getUserById(userId).getData()).collect(Collectors.toList());
|
||||
|
||||
List<TaskDto> taskDtoList = new ArrayList<>();
|
||||
for (TaskDto record : records) {
|
||||
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId()))
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
.filter(w -> StrUtil.equals(w.getProcessInstanceId(), record.getProcessInstanceId())).findAny()
|
||||
.orElse(null);
|
||||
|
||||
if (processInstanceRecord != null) {
|
||||
|
||||
record.setProcessName(processInstanceRecord.getName());
|
||||
|
||||
SysUser startUser = startUserList.stream()
|
||||
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId())
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
.filter(w -> w.getUserId().longValue() == processInstanceRecord.getUserId()).findAny()
|
||||
.orElse(null);
|
||||
|
||||
record.setRootUserId(processInstanceRecord.getUserId());
|
||||
record.setGroupName(processInstanceRecord.getGroupName());
|
||||
@@ -214,11 +198,10 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
*/
|
||||
@Override
|
||||
public R end(String processsInstanceId) {
|
||||
processInstanceRecordService.lambdaUpdate()
|
||||
.set(ProcessInstanceRecord::getEndTime, new Date())
|
||||
.set(ProcessInstanceRecord::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processsInstanceId)
|
||||
.update(new ProcessInstanceRecord());
|
||||
processInstanceRecordService.lambdaUpdate().set(ProcessInstanceRecord::getEndTime, new Date())
|
||||
.set(ProcessInstanceRecord::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processsInstanceId)
|
||||
.update(new ProcessInstanceRecord());
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@@ -233,13 +216,15 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
long userId = SecurityUtils.getUser().getId();
|
||||
|
||||
Page<ProcessInstanceRecord> instanceRecordPage = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getUserId, userId)
|
||||
.eq(ProcessInstanceRecord::getStatus, taskQueryParamDto.getStatus())
|
||||
.between(ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()), ProcessInstanceRecord::getCreateTime,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[0] : null,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[1] : null)
|
||||
.orderByDesc(ProcessInstanceRecord::getCreateTime)
|
||||
.page(new Page<>(taskQueryParamDto.getPageNum(), taskQueryParamDto.getPageSize()));
|
||||
.eq(ProcessInstanceRecord::getUserId, userId)
|
||||
.eq(ProcessInstanceRecord::getStatus, taskQueryParamDto.getStatus())
|
||||
.between(ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()), ProcessInstanceRecord::getCreateTime,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[0]
|
||||
: null,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[1]
|
||||
: null)
|
||||
.orderByDesc(ProcessInstanceRecord::getCreateTime)
|
||||
.page(new Page<>(taskQueryParamDto.getPageNum(), taskQueryParamDto.getPageSize()));
|
||||
|
||||
return R.ok(instanceRecordPage);
|
||||
}
|
||||
@@ -254,13 +239,12 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
long userId = SecurityUtils.getUser().getId();
|
||||
|
||||
Page<ProcessCopy> page = processCopyService.lambdaQuery()
|
||||
.eq(ProcessCopy::getUserId, userId)
|
||||
.between(ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()), ProcessCopy::getCreateTime,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[0] : null,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[1] : null)
|
||||
.orderByDesc(ProcessCopy::getNodeTime)
|
||||
.page(new Page<>(taskQueryParamDto.getPageNum(), taskQueryParamDto.getPageSize()));
|
||||
Page<ProcessCopy> page = processCopyService.lambdaQuery().eq(ProcessCopy::getUserId, userId).between(
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()), ProcessCopy::getCreateTime,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[0] : null,
|
||||
ArrayUtil.isNotEmpty(taskQueryParamDto.getTaskTime()) ? taskQueryParamDto.getTaskTime()[1] : null)
|
||||
.orderByDesc(ProcessCopy::getNodeTime)
|
||||
.page(new Page<>(taskQueryParamDto.getPageNum(), taskQueryParamDto.getPageSize()));
|
||||
|
||||
List<ProcessCopy> records = page.getRecords();
|
||||
|
||||
@@ -268,16 +252,12 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
if (CollUtil.isNotEmpty(records)) {
|
||||
// 发起人
|
||||
List<SysUser> startUserList = records.stream()
|
||||
.map(ProcessCopy::getStartUserId)
|
||||
.map(id -> userService.getUserById(id).getData())
|
||||
.collect(Collectors.toList());
|
||||
List<SysUser> startUserList = records.stream().map(ProcessCopy::getStartUserId)
|
||||
.map(id -> userService.getUserById(id).getData()).collect(Collectors.toList());
|
||||
|
||||
for (ProcessCopyVo record : processCopyVoList) {
|
||||
SysUser startUser = startUserList.stream()
|
||||
.filter(w -> w.getUserId().longValue() == record.getStartUserId())
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
.filter(w -> w.getUserId().longValue() == record.getStartUserId()).findAny().orElse(null);
|
||||
record.setStartUserName(startUser.getUsername());
|
||||
}
|
||||
}
|
||||
@@ -289,7 +269,6 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
return R.ok(p);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 格式化流程显示
|
||||
* @param nodeFormatParamVo
|
||||
@@ -306,8 +285,7 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
if (StrUtil.isBlankIfStr(flowId) && StrUtil.isNotBlank(processInstanceId)) {
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
flowId = processInstanceRecord.getFlowId();
|
||||
|
||||
}
|
||||
@@ -318,17 +296,15 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
R<Map<String, Object>> r = flowEngineService.queryTaskVariables(variableQueryParamDto);
|
||||
if (!r.isOk()) {
|
||||
ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService
|
||||
.lambdaQuery()
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, nodeFormatParamVo.getTaskId())
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.last("limit 1")
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getEndTime)
|
||||
.one();
|
||||
.lambdaQuery().eq(ProcessNodeRecordAssignUser::getTaskId, nodeFormatParamVo.getTaskId())
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()).last("limit 1")
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getEndTime).one();
|
||||
|
||||
String data = processNodeRecordAssignUser.getData();
|
||||
|
||||
Map<String, Object> variableMap = objectMapper.readValue(data, new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
Map<String, Object> variableMap = objectMapper.readValue(data,
|
||||
new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
variableMap.putAll(paramMap);
|
||||
paramMap.putAll(variableMap);
|
||||
}
|
||||
@@ -344,12 +320,10 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
|
||||
if (StrUtil.isNotBlank(processInstanceId)) {
|
||||
List<ProcessNodeRecord> processNodeRecordList = processNodeRecordService.lambdaQuery()
|
||||
.eq(ProcessNodeRecord::getProcessInstanceId, processInstanceId)
|
||||
.eq(ProcessNodeRecord::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.list();
|
||||
Set<String> collect = processNodeRecordList.stream()
|
||||
.map(ProcessNodeRecord::getNodeId)
|
||||
.collect(Collectors.toSet());
|
||||
.eq(ProcessNodeRecord::getProcessInstanceId, processInstanceId)
|
||||
.eq(ProcessNodeRecord::getStatus, NodeStatusEnum.YJS.getCode()).list();
|
||||
Set<String> collect = processNodeRecordList.stream().map(ProcessNodeRecord::getNodeId)
|
||||
.collect(Collectors.toSet());
|
||||
completeNodeSet.addAll(collect);
|
||||
}
|
||||
|
||||
@@ -373,8 +347,7 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
@Override
|
||||
public R detail(String processInstanceId) {
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
|
||||
Process oaForms = processService.getByFlowId(processInstanceRecord.getFlowId());
|
||||
if (oaForms == null) {
|
||||
@@ -391,8 +364,9 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
Node nodeDto = objectMapper.readValue(process, Node.class);
|
||||
Map<String, String> formPerms1 = nodeDto.getFormPerms();
|
||||
|
||||
List<FormItemVO> jsonObjectList = objectMapper.readValue(oaForms.getFormItems(), new TypeReference<List<FormItemVO>>() {
|
||||
});
|
||||
List<FormItemVO> jsonObjectList = objectMapper.readValue(oaForms.getFormItems(),
|
||||
new TypeReference<List<FormItemVO>>() {
|
||||
});
|
||||
for (FormItemVO formItemVO : jsonObjectList) {
|
||||
String id = formItemVO.getId();
|
||||
String perm = formPerms1.get(id);
|
||||
@@ -433,11 +407,9 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
}
|
||||
|
||||
}
|
||||
Dict set = Dict.create()
|
||||
.set("processInstanceId", processInstanceId)
|
||||
.set("process", oaForms.getProcess())
|
||||
Dict set = Dict.create().set("processInstanceId", processInstanceId).set("process", oaForms.getProcess())
|
||||
|
||||
.set("formItems", jsonObjectList);
|
||||
.set("formItems", jsonObjectList);
|
||||
|
||||
return R.ok(set);
|
||||
}
|
||||
|
||||
+3
-6
@@ -45,14 +45,11 @@ public class ProcessNodeDataServiceImpl extends ServiceImpl<ProcessNodeDataMappe
|
||||
*/
|
||||
@Override
|
||||
public R<Node> getNodeData(String flowId, String nodeId) {
|
||||
Optional<ProcessNodeData> processNodeDataOptional = this.lambdaQuery()
|
||||
.eq(ProcessNodeData::getFlowId, flowId)
|
||||
.eq(ProcessNodeData::getNodeId, nodeId)
|
||||
.oneOpt();
|
||||
Optional<ProcessNodeData> processNodeDataOptional = this.lambdaQuery().eq(ProcessNodeData::getFlowId, flowId)
|
||||
.eq(ProcessNodeData::getNodeId, nodeId).oneOpt();
|
||||
|
||||
Node node = processNodeDataOptional
|
||||
.map(processNodeData -> JSONUtil.toBean(processNodeData.getData(), Node.class))
|
||||
.orElse(null);
|
||||
.map(processNodeData -> JSONUtil.toBean(processNodeData.getData(), Node.class)).orElse(null);
|
||||
|
||||
return R.ok(node);
|
||||
}
|
||||
|
||||
+9
-13
@@ -35,10 +35,8 @@ public class ProcessNodeRecordAssignUserServiceImpl
|
||||
public R addAssignUser(ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
|
||||
if (StrUtil.isNotBlank(processNodeRecordAssignUserParamDto.getApproveDesc())) {
|
||||
ProcessNodeRecordAssignUser processNodeRecordAssignUser = this.lambdaQuery()
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, processNodeRecordAssignUserParamDto.getTaskId())
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getId)
|
||||
.last("limit 1")
|
||||
.one();
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, processNodeRecordAssignUserParamDto.getTaskId())
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getId).last("limit 1").one();
|
||||
if (processNodeRecordAssignUser != null) {
|
||||
processNodeRecordAssignUser.setApproveDesc(processNodeRecordAssignUserParamDto.getApproveDesc());
|
||||
processNodeRecordAssignUser.setTaskType(processNodeRecordAssignUserParamDto.getTaskType());
|
||||
@@ -50,7 +48,7 @@ public class ProcessNodeRecordAssignUserServiceImpl
|
||||
}
|
||||
|
||||
ProcessNodeRecordAssignUser processNodeRecordAssignUser = BeanUtil
|
||||
.copyProperties(processNodeRecordAssignUserParamDto, ProcessNodeRecordAssignUser.class);
|
||||
.copyProperties(processNodeRecordAssignUserParamDto, ProcessNodeRecordAssignUser.class);
|
||||
processNodeRecordAssignUser.setStartTime(LocalDateTime.now());
|
||||
processNodeRecordAssignUser.setStatus(NodeStatusEnum.JXZ.getCode());
|
||||
processNodeRecordAssignUser.setApproveDesc("");
|
||||
@@ -68,14 +66,12 @@ public class ProcessNodeRecordAssignUserServiceImpl
|
||||
@Override
|
||||
public R completeTaskEvent(ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto) {
|
||||
ProcessNodeRecordAssignUser processNodeRecordAssignUser = this.lambdaQuery()
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, processNodeRecordAssignUserParamDto.getTaskId())
|
||||
.eq(ProcessNodeRecordAssignUser::getUserId, processNodeRecordAssignUserParamDto.getUserId())
|
||||
.eq(ProcessNodeRecordAssignUser::getProcessInstanceId,
|
||||
processNodeRecordAssignUserParamDto.getProcessInstanceId())
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.JXZ.getCode())
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getId)
|
||||
.last("limit 1")
|
||||
.one();
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, processNodeRecordAssignUserParamDto.getTaskId())
|
||||
.eq(ProcessNodeRecordAssignUser::getUserId, processNodeRecordAssignUserParamDto.getUserId())
|
||||
.eq(ProcessNodeRecordAssignUser::getProcessInstanceId,
|
||||
processNodeRecordAssignUserParamDto.getProcessInstanceId())
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.JXZ.getCode())
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getId).last("limit 1").one();
|
||||
processNodeRecordAssignUser.setStatus(NodeStatusEnum.YJS.getCode());
|
||||
processNodeRecordAssignUser.setApproveDesc(processNodeRecordAssignUserParamDto.getApproveDesc());
|
||||
processNodeRecordAssignUser.setEndTime(LocalDateTime.now());
|
||||
|
||||
+5
-6
@@ -54,12 +54,11 @@ public class ProcessNodeRecordServiceImpl extends ServiceImpl<ProcessNodeRecordM
|
||||
log.info("节点结束---{}", processNodeRecordParamDto);
|
||||
|
||||
// TODO 完成节点和完成任务要区分下
|
||||
this.lambdaUpdate()
|
||||
.set(ProcessNodeRecord::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.set(ProcessNodeRecord::getEndTime, new Date())
|
||||
.eq(ProcessNodeRecord::getProcessInstanceId, processNodeRecordParamDto.getProcessInstanceId())
|
||||
.eq(ProcessNodeRecord::getNodeId, processNodeRecordParamDto.getNodeId())
|
||||
.update(new ProcessNodeRecord());
|
||||
this.lambdaUpdate().set(ProcessNodeRecord::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.set(ProcessNodeRecord::getEndTime, new Date())
|
||||
.eq(ProcessNodeRecord::getProcessInstanceId, processNodeRecordParamDto.getProcessInstanceId())
|
||||
.eq(ProcessNodeRecord::getNodeId, processNodeRecordParamDto.getNodeId())
|
||||
.update(new ProcessNodeRecord());
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
+2
-4
@@ -175,10 +175,8 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
|
||||
Process oldProcess = this.getByFlowId(process.getFlowId());
|
||||
this.hide(process.getFlowId());
|
||||
// 修改所有的管理员
|
||||
this.lambdaUpdate()
|
||||
.set(Process::getAdminId, nodeUser.getId())
|
||||
.eq(Process::getUniqueId, oldProcess.getUniqueId())
|
||||
.update(new Process());
|
||||
this.lambdaUpdate().set(Process::getAdminId, nodeUser.getId())
|
||||
.eq(Process::getUniqueId, oldProcess.getUniqueId()).update(new Process());
|
||||
|
||||
}
|
||||
|
||||
|
||||
+4
-9
@@ -73,15 +73,13 @@ public class RemoteServiceImpl implements IRemoteService {
|
||||
ThreadUtil.execute(() -> {
|
||||
try {
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
|
||||
int index = 10;
|
||||
while (index > 0 && processInstanceRecord == null) {
|
||||
TimeUnit.SECONDS.sleep(5);
|
||||
processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
index--;
|
||||
}
|
||||
|
||||
@@ -130,11 +128,8 @@ public class RemoteServiceImpl implements IRemoteService {
|
||||
*/
|
||||
@Override
|
||||
public R<List<Long>> queryUserIdListByDepIdList(List<Long> depIdList) {
|
||||
List<Long> list = userService.getUserIdListByDeptIdList(depIdList)
|
||||
.getData()
|
||||
.stream()
|
||||
.map(SysUser::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> list = userService.getUserIdListByDeptIdList(depIdList).getData().stream().map(SysUser::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
|
||||
+16
-21
@@ -61,12 +61,11 @@ public class TaskServiceImpl implements ITaskService {
|
||||
@Override
|
||||
public R queryTaskData() {
|
||||
R<IndexPageStatistics> indexPageStatisticsR = flowEngineService
|
||||
.querySimpleData(SecurityUtils.getUser().getId());
|
||||
.querySimpleData(SecurityUtils.getUser().getId());
|
||||
|
||||
// 获取抄送任务
|
||||
Long copyCount = processCopyService.lambdaQuery()
|
||||
.eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId())
|
||||
.count();
|
||||
Long copyCount = processCopyService.lambdaQuery().eq(ProcessCopy::getUserId, SecurityUtils.getUser().getId())
|
||||
.count();
|
||||
indexPageStatisticsR.getData().setCopyNum(copyCount);
|
||||
return indexPageStatisticsR;
|
||||
}
|
||||
@@ -97,18 +96,17 @@ public class TaskServiceImpl implements ITaskService {
|
||||
Boolean currentTask = taskResultDto.getCurrentTask();
|
||||
if (!currentTask) {
|
||||
ProcessNodeRecordAssignUser processNodeRecordAssignUser = processNodeRecordAssignUserService.lambdaQuery()
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, taskId)
|
||||
.eq(ProcessNodeRecordAssignUser::getUserId, userId)
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode())
|
||||
.last("limit 1")
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getEndTime)
|
||||
.one();
|
||||
.eq(ProcessNodeRecordAssignUser::getTaskId, taskId)
|
||||
.eq(ProcessNodeRecordAssignUser::getUserId, userId)
|
||||
.eq(ProcessNodeRecordAssignUser::getStatus, NodeStatusEnum.YJS.getCode()).last("limit 1")
|
||||
.orderByDesc(ProcessNodeRecordAssignUser::getEndTime).one();
|
||||
|
||||
if (processNodeRecordAssignUser != null) {
|
||||
String data = processNodeRecordAssignUser.getData();
|
||||
if (StrUtil.isNotBlank(data)) {
|
||||
Map<String, Object> collect = objectMapper.readValue(data, new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
Map<String, Object> collect = objectMapper.readValue(data,
|
||||
new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
paramMap.putAll(collect);
|
||||
|
||||
}
|
||||
@@ -197,14 +195,12 @@ public class TaskServiceImpl implements ITaskService {
|
||||
}
|
||||
|
||||
}
|
||||
Dict set = Dict.create()
|
||||
.set("processInstanceId", taskResultDto.getProcessInstanceId())
|
||||
.set("node", taskResultDto.getTaskNode())
|
||||
.set("process", oaForms.getProcess())
|
||||
.set("delegateAgain", taskResultDto.getDelegate())
|
||||
.set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING"))
|
||||
Dict set = Dict.create().set("processInstanceId", taskResultDto.getProcessInstanceId())
|
||||
.set("node", taskResultDto.getTaskNode()).set("process", oaForms.getProcess())
|
||||
.set("delegateAgain", taskResultDto.getDelegate())
|
||||
.set("delegationTask", StrUtil.equals(taskResultDto.getDelegationState(), "PENDING"))
|
||||
|
||||
.set("formItems", formItemVOList);
|
||||
.set("formItems", formItemVOList);
|
||||
|
||||
return R.ok(set);
|
||||
}
|
||||
@@ -321,8 +317,7 @@ public class TaskServiceImpl implements ITaskService {
|
||||
|
||||
private List<String> getAllStopProcessInstanceIdList(String processInstanceId) {
|
||||
List<ProcessInstanceRecord> list = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId)
|
||||
.list();
|
||||
.eq(ProcessInstanceRecord::getParentProcessInstanceId, processInstanceId).list();
|
||||
|
||||
List<String> collect = list.stream().map(w -> w.getProcessInstanceId()).collect(Collectors.toList());
|
||||
|
||||
|
||||
+4
-6
@@ -40,9 +40,8 @@ public class DataUtil {
|
||||
List<SysDept> list = new ArrayList<>();
|
||||
list.add(allDeptList.stream().filter(w -> w.getDeptId() == deptId).findFirst().get());
|
||||
|
||||
List<SysDept> collect = allDeptList.stream()
|
||||
.filter(w -> w.getParentId() == deptId)
|
||||
.collect(Collectors.toList());
|
||||
List<SysDept> collect = allDeptList.stream().filter(w -> w.getParentId() == deptId)
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(collect)) {
|
||||
return list;
|
||||
}
|
||||
@@ -64,9 +63,8 @@ public class DataUtil {
|
||||
List<SysMenu> list = new ArrayList<>();
|
||||
list.add(allMenuList.stream().filter(w -> w.getMenuId() == menuId).findFirst().get());
|
||||
|
||||
List<SysMenu> collect = allMenuList.stream()
|
||||
.filter(w -> w.getParentId() == menuId)
|
||||
.collect(Collectors.toList());
|
||||
List<SysMenu> collect = allMenuList.stream().filter(w -> w.getParentId() == menuId)
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isEmpty(collect)) {
|
||||
return list;
|
||||
}
|
||||
|
||||
+20
-23
@@ -88,15 +88,13 @@ public class NodeFormatUtil {
|
||||
// 用户列表
|
||||
if (StrUtil.isNotBlank(processInstanceId)) {
|
||||
IProcessNodeRecordAssignUserService processNodeRecordAssignUserService = SpringUtil
|
||||
.getBean(IProcessNodeRecordAssignUserService.class);
|
||||
.getBean(IProcessNodeRecordAssignUserService.class);
|
||||
List<ProcessNodeRecordAssignUser> processNodeRecordAssignUserList = processNodeRecordAssignUserService
|
||||
.lambdaQuery()
|
||||
.eq(ProcessNodeRecordAssignUser::getNodeId, node.getId())
|
||||
.eq(ProcessNodeRecordAssignUser::getProcessInstanceId, processInstanceId)
|
||||
.orderByAsc(ProcessNodeRecordAssignUser::getCreateTime)
|
||||
.list();
|
||||
.lambdaQuery().eq(ProcessNodeRecordAssignUser::getNodeId, node.getId())
|
||||
.eq(ProcessNodeRecordAssignUser::getProcessInstanceId, processInstanceId)
|
||||
.orderByAsc(ProcessNodeRecordAssignUser::getCreateTime).list();
|
||||
Map<String, List<ProcessNodeRecordAssignUser>> map = processNodeRecordAssignUserList.stream()
|
||||
.collect(Collectors.groupingBy(ProcessNodeRecordAssignUser::getTaskId));
|
||||
.collect(Collectors.groupingBy(ProcessNodeRecordAssignUser::getTaskId));
|
||||
|
||||
for (Map.Entry<String, List<ProcessNodeRecordAssignUser>> entry : map.entrySet()) {
|
||||
List<ProcessNodeRecordAssignUser> value = entry.getValue();
|
||||
@@ -125,7 +123,8 @@ public class NodeFormatUtil {
|
||||
new TypeReference<List<NodeUser>>() {
|
||||
});
|
||||
|
||||
List<Long> collect = nodeUserDtos.stream().map(w -> Long.valueOf(w.getId())).collect(Collectors.toList());
|
||||
List<Long> collect = nodeUserDtos.stream().map(w -> Long.valueOf(w.getId()))
|
||||
.collect(Collectors.toList());
|
||||
for (Long aLong : collect) {
|
||||
UserVo userVo = buildUser(aLong);
|
||||
userVoList.addAll(CollUtil.newArrayList(userVo));
|
||||
@@ -151,9 +150,11 @@ public class NodeFormatUtil {
|
||||
ObjectMapper objectMapper = SpringUtil.getBean(ObjectMapper.class);
|
||||
String jsonString = objectMapper.writeValueAsString(o);
|
||||
if (StrUtil.isNotBlank(jsonString)) {
|
||||
List<NodeUser> nodeUserDtoList = objectMapper.readValue(jsonString, new TypeReference<List<NodeUser>>() {
|
||||
});
|
||||
List<Long> userIdList = nodeUserDtoList.stream().map(NodeUser::getId).collect(Collectors.toList());
|
||||
List<NodeUser> nodeUserDtoList = objectMapper.readValue(jsonString,
|
||||
new TypeReference<List<NodeUser>>() {
|
||||
});
|
||||
List<Long> userIdList = nodeUserDtoList.stream().map(NodeUser::getId)
|
||||
.collect(Collectors.toList());
|
||||
for (Long aLong : userIdList) {
|
||||
userVoList.addAll(CollUtil.newArrayList(buildUser(aLong)));
|
||||
}
|
||||
@@ -176,10 +177,9 @@ public class NodeFormatUtil {
|
||||
else {
|
||||
|
||||
IProcessInstanceRecordService processInstanceRecordService = SpringUtil
|
||||
.getBean(IProcessInstanceRecordService.class);
|
||||
.getBean(IProcessInstanceRecordService.class);
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
|
||||
UserVo userVo = buildRootUser(processInstanceId);
|
||||
userVo.setShowTime(processInstanceRecord.getCreateTime());
|
||||
@@ -237,10 +237,9 @@ public class NodeFormatUtil {
|
||||
private static UserVo buildRootUser(String processInstanceId) {
|
||||
|
||||
IProcessInstanceRecordService processInstanceRecordService = SpringUtil
|
||||
.getBean(IProcessInstanceRecordService.class);
|
||||
.getBean(IProcessInstanceRecordService.class);
|
||||
ProcessInstanceRecord processInstanceRecord = processInstanceRecordService.lambdaQuery()
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId)
|
||||
.one();
|
||||
.eq(ProcessInstanceRecord::getProcessInstanceId, processInstanceId).one();
|
||||
Long userId = processInstanceRecord.getUserId();
|
||||
UserVo userVo = buildUser(userId);
|
||||
return userVo;
|
||||
@@ -265,14 +264,12 @@ public class NodeFormatUtil {
|
||||
List<UserVo> userVoList = new ArrayList<>();
|
||||
// 用户id
|
||||
List<Long> userIdList = nodeUserList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(w -> Convert.toLong(w.getId()))
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.USER.getKey()))
|
||||
.map(w -> Convert.toLong(w.getId())).collect(Collectors.toList());
|
||||
// 部门id
|
||||
List<Long> deptIdList = nodeUserList.stream()
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(w -> Convert.toLong(w.getId()))
|
||||
.collect(Collectors.toList());
|
||||
.filter(w -> StrUtil.equals(w.getType(), NodeUserTypeEnum.DEPT.getKey()))
|
||||
.map(w -> Convert.toLong(w.getId())).collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(deptIdList)) {
|
||||
|
||||
|
||||
+3
-6
@@ -60,17 +60,14 @@ class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> {
|
||||
*/
|
||||
@Override
|
||||
public void onEvent(InstancesChangeEvent event) {
|
||||
Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrlSet = discoveryClient.getServices()
|
||||
.stream()
|
||||
Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrlSet = discoveryClient.getServices().stream()
|
||||
.flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream())
|
||||
.filter(instance -> StringUtils.isNotBlank(instance.getMetadata().get("spring-doc")))
|
||||
.map(instance -> {
|
||||
.filter(instance -> StringUtils.isNotBlank(instance.getMetadata().get("spring-doc"))).map(instance -> {
|
||||
AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl();
|
||||
swaggerUrl.setName(instance.getServiceId());
|
||||
swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getMetadata().get("spring-doc")));
|
||||
return swaggerUrl;
|
||||
})
|
||||
.collect(Collectors.toSet());
|
||||
}).collect(Collectors.toSet());
|
||||
|
||||
swaggerUiConfigProperties.setUrls(swaggerUrlSet);
|
||||
}
|
||||
|
||||
-1
@@ -3,7 +3,6 @@ package com.pig4cloud.pigx.admin.api.feign;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.core.util.RetOps;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
+1
-1
@@ -111,7 +111,7 @@ public class SysAuditLogController {
|
||||
@PreAuthorize("@pms.hasPermission('sys_audit_export')")
|
||||
public List<SysAuditLog> export(SysAuditLog sysAuditLog, Long[] ids) {
|
||||
return sysAuditLogService
|
||||
.list(Wrappers.lambdaQuery(sysAuditLog).in(ArrayUtil.isNotEmpty(ids), SysAuditLog::getId, ids));
|
||||
.list(Wrappers.lambdaQuery(sysAuditLog).in(ArrayUtil.isNotEmpty(ids), SysAuditLog::getId, ids));
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -28,13 +28,13 @@ import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel;
|
||||
import com.pig4cloud.pigx.common.log.annotation.SysLog;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import javax.validation.Valid;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
+4
-4
@@ -32,7 +32,6 @@ import com.pig4cloud.pigx.common.security.annotation.Inner;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
@@ -42,6 +41,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -69,9 +69,9 @@ public class SysFileController {
|
||||
@GetMapping("/page")
|
||||
public R getSysFilePage(@ParameterObject Page page, @ParameterObject SysFile sysFile) {
|
||||
LambdaQueryWrapper<SysFile> wrapper = Wrappers.<SysFile>lambdaQuery()
|
||||
.eq(StrUtil.isNotBlank(sysFile.getType()), SysFile::getType, sysFile.getType())
|
||||
.eq(Objects.nonNull(sysFile.getGroupId()), SysFile::getGroupId, sysFile.getGroupId())
|
||||
.like(StrUtil.isNotBlank(sysFile.getOriginal()), SysFile::getOriginal, sysFile.getOriginal());
|
||||
.eq(StrUtil.isNotBlank(sysFile.getType()), SysFile::getType, sysFile.getType())
|
||||
.eq(Objects.nonNull(sysFile.getGroupId()), SysFile::getGroupId, sysFile.getGroupId())
|
||||
.like(StrUtil.isNotBlank(sysFile.getOriginal()), SysFile::getOriginal, sysFile.getOriginal());
|
||||
return R.ok(sysFileService.page(page, wrapper));
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -142,7 +142,7 @@ public class SysI18nController {
|
||||
@PreAuthorize("@pms.hasPermission('sys_i18n_export')")
|
||||
public List<SysI18nEntity> export(SysI18nEntity sysI18n, Long[] ids) {
|
||||
return sysI18nService
|
||||
.list(Wrappers.lambdaQuery(sysI18n).in(ArrayUtil.isNotEmpty(ids), SysI18nEntity::getId, ids));
|
||||
.list(Wrappers.lambdaQuery(sysI18n).in(ArrayUtil.isNotEmpty(ids), SysI18nEntity::getId, ids));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ public class SysPostController {
|
||||
@PreAuthorize("@pms.hasPermission('sys_post_view')")
|
||||
public R getSysPostPage(@ParameterObject Page page, @ParameterObject SysPost sysPost) {
|
||||
return R.ok(sysPostService.page(page, Wrappers.<SysPost>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName())));
|
||||
.like(StrUtil.isNotBlank(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+7
-7
@@ -88,12 +88,12 @@ public class SysPublicParamController {
|
||||
@GetMapping("/page")
|
||||
public R getSysPublicParamPage(@ParameterObject Page page, @ParameterObject SysPublicParam sysPublicParam) {
|
||||
LambdaUpdateWrapper<SysPublicParam> wrapper = Wrappers.<SysPublicParam>lambdaUpdate()
|
||||
.like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
|
||||
sysPublicParam.getPublicName())
|
||||
.like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
|
||||
sysPublicParam.getPublicKey())
|
||||
.eq(StrUtil.isNotBlank(sysPublicParam.getSystemFlag()), SysPublicParam::getSystemFlag,
|
||||
sysPublicParam.getSystemFlag());
|
||||
.like(StrUtil.isNotBlank(sysPublicParam.getPublicName()), SysPublicParam::getPublicName,
|
||||
sysPublicParam.getPublicName())
|
||||
.like(StrUtil.isNotBlank(sysPublicParam.getPublicKey()), SysPublicParam::getPublicKey,
|
||||
sysPublicParam.getPublicKey())
|
||||
.eq(StrUtil.isNotBlank(sysPublicParam.getSystemFlag()), SysPublicParam::getSystemFlag,
|
||||
sysPublicParam.getSystemFlag());
|
||||
|
||||
return R.ok(sysPublicParamService.page(page, wrapper));
|
||||
}
|
||||
@@ -162,7 +162,7 @@ public class SysPublicParamController {
|
||||
@PreAuthorize("@pms.hasPermission('sys_syspublicparam_edit')")
|
||||
public List<SysPublicParam> export(SysPublicParam param, Long[] ids) {
|
||||
return sysPublicParamService
|
||||
.list(Wrappers.lambdaQuery(param).in(ArrayUtil.isNotEmpty(ids), SysPublicParam::getPublicId, ids));
|
||||
.list(Wrappers.lambdaQuery(param).in(ArrayUtil.isNotEmpty(ids), SysPublicParam::getPublicId, ids));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+2
-2
@@ -34,7 +34,6 @@ import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel;
|
||||
import com.pig4cloud.pigx.common.log.annotation.SysLog;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import javax.validation.Valid;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
@@ -43,6 +42,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -135,7 +135,7 @@ public class SysRoleController {
|
||||
@GetMapping("/page")
|
||||
public R getRolePage(Page page, SysRole role) {
|
||||
return R.ok(sysRoleService.page(page, Wrappers.<SysRole>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(role.getRoleName()), SysRole::getRoleName, role.getRoleName())));
|
||||
.like(StrUtil.isNotBlank(role.getRoleName()), SysRole::getRoleName, role.getRoleName())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+4
-4
@@ -29,7 +29,6 @@ import com.pig4cloud.pigx.common.log.annotation.SysLog;
|
||||
import com.pig4cloud.pigx.common.security.annotation.Inner;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import javax.validation.Valid;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -37,6 +36,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -73,7 +73,7 @@ public class SysSocialDetailsController {
|
||||
@GetMapping("/{type}")
|
||||
public R getByType(@PathVariable("type") String type) {
|
||||
return R.ok(sysSocialDetailsService
|
||||
.list(Wrappers.<SysSocialDetails>lambdaQuery().eq(SysSocialDetails::getType, type)));
|
||||
.list(Wrappers.<SysSocialDetails>lambdaQuery().eq(SysSocialDetails::getType, type)));
|
||||
}
|
||||
|
||||
@GetMapping("/getById/{id}")
|
||||
@@ -145,8 +145,8 @@ public class SysSocialDetailsController {
|
||||
*/
|
||||
@GetMapping("/export")
|
||||
public List<SysSocialDetails> export(SysSocialDetails sysSocialDetails, Long[] ids) {
|
||||
return sysSocialDetailsService
|
||||
.list(Wrappers.lambdaQuery(sysSocialDetails).in(ArrayUtil.isNotEmpty(ids), SysSocialDetails::getId, ids));
|
||||
return sysSocialDetailsService.list(
|
||||
Wrappers.lambdaQuery(sysSocialDetails).in(ArrayUtil.isNotEmpty(ids), SysSocialDetails::getId, ids));
|
||||
}
|
||||
|
||||
}
|
||||
+5
-7
@@ -73,7 +73,7 @@ public class SysTenantController {
|
||||
@GetMapping("/page")
|
||||
public R getSysTenantPage(@ParameterObject Page page, @ParameterObject SysTenant sysTenant) {
|
||||
return R.ok(sysTenantService.page(page, Wrappers.<SysTenant>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(sysTenant.getName()), SysTenant::getName, sysTenant.getName())));
|
||||
.like(StrUtil.isNotBlank(sysTenant.getName()), SysTenant::getName, sysTenant.getName())));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -143,11 +143,9 @@ public class SysTenantController {
|
||||
@Inner(value = false)
|
||||
@GetMapping("/list")
|
||||
public R list() {
|
||||
List<SysTenant> tenants = sysTenantService.getNormalTenant()
|
||||
.stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now()))
|
||||
.collect(Collectors.toList());
|
||||
List<SysTenant> tenants = sysTenantService.getNormalTenant().stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now())).collect(Collectors.toList());
|
||||
return R.ok(tenants);
|
||||
}
|
||||
|
||||
@@ -160,7 +158,7 @@ public class SysTenantController {
|
||||
@PreAuthorize("@pms.hasPermission('sys_systenant_export')")
|
||||
public List<SysTenant> export(SysTenant sysTenant, Long[] ids) {
|
||||
return sysTenantService
|
||||
.list(Wrappers.lambdaQuery(sysTenant).in(ArrayUtil.isNotEmpty(ids), SysTenant::getId, ids));
|
||||
.list(Wrappers.lambdaQuery(sysTenant).in(ArrayUtil.isNotEmpty(ids), SysTenant::getId, ids));
|
||||
}
|
||||
|
||||
@GetMapping(value = "/tree/menu")
|
||||
|
||||
+1
-1
@@ -38,7 +38,6 @@ import com.pig4cloud.pigx.common.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import javax.validation.Valid;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
@@ -46,6 +45,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
||||
-2
@@ -23,8 +23,6 @@ import com.pig4cloud.pigx.admin.api.entity.SysDept;
|
||||
import com.pig4cloud.pigx.common.data.datascope.PigxBaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 部门管理 Mapper 接口
|
||||
|
||||
-1
@@ -26,7 +26,6 @@ import com.pig4cloud.pigx.common.core.util.R;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
||||
+27
-37
@@ -93,35 +93,29 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
|
||||
@Override
|
||||
public List<Tree<Long>> selectTree(String deptName, Long parentId) {
|
||||
// 查询全部部门
|
||||
List<SysDept> deptAllList = deptMapper
|
||||
.selectList(Wrappers.<SysDept>lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName));
|
||||
List<SysDept> deptAllList = deptMapper.selectList(
|
||||
Wrappers.<SysDept>lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName));
|
||||
// 查询数据权限内部门
|
||||
List<Long> deptOwnIdList = deptMapper
|
||||
.selectListByScope(
|
||||
Wrappers.<SysDept>lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName),
|
||||
DataScope.of())
|
||||
.stream()
|
||||
.map(SysDept::getDeptId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> deptOwnIdList = deptMapper.selectListByScope(
|
||||
Wrappers.<SysDept>lambdaQuery().like(StrUtil.isNotBlank(deptName), SysDept::getName, deptName),
|
||||
DataScope.of()).stream().map(SysDept::getDeptId).collect(Collectors.toList());
|
||||
|
||||
// 权限内部门
|
||||
List<TreeNode<Long>> collect = deptAllList.stream()
|
||||
.filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
|
||||
.sorted(Comparator.comparingInt(SysDept::getSortOrder))
|
||||
.map(dept -> {
|
||||
TreeNode<Long> treeNode = new TreeNode<>();
|
||||
treeNode.setId(dept.getDeptId());
|
||||
treeNode.setParentId(dept.getParentId());
|
||||
treeNode.setName(dept.getName());
|
||||
treeNode.setWeight(dept.getSortOrder());
|
||||
// 有权限不返回标识
|
||||
Map<String, Object> extra = new HashMap<>(8);
|
||||
extra.put("isLock", !deptOwnIdList.contains(dept.getDeptId()));
|
||||
extra.put("createTime", dept.getCreateTime());
|
||||
treeNode.setExtra(extra);
|
||||
return treeNode;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
.filter(dept -> dept.getDeptId().intValue() != dept.getParentId())
|
||||
.sorted(Comparator.comparingInt(SysDept::getSortOrder)).map(dept -> {
|
||||
TreeNode<Long> treeNode = new TreeNode<>();
|
||||
treeNode.setId(dept.getDeptId());
|
||||
treeNode.setParentId(dept.getParentId());
|
||||
treeNode.setName(dept.getName());
|
||||
treeNode.setWeight(dept.getSortOrder());
|
||||
// 有权限不返回标识
|
||||
Map<String, Object> extra = new HashMap<>(8);
|
||||
extra.put("isLock", !deptOwnIdList.contains(dept.getDeptId()));
|
||||
extra.put("createTime", dept.getCreateTime());
|
||||
treeNode.setExtra(extra);
|
||||
return treeNode;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// 模糊查询 不组装树结构 直接返回 表格方便编辑
|
||||
if (StrUtil.isNotBlank(deptName)) {
|
||||
@@ -146,11 +140,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
|
||||
List<DeptExcelVo> deptExcelVos = list.stream().map(item -> {
|
||||
DeptExcelVo deptExcelVo = new DeptExcelVo();
|
||||
deptExcelVo.setName(item.getName());
|
||||
Optional<String> first = this.list()
|
||||
.stream()
|
||||
.filter(it -> item.getParentId().equals(it.getDeptId()))
|
||||
.map(SysDept::getName)
|
||||
.findFirst();
|
||||
Optional<String> first = this.list().stream().filter(it -> item.getParentId().equals(it.getDeptId()))
|
||||
.map(SysDept::getName).findFirst();
|
||||
deptExcelVo.setParentName(first.orElse("根部门"));
|
||||
deptExcelVo.setSortOrder(item.getSortOrder());
|
||||
return deptExcelVo;
|
||||
@@ -210,7 +201,8 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
|
||||
recursiveDept(allDeptList, deptId, resDeptList);
|
||||
|
||||
// 添加当前节点
|
||||
resDeptList.addAll(allDeptList.stream().filter(sysDept -> deptId.equals(sysDept.getDeptId())).collect(Collectors.toList()));
|
||||
resDeptList.addAll(allDeptList.stream().filter(sysDept -> deptId.equals(sysDept.getDeptId()))
|
||||
.collect(Collectors.toList()));
|
||||
return resDeptList;
|
||||
}
|
||||
|
||||
@@ -224,23 +216,21 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
|
||||
@Override
|
||||
public List<Long> listDeptLeader(Long deptId) {
|
||||
List<SysUser> sysUserList = userMapper
|
||||
.selectList(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getDeptId, deptId));
|
||||
.selectList(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getDeptId, deptId));
|
||||
if (CollUtil.isEmpty(sysUserList)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
SysPost deptLeader = postMapper
|
||||
.selectOne(Wrappers.<SysPost>lambdaQuery().eq(SysPost::getPostCode, "DEPT_LEADER"));
|
||||
.selectOne(Wrappers.<SysPost>lambdaQuery().eq(SysPost::getPostCode, "DEPT_LEADER"));
|
||||
if (deptLeader == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<Long> userIdList = sysUserList.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
||||
return userPostMapper.selectList(Wrappers.<SysUserPost>lambdaQuery().in(SysUserPost::getUserId, userIdList))
|
||||
.stream()
|
||||
.filter(post -> Objects.equals(post.getPostId(), deptLeader.getPostId()))
|
||||
.map(SysUserPost::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
.stream().filter(post -> Objects.equals(post.getPostId(), deptLeader.getPostId()))
|
||||
.map(SysUserPost::getUserId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+9
-11
@@ -37,7 +37,6 @@ import com.pig4cloud.pigx.common.core.constant.CommonConstants;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.file.core.FileProperties;
|
||||
import com.pig4cloud.pigx.common.file.core.FileTemplate;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -45,6 +44,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
@@ -136,16 +136,14 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
|
||||
@Override
|
||||
public List<Tree<Long>> listFileGroup(SysFileGroup fileGroup) {
|
||||
// 从数据库查询文件组列表
|
||||
List<TreeNode<Long>> treeNodeList = fileGroupMapper.selectList(Wrappers.query(fileGroup))
|
||||
.stream()
|
||||
.map(group -> {
|
||||
TreeNode<Long> treeNode = new TreeNode<>();
|
||||
treeNode.setName(group.getName());
|
||||
treeNode.setId(group.getId());
|
||||
treeNode.setParentId(group.getPid());
|
||||
return treeNode;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
List<TreeNode<Long>> treeNodeList = fileGroupMapper.selectList(Wrappers.query(fileGroup)).stream()
|
||||
.map(group -> {
|
||||
TreeNode<Long> treeNode = new TreeNode<>();
|
||||
treeNode.setName(group.getName());
|
||||
treeNode.setId(group.getId());
|
||||
treeNode.setParentId(group.getPid());
|
||||
return treeNode;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// 构建树形结构
|
||||
List<Tree<Long>> treeList = TreeUtil.build(treeNodeList, CommonConstants.MENU_TREE_ROOT_ID);
|
||||
|
||||
+5
-8
@@ -40,7 +40,6 @@ import com.pig4cloud.pigx.common.core.constant.enums.MenuTypeEnum;
|
||||
import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
|
||||
import com.pig4cloud.pigx.common.core.util.MsgUtils;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -49,6 +48,7 @@ import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
@@ -109,13 +109,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||
Long parent = parentId == null ? CommonConstants.MENU_TREE_ROOT_ID : parentId;
|
||||
|
||||
List<TreeNode<Long>> collect = baseMapper
|
||||
.selectList(Wrappers.<SysMenu>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(menuName), SysMenu::getName, menuName)
|
||||
.eq(StrUtil.isNotBlank(type), SysMenu::getMenuType, type)
|
||||
.orderByAsc(SysMenu::getSortOrder))
|
||||
.stream()
|
||||
.map(getNodeFunction())
|
||||
.collect(Collectors.toList());
|
||||
.selectList(Wrappers.<SysMenu>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(menuName), SysMenu::getName, menuName)
|
||||
.eq(StrUtil.isNotBlank(type), SysMenu::getMenuType, type).orderByAsc(SysMenu::getSortOrder))
|
||||
.stream().map(getNodeFunction()).collect(Collectors.toList());
|
||||
|
||||
// 模糊查询 不组装树结构 直接返回 表格方便编辑
|
||||
if (StrUtil.isNotBlank(menuName)) {
|
||||
|
||||
+3
-4
@@ -64,9 +64,8 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> impl
|
||||
for (PostExcelVO excel : excelVOList) {
|
||||
Set<String> errorMsg = new HashSet<>();
|
||||
// 检验岗位名称或者岗位编码是否存在
|
||||
boolean existPost = postList.stream()
|
||||
.anyMatch(post -> excel.getPostName().equals(post.getPostName())
|
||||
|| excel.getPostCode().equals(post.getPostCode()));
|
||||
boolean existPost = postList.stream().anyMatch(post -> excel.getPostName().equals(post.getPostName())
|
||||
|| excel.getPostCode().equals(post.getPostCode()));
|
||||
|
||||
if (existPost) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_NAMEORCODE_EXISTING, excel.getPostName(),
|
||||
@@ -95,7 +94,7 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> impl
|
||||
@Override
|
||||
public List<PostExcelVO> listPost(SysPost query, Long[] ids) {
|
||||
List<SysPost> postList = this
|
||||
.list(Wrappers.lambdaQuery(query).in(ArrayUtil.isNotEmpty(ids), SysPost::getPostId, ids));
|
||||
.list(Wrappers.lambdaQuery(query).in(ArrayUtil.isNotEmpty(ids), SysPost::getPostId, ids));
|
||||
// 转换成execl 对象输出
|
||||
return postList.stream().map(post -> {
|
||||
PostExcelVO postExcelVO = new PostExcelVO();
|
||||
|
||||
+5
-7
@@ -53,7 +53,7 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
|
||||
@Cacheable(value = CacheConstants.PARAMS_DETAILS, key = "#publicKey", unless = "#result == null ")
|
||||
public String getSysPublicParamKeyToValue(String publicKey) {
|
||||
SysPublicParam sysPublicParam = this.baseMapper
|
||||
.selectOne(Wrappers.<SysPublicParam>lambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
|
||||
.selectOne(Wrappers.<SysPublicParam>lambdaQuery().eq(SysPublicParam::getPublicKey, publicKey));
|
||||
|
||||
if (sysPublicParam != null) {
|
||||
return sysPublicParam.getPublicValue();
|
||||
@@ -69,7 +69,7 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
|
||||
@Override
|
||||
public Map<String, Object> getSysPublicParamsKeyToValue(String[] keys) {
|
||||
List<SysPublicParam> paramList = this.baseMapper
|
||||
.selectList(Wrappers.<SysPublicParam>lambdaQuery().in(SysPublicParam::getPublicKey, keys));
|
||||
.selectList(Wrappers.<SysPublicParam>lambdaQuery().in(SysPublicParam::getPublicKey, keys));
|
||||
Map<String, Object> result = new HashMap<>(8);
|
||||
paramList.forEach(param -> result.put(param.getPublicKey(), param.getPublicValue()));
|
||||
return result;
|
||||
@@ -99,11 +99,9 @@ public class SysPublicParamServiceImpl extends ServiceImpl<SysPublicParamMapper,
|
||||
@Override
|
||||
@CacheEvict(value = CacheConstants.PARAMS_DETAILS, allEntries = true)
|
||||
public R removeParamByIds(Long[] publicIds) {
|
||||
List<Long> idList = this.baseMapper.selectBatchIds(CollUtil.toList(publicIds))
|
||||
.stream()
|
||||
.filter(p -> !p.getSystemFlag().equals(DictTypeEnum.SYSTEM.getType()))// 系统内置的跳过不能删除
|
||||
.map(SysPublicParam::getPublicId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> idList = this.baseMapper.selectBatchIds(CollUtil.toList(publicIds)).stream()
|
||||
.filter(p -> !p.getSystemFlag().equals(DictTypeEnum.SYSTEM.getType()))// 系统内置的跳过不能删除
|
||||
.map(SysPublicParam::getPublicId).collect(Collectors.toList());
|
||||
return R.ok(this.removeBatchByIds(idList));
|
||||
}
|
||||
|
||||
|
||||
+4
-5
@@ -92,7 +92,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean removeRoleByIds(Long[] ids) {
|
||||
roleMenuService
|
||||
.remove(Wrappers.<SysRoleMenu>update().lambda().in(SysRoleMenu::getRoleId, CollUtil.toList(ids)));
|
||||
.remove(Wrappers.<SysRoleMenu>update().lambda().in(SysRoleMenu::getRoleId, CollUtil.toList(ids)));
|
||||
return this.removeBatchByIds(CollUtil.toList(ids));
|
||||
}
|
||||
|
||||
@@ -124,9 +124,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||
for (RoleExcelVO excel : excelVOList) {
|
||||
Set<String> errorMsg = new HashSet<>();
|
||||
// 检验角色名称或者角色编码是否存在
|
||||
boolean existRole = roleList.stream()
|
||||
.anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
|
||||
|| excel.getRoleCode().equals(sysRole.getRoleCode()));
|
||||
boolean existRole = roleList.stream().anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
|
||||
|| excel.getRoleCode().equals(sysRole.getRoleCode()));
|
||||
|
||||
if (existRole) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
|
||||
@@ -155,7 +154,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||
@Override
|
||||
public List<RoleExcelVO> listRole(SysRole sysRole, Long[] ids) {
|
||||
List<SysRole> roleList = this
|
||||
.list(Wrappers.lambdaQuery(sysRole).in(ArrayUtil.isNotEmpty(ids), SysRole::getRoleId, ids));
|
||||
.list(Wrappers.lambdaQuery(sysRole).in(ArrayUtil.isNotEmpty(ids), SysRole::getRoleId, ids));
|
||||
// 转换成execl 对象输出
|
||||
return roleList.stream().map(role -> {
|
||||
RoleExcelVO roleExcelVO = new RoleExcelVO();
|
||||
|
||||
+9
-13
@@ -90,7 +90,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
@Cacheable(value = CacheConstants.TENANT_DETAILS)
|
||||
public List<SysTenant> getNormalTenant() {
|
||||
return baseMapper
|
||||
.selectList(Wrappers.<SysTenant>lambdaQuery().eq(SysTenant::getStatus, CommonConstants.STATUS_NORMAL));
|
||||
.selectList(Wrappers.<SysTenant>lambdaQuery().eq(SysTenant::getStatus, CommonConstants.STATUS_NORMAL));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -130,8 +130,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
dictIdList.addAll(dictList.stream().map(SysDict::getId).collect(Collectors.toList()));
|
||||
dictItemList.addAll(
|
||||
dictItemService.list(Wrappers.<SysDictItem>lambdaQuery().in(SysDictItem::getDictId, dictIdList)));
|
||||
List<SysMenu> newMenuList = menuService.list(Wrappers.<SysMenu>lambdaQuery()
|
||||
.in(SysMenu::getMenuId, StrUtil.split(sysTenant.getMenuId(), CharUtil.COMMA)));
|
||||
List<SysMenu> newMenuList = menuService.list(Wrappers.<SysMenu>lambdaQuery().in(SysMenu::getMenuId,
|
||||
StrUtil.split(sysTenant.getMenuId(), CharUtil.COMMA)));
|
||||
// 查询当前租户菜单
|
||||
menuList.addAll(newMenuList);
|
||||
// 查询客户端配置
|
||||
@@ -189,20 +189,17 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
// 插入系统字典
|
||||
dictService.saveBatch(dictList.stream().peek(d -> d.setId(null)).collect(Collectors.toList()));
|
||||
// 处理字典项最新关联的字典ID
|
||||
List<SysDictItem> itemList = dictList.stream()
|
||||
.flatMap(dict -> dictItemList.stream()
|
||||
.filter(item -> item.getDictType().equals(dict.getDictType()))
|
||||
.peek(item -> {
|
||||
List<SysDictItem> itemList = dictList.stream().flatMap(dict -> dictItemList.stream()
|
||||
.filter(item -> item.getDictType().equals(dict.getDictType())).peek(item -> {
|
||||
item.setDictId(dict.getId());
|
||||
item.setId(null);
|
||||
}))
|
||||
.collect(Collectors.toList());
|
||||
})).collect(Collectors.toList());
|
||||
|
||||
// 插入客户端
|
||||
clientServices.saveBatch(clientDetailsList.stream().peek(d -> d.setId(null)).collect(Collectors.toList()));
|
||||
// 插入系统配置
|
||||
paramService
|
||||
.saveBatch(publicParamList.stream().peek(d -> d.setPublicId(null)).collect(Collectors.toList()));
|
||||
.saveBatch(publicParamList.stream().peek(d -> d.setPublicId(null)).collect(Collectors.toList()));
|
||||
return dictItemService.saveBatch(itemList);
|
||||
}));
|
||||
|
||||
@@ -232,9 +229,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
List<SysMenu> sysMenuList = TenantBroker.applyAs(defaultId,
|
||||
id -> menuService.list(Wrappers.<SysMenu>lambdaQuery()
|
||||
.in(SysMenu::getMenuId, StrUtil.split(tenantDTO.getMenuId(), CharUtil.COMMA))));
|
||||
List<SysMenu> sysMenuList = TenantBroker.applyAs(defaultId, id -> menuService.list(Wrappers
|
||||
.<SysMenu>lambdaQuery().in(SysMenu::getMenuId, StrUtil.split(tenantDTO.getMenuId(), CharUtil.COMMA))));
|
||||
|
||||
TenantBroker.runAs(tenantDTO.getId(), (tenantId -> {
|
||||
// 查询当前租户的所有菜单
|
||||
|
||||
+29
-45
@@ -120,7 +120,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
String defaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
|
||||
// 默认角色
|
||||
SysRole sysRole = sysRoleService
|
||||
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
|
||||
.getOne(Wrappers.<SysRole>lambdaQuery().eq(SysRole::getRoleCode, defaultRole));
|
||||
userDto.setRole(Collections.singletonList(sysRole.getRoleId()));
|
||||
}
|
||||
|
||||
@@ -144,20 +144,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setSysUser(sysUser);
|
||||
// 设置角色列表 (ID)
|
||||
List<Long> roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId())
|
||||
.stream()
|
||||
.map(SysRole::getRoleId)
|
||||
.collect(Collectors.toList());
|
||||
List<Long> roleIds = sysRoleService.findRolesByUserId(sysUser.getUserId()).stream().map(SysRole::getRoleId)
|
||||
.collect(Collectors.toList());
|
||||
userInfo.setRoles(ArrayUtil.toArray(roleIds, Long.class));
|
||||
|
||||
// 设置权限列表(menu.permission)
|
||||
Set<String> permissions = new HashSet<>();
|
||||
roleIds.forEach(roleId -> {
|
||||
List<String> permissionList = sysMenuService.findMenuByRoleId(roleId)
|
||||
.stream()
|
||||
.filter(menu -> StrUtil.isNotEmpty(menu.getPermission()))
|
||||
.map(SysMenu::getPermission)
|
||||
.collect(Collectors.toList());
|
||||
List<String> permissionList = sysMenuService.findMenuByRoleId(roleId).stream()
|
||||
.filter(menu -> StrUtil.isNotEmpty(menu.getPermission())).map(SysMenu::getPermission)
|
||||
.collect(Collectors.toList());
|
||||
permissions.addAll(permissionList);
|
||||
});
|
||||
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
|
||||
@@ -239,7 +235,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
// 更新用户角色表
|
||||
if (userDto.getRole() != null) {
|
||||
sysUserRoleMapper
|
||||
.delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId()));
|
||||
.delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, userDto.getUserId()));
|
||||
userDto.getRole().stream().map(roleId -> {
|
||||
SysUserRole userRole = new SysUserRole();
|
||||
userRole.setUserId(sysUser.getUserId());
|
||||
@@ -251,7 +247,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
// 更新用户岗位表
|
||||
if (userDto.getPost() != null) {
|
||||
sysUserPostMapper
|
||||
.delete(Wrappers.<SysUserPost>lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId()));
|
||||
.delete(Wrappers.<SysUserPost>lambdaQuery().eq(SysUserPost::getUserId, userDto.getUserId()));
|
||||
userDto.getPost().stream().map(postId -> {
|
||||
SysUserPost userPost = new SysUserPost();
|
||||
userPost.setUserId(sysUser.getUserId());
|
||||
@@ -295,15 +291,11 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
List<UserExcelVO> userExcelVOList = voList.stream().map(userVO -> {
|
||||
UserExcelVO excelVO = new UserExcelVO();
|
||||
BeanUtils.copyProperties(userVO, excelVO);
|
||||
String roleNameList = userVO.getRoleList()
|
||||
.stream()
|
||||
.map(SysRole::getRoleName)
|
||||
.collect(Collectors.joining(StrUtil.COMMA));
|
||||
String roleNameList = userVO.getRoleList().stream().map(SysRole::getRoleName)
|
||||
.collect(Collectors.joining(StrUtil.COMMA));
|
||||
excelVO.setRoleNameList(roleNameList);
|
||||
String postNameList = userVO.getPostList()
|
||||
.stream()
|
||||
.map(SysPost::getPostName)
|
||||
.collect(Collectors.joining(StrUtil.COMMA));
|
||||
String postNameList = userVO.getPostList().stream().map(SysPost::getPostName)
|
||||
.collect(Collectors.joining(StrUtil.COMMA));
|
||||
excelVO.setPostNameList(postNameList);
|
||||
return excelVO;
|
||||
}).collect(Collectors.toList());
|
||||
@@ -332,7 +324,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
Set<String> errorMsg = new HashSet<>();
|
||||
// 校验用户名是否存在
|
||||
boolean exsitUserName = userList.stream()
|
||||
.anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
|
||||
.anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
|
||||
|
||||
if (exsitUserName) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
|
||||
@@ -340,8 +332,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
|
||||
// 判断输入的部门名称列表是否合法
|
||||
Optional<SysDept> deptOptional = deptList.stream()
|
||||
.filter(dept -> excel.getDeptName().equals(dept.getName()))
|
||||
.findFirst();
|
||||
.filter(dept -> excel.getDeptName().equals(dept.getName())).findFirst();
|
||||
if (!deptOptional.isPresent()) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptName()));
|
||||
}
|
||||
@@ -349,8 +340,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
// 判断输入的角色名称列表是否合法
|
||||
List<String> roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
|
||||
List<SysRole> roleCollList = roleList.stream()
|
||||
.filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
|
||||
.collect(Collectors.toList());
|
||||
.filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (roleCollList.size() != roleNameList.size()) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_ROLENAME_INEXISTENCE, excel.getRoleNameList()));
|
||||
@@ -359,8 +350,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
// 判断输入的部门名称列表是否合法
|
||||
List<String> postNameList = StrUtil.split(excel.getPostNameList(), StrUtil.COMMA);
|
||||
List<SysPost> postCollList = postList.stream()
|
||||
.filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
|
||||
.collect(Collectors.toList());
|
||||
.filter(post -> postNameList.stream().anyMatch(name -> post.getPostName().equals(name)))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (postCollList.size() != postNameList.size()) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_POST_POSTNAME_INEXISTENCE, excel.getPostNameList()));
|
||||
@@ -464,9 +455,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
}
|
||||
String password = ENCODER.encode(userDto.getNewpassword1());
|
||||
|
||||
this.update(Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getPassword, password)
|
||||
.eq(SysUser::getUserId, userVO.getUserId()));
|
||||
this.update(Wrappers.<SysUser>lambdaUpdate().set(SysUser::getPassword, password).eq(SysUser::getUserId,
|
||||
userVO.getUserId()));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@@ -475,24 +465,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
PigxUser user = SecurityUtils.getUser();
|
||||
LambdaUpdateWrapper<SysUser> wrapper = null;
|
||||
if (type.equals("wechat")) {
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getWxOpenid, null)
|
||||
.eq(SysUser::getUserId, user.getId());
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate().set(SysUser::getWxOpenid, null).eq(SysUser::getUserId,
|
||||
user.getId());
|
||||
}
|
||||
else if (type.equals("gitee")) {
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getGiteeLogin, null)
|
||||
.eq(SysUser::getUserId, user.getId());
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate().set(SysUser::getGiteeLogin, null).eq(SysUser::getUserId,
|
||||
user.getId());
|
||||
}
|
||||
else if (type.equals("osc")) {
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getOscId, null)
|
||||
.eq(SysUser::getUserId, user.getId());
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate().set(SysUser::getOscId, null).eq(SysUser::getUserId,
|
||||
user.getId());
|
||||
}
|
||||
else if (type.equals("tencent")) {
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getQqOpenid, null)
|
||||
.eq(SysUser::getUserId, user.getId());
|
||||
wrapper = Wrappers.<SysUser>lambdaUpdate().set(SysUser::getQqOpenid, null).eq(SysUser::getUserId,
|
||||
user.getId());
|
||||
}
|
||||
if (wrapper == null) {
|
||||
return R.failed("解绑账号类型不存在");
|
||||
@@ -520,9 +506,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
@Override
|
||||
public List<Long> listUserIdByRoleIds(List<Long> roleIdList) {
|
||||
return sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery().in(SysUserRole::getRoleId, roleIdList))
|
||||
.stream()
|
||||
.map(SysUserRole::getRoleId)
|
||||
.collect(Collectors.toList());
|
||||
.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-4
@@ -116,10 +116,9 @@ public class GenTableServiceImpl extends ServiceImpl<GenTableMapper, GenTable> i
|
||||
genTable = this.tableImport(dsName, tableName);
|
||||
}
|
||||
|
||||
List<GenTableColumnEntity> fieldList = columnService.list(Wrappers.<GenTableColumnEntity>lambdaQuery()
|
||||
.eq(GenTableColumnEntity::getDsName, dsName)
|
||||
.eq(GenTableColumnEntity::getTableName, tableName)
|
||||
.orderByAsc(GenTableColumnEntity::getSort));
|
||||
List<GenTableColumnEntity> fieldList = columnService
|
||||
.list(Wrappers.<GenTableColumnEntity>lambdaQuery().eq(GenTableColumnEntity::getDsName, dsName)
|
||||
.eq(GenTableColumnEntity::getTableName, tableName).orderByAsc(GenTableColumnEntity::getSort));
|
||||
genTable.setFieldList(fieldList);
|
||||
|
||||
// 查询模板分组信息
|
||||
|
||||
+18
-26
@@ -185,8 +185,8 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||
|
||||
// 获取模板信息,Lambda 表达式简化代码
|
||||
GenTemplateEntity genTemplateEntity = Optional
|
||||
.ofNullable(genTemplateService.getById(GeneratorStyleEnum.VFORM_JSON.getTemplateId()))
|
||||
.orElseThrow(() -> new Exception("模板不存在"));
|
||||
.ofNullable(genTemplateService.getById(GeneratorStyleEnum.VFORM_JSON.getTemplateId()))
|
||||
.orElseThrow(() -> new Exception("模板不存在"));
|
||||
|
||||
// 渲染模板并返回结果
|
||||
return VelocityKit.renderStr(genTemplateEntity.getTemplateCode(), dataModel);
|
||||
@@ -217,8 +217,8 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||
|
||||
// 获取模板信息
|
||||
GenTemplateEntity genTemplateEntity = Optional
|
||||
.ofNullable(genTemplateService.getById(GeneratorStyleEnum.VFORM_FORM.getTemplateId()))
|
||||
.orElseThrow(() -> new Exception("模板不存在"));
|
||||
.ofNullable(genTemplateService.getById(GeneratorStyleEnum.VFORM_FORM.getTemplateId()))
|
||||
.orElseThrow(() -> new Exception("模板不存在"));
|
||||
|
||||
// 渲染模板并返回结果
|
||||
return VelocityKit.renderStr(genTemplateEntity.getTemplateCode(), dataModel);
|
||||
@@ -234,10 +234,9 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||
GenTable table = tableService.getById(tableId);
|
||||
// 获取字段列表
|
||||
List<GenTableColumnEntity> fieldList = columnService.lambdaQuery()
|
||||
.eq(GenTableColumnEntity::getDsName, table.getDsName())
|
||||
.eq(GenTableColumnEntity::getTableName, table.getTableName())
|
||||
.orderByAsc(GenTableColumnEntity::getSort)
|
||||
.list();
|
||||
.eq(GenTableColumnEntity::getDsName, table.getDsName())
|
||||
.eq(GenTableColumnEntity::getTableName, table.getTableName()).orderByAsc(GenTableColumnEntity::getSort)
|
||||
.list();
|
||||
|
||||
table.setFieldList(fieldList);
|
||||
|
||||
@@ -276,9 +275,8 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||
String childTableName = table.getChildTableName();
|
||||
if (StrUtil.isNotBlank(childTableName)) {
|
||||
List<GenTableColumnEntity> childFieldList = columnService.lambdaQuery()
|
||||
.eq(GenTableColumnEntity::getDsName, table.getDsName())
|
||||
.eq(GenTableColumnEntity::getTableName, table.getChildTableName())
|
||||
.list();
|
||||
.eq(GenTableColumnEntity::getDsName, table.getDsName())
|
||||
.eq(GenTableColumnEntity::getTableName, table.getChildTableName()).list();
|
||||
dataModel.put("childFieldList", childFieldList);
|
||||
dataModel.put("childTableName", childTableName);
|
||||
dataModel.put("mainField", NamingCase.toCamelCase(table.getMainField()));
|
||||
@@ -297,24 +295,18 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||
*/
|
||||
private void setFieldTypeList(Map<String, Object> dataModel, GenTable table) {
|
||||
// 按字段类型分组,使用 Map 存储不同类型的字段列表
|
||||
Map<Boolean, List<GenTableColumnEntity>> typeMap = table.getFieldList()
|
||||
.stream()
|
||||
.collect(Collectors.partitioningBy(columnEntity -> BooleanUtil.toBoolean(columnEntity.getPrimaryPk().toString())));
|
||||
Map<Boolean, List<GenTableColumnEntity>> typeMap = table.getFieldList().stream().collect(Collectors
|
||||
.partitioningBy(columnEntity -> BooleanUtil.toBoolean(columnEntity.getPrimaryPk().toString())));
|
||||
|
||||
// 从分组后的 Map 中获取不同类型的字段列表
|
||||
List<GenTableColumnEntity> primaryList = typeMap.get(true);
|
||||
List<GenTableColumnEntity> formList = typeMap.get(false)
|
||||
.stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getFormItem()))
|
||||
.collect(Collectors.toList());
|
||||
List<GenTableColumnEntity> gridList = typeMap.get(false)
|
||||
.stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getGridItem()))
|
||||
.collect(Collectors.toList());
|
||||
List<GenTableColumnEntity> queryList = typeMap.get(false)
|
||||
.stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getQueryItem()))
|
||||
.collect(Collectors.toList());
|
||||
List<GenTableColumnEntity> formList = typeMap.get(false).stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getFormItem())).collect(Collectors.toList());
|
||||
List<GenTableColumnEntity> gridList = typeMap.get(false).stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getGridItem())).collect(Collectors.toList());
|
||||
List<GenTableColumnEntity> queryList = typeMap.get(false).stream()
|
||||
.filter(columnEntity -> BooleanUtil.toBoolean(columnEntity.getQueryItem()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollUtil.isNotEmpty(primaryList)) {
|
||||
dataModel.put("pk", primaryList.get(0));
|
||||
|
||||
Reference in new issue
Block a user