🔖 Releasing / Version tags. 5.2

This commit is contained in:
lbw committed 2023-09-13 09:51:05 +08:00
1 parent 8e07c3724a
commit d535271c89
73 files changed
+540 -878

No files matched your search

@@ -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);
@@ -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,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,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;
@@ -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) {
@@ -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;
}
}
@@ -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;
@@ -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;
@@ -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();
@@ -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;
@@ -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;
@@ -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()));
@@ -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();
}
@@ -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
@@ -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);
}
@@ -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();
}
@@ -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()));
}
@@ -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()));
}
}
@@ -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);
}
@@ -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();
@@ -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);
@@ -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)";
}
@@ -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());
@@ -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;
@@ -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);
@@ -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());
}
}
@@ -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);
@@ -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();
}
}
@@ -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();
@@ -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);
}
// 继续迭代
@@ -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;
}
}
@@ -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;
}
@@ -115,7 +115,6 @@ public interface RemoteFlowEngineService {
@PostMapping("/task/delegateTask")
R<String> delegateTask(@RequestBody TaskParamDto taskParamDto);
/**
* 查询任务
* @param taskId 任务ID
@@ -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) {
@@ -10,8 +10,8 @@ import lombok.Data;
@Data
public class SelectValue {
private String key;
private String key;
private String value;
private String value;
}
@@ -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();
}
}
@@ -52,7 +52,6 @@ public interface IProcessInstanceService {
*/
R queryMineCC(TaskQueryParamDto taskQueryParamDto);
/**
* 格式化流程显示
* @param nodeFormatParamVo
@@ -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);
@@ -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()));
}
}
@@ -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);
@@ -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);
}
@@ -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);
}
@@ -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());
@@ -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();
}
@@ -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());
}
@@ -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);
}
@@ -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());
@@ -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;
}
@@ -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)) {
@@ -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);
}
@@ -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;
@@ -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));
}
}
@@ -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;
@@ -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));
}
@@ -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));
}
/**
@@ -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())));
}
/**
@@ -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));
}
/**
@@ -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())));
}
/**
@@ -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));
}
}
@@ -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")
@@ -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;
/**
@@ -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 接口
@@ -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;
/**
@@ -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());
}
/**
@@ -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);
@@ -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)) {
@@ -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();
@@ -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));
}
@@ -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();
@@ -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 -> {
// 查询当前租户的所有菜单
@@ -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());
}
/**
@@ -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);
// 查询模板分组信息
@@ -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));