remove 移除flow-ui

This commit is contained in:
songgaoshuai 2023-07-28 17:50:28 +08:00
parent a582ea49e4
commit f3a1e7fec1
21 changed files with 0 additions and 1268 deletions

View File

@ -14,7 +14,6 @@
<modules>
<module>ruoyi-monitor-admin</module>
<module>ruoyi-xxl-job-admin</module>
<module>ruoyi-flow-ui</module>
</modules>
</project>

View File

@ -1,33 +0,0 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

View File

@ -1,16 +0,0 @@
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER zmx
RUN mkdir -p /ruoyi/flow/ui/logs
WORKDIR /ruoyi/flow/ui
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
EXPOSE 9205
ADD ./target/ruoyi-flow-ui.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

View File

@ -1,10 +0,0 @@
# Getting Started
### Reference Documentation
For further reference, please consider the following sections:
* [Official Apache Maven documentation](https://maven.apache.org/guides/index.html)
* [Spring Boot Maven Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/3.1.0/maven-plugin/reference/html/)
* [Create an OCI image](https://docs.spring.io/spring-boot/docs/3.1.0/maven-plugin/reference/html/#build-image)

View File

@ -1,137 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>ruoyi-extend</artifactId>
<groupId>org.dromara</groupId>
<version>${revision}</version>
</parent>
<artifactId>ruoyi-flow-ui</artifactId>
<name>ruoyi-flow-ui</name>
<description>ruoyi-flow-ui</description>
<properties>
<spring-boot.version>2.7.12</spring-boot.version>
<spring-boot-admin.version>2.7.10</spring-boot-admin.version>
<mybatis-spring-boot.version>2.2.2</mybatis-spring-boot.version>
<flowable.version>6.8.0</flowable.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-ui-idm</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-ui-task</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-ui-admin</artifactId>
<version>${flowable.version}</version>
</dependency>
<!-- starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,17 +0,0 @@
package com.dromara.flow.ui;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* flowable-ui启动类
* Author: 土豆仙
*/
@SpringBootApplication
public class FlowUiApplication {
public static void main(String[] args) {
SpringApplication.run(com.dromara.flow.ui.FlowUiApplication.class, args);
}
}

View File

@ -1,83 +0,0 @@
package com.dromara.flow.ui.config;
import com.dromara.flow.ui.config.idm.CustomGroupDataManager;
import com.dromara.flow.ui.config.idm.CustomPasswordEncoder;
import com.dromara.flow.ui.config.idm.CustomUserDataManager;
import org.flowable.idm.engine.impl.persistence.entity.GroupEntityManager;
import org.flowable.idm.engine.impl.persistence.entity.GroupEntityManagerImpl;
import org.flowable.idm.engine.impl.persistence.entity.UserEntityManager;
import org.flowable.idm.engine.impl.persistence.entity.UserEntityManagerImpl;
import org.flowable.idm.spring.SpringIdmEngineConfiguration;
import org.flowable.spring.boot.EngineConfigurationConfigurer;
import org.flowable.spring.boot.idm.FlowableIdmProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* @Author: 土豆仙
* @Date: 2021/9/28 19:30
* @Description: 一旦使用视图效率不高在这注入覆写类
*/
@Configuration
public class FlowableIdmConfig implements EngineConfigurationConfigurer<SpringIdmEngineConfiguration> {
@Autowired
private CustomUserDataManager customUserDataManager;
@Autowired
private CustomGroupDataManager customGroupDataManager;
@Override
public void configure(SpringIdmEngineConfiguration configuration) {
//密码加密器和自建用户体系保持一致
CustomPasswordEncoder bc = new CustomPasswordEncoder();
configuration.setPasswordEncoder(bc);
//用户
configuration.setUserDataManager(customUserDataManager);
UserEntityManager userEntityManager = configuration.getUserEntityManager();
if (userEntityManager != null) {
UserEntityManagerImpl userEntityManagerImpl = new UserEntityManagerImpl(configuration, customUserDataManager);
configuration.setUserEntityManager(userEntityManagerImpl);
}
//用户-组关系
/*configuration.setMembershipDataManager(customMembershipDataManager);
configuration.setMembershipEntityManager(customMembershipEntityManager);*/
//
configuration.setGroupDataManager(customGroupDataManager);
GroupEntityManager groupEntityManager = configuration.getGroupEntityManager();
if (groupEntityManager == null) {
GroupEntityManagerImpl groupEntityManagerImpl = new GroupEntityManagerImpl(configuration, customGroupDataManager);
configuration.setGroupEntityManager(groupEntityManagerImpl);
}
}
@Bean
public PasswordEncoder passwordEncoder(FlowableIdmProperties idmProperties) {
PasswordEncoder encoder = new CustomPasswordEncoder();
return encoder;
}
/* @Bean
public CustomGroupEntityManager customGroupEntityManager(IdmEngineConfiguration configuration) {
return new CustomGroupEntityManager(configuration, configuration.getGroupDataManager());
}*/
/* @Bean
public CustomUserEntityManager customUserEntityManager(IdmEngineConfiguration configuration) {
return new CustomUserEntityManager(configuration, new CustomUserDataManager(configuration));
}*/
}

View File

@ -1,165 +0,0 @@
package com.dromara.flow.ui.config.idm;
import com.dromara.flow.ui.domain.bo.GroupCodeBo;
import com.dromara.flow.ui.domain.bo.GroupNameBo;
import com.dromara.flow.ui.domain.bo.GroupQueryBo;
import com.dromara.flow.ui.mapper.CustomMybatisMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.ManagementService;
import org.flowable.engine.impl.cmd.AbstractCustomSqlExecution;
import org.flowable.idm.api.Group;
import org.flowable.idm.engine.IdmEngineConfiguration;
import org.flowable.idm.engine.impl.GroupQueryImpl;
import org.flowable.idm.engine.impl.persistence.entity.GroupEntity;
import org.flowable.idm.engine.impl.persistence.entity.GroupEntityImpl;
import org.flowable.idm.engine.impl.persistence.entity.data.AbstractIdmDataManager;
import org.flowable.idm.engine.impl.persistence.entity.data.GroupDataManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: 土豆仙
* @Date: 2021/11/12 10:05
* @Description: 覆写组查询
*/
@Slf4j
@Component
public class CustomGroupDataManager extends AbstractIdmDataManager<GroupEntity> implements GroupDataManager {
public CustomGroupDataManager(IdmEngineConfiguration idmEngineConfiguration) {
super(idmEngineConfiguration);
}
@Autowired
@Lazy
private ManagementService managementService;
@Override
public Class<? extends GroupEntity> getManagedEntityClass() {
return GroupEntityImpl.class;
}
@Override
public GroupEntity create() {
return new GroupEntityImpl();
}
@SuppressWarnings("unchecked")
@Override
public List<Group> findGroupByQueryCriteria(GroupQueryImpl query) {
if (log.isDebugEnabled()) {
log.debug("已重写自定义组查询findGroupByQueryCriteria");
}
boolean isReturnList = true;
GroupQueryBo groupQueryBo = transformQueryParamToGroupDTO(query);
if (StringUtils.isNotBlank(query.getId())) {
groupQueryBo.setReturnList(false);
isReturnList = false;
}
List<Group> groups = managementService.executeCustomSql(new AbstractCustomSqlExecution<CustomMybatisMapper, List<Group>>(CustomMybatisMapper.class) {
@Override
public List<Group> execute(CustomMybatisMapper customMybatisMapper) {
return customMybatisMapper.findGroupList(groupQueryBo);
}
});
return groups;
//return getDbSqlSession().selectList("selectGroupByQueryCriteria", query, getManagedEntityClass());
}
private GroupQueryBo transformQueryParamToGroupDTO(GroupQueryImpl query) {
GroupQueryBo groupQueryBo = new GroupQueryBo();
//约定 groupId 解析为 部门code.角色code
List<String> groupIds = new ArrayList<>();
if (StringUtils.isNotEmpty(query.getId())) {
groupIds.add(query.getId());
}
if (CollectionUtils.isNotEmpty(query.getIds())) {
groupIds.addAll(query.getIds());
}
List<GroupCodeBo> groupBoList = groupIds.stream()
.map(GroupCodeBo::new)
.collect(Collectors.toList());
groupQueryBo.setGroupCodeBos(groupBoList);
//约定 groupName 解析为 区域name/部门name/角色name
groupQueryBo.setGroupNameBo(new GroupNameBo(query.getName()));
//userId
List<String> userNames = new ArrayList<>();
if (StringUtils.isNotEmpty(query.getUserId())) {
userNames.add(query.getUserId());
}
if (CollectionUtils.isNotEmpty(query.getIds())) {
userNames.addAll(query.getIds());
}
groupQueryBo.setUserNames(userNames);
return groupQueryBo;
}
@Override
public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
if (log.isDebugEnabled()) {
log.debug("已重写自定义组查询findGroupCountByQueryCriteria");
}
//return (Long) getDbSqlSession().selectOne("selectGroupCountByQueryCriteria", query);
List<Group> groupByQueryCriteria = findGroupByQueryCriteria(query);
return groupByQueryCriteria.size();
}
@SuppressWarnings("unchecked")
@Override
public List<Group> findGroupsByUser(String userId) {
if (log.isDebugEnabled()) {
log.debug("已重写自定义组查询findGroupsByUser");
}
GroupQueryImpl groupQuery = new GroupQueryImpl();
groupQuery.groupMember(userId);
List<Group> groupByQueryCriteria = findGroupByQueryCriteria(groupQuery);
return groupByQueryCriteria;
//return getDbSqlSession().selectList("selectGroupsByUserId", userId);
}
@Override
@SuppressWarnings("unchecked")
public List<Group> findGroupsByPrivilegeId(String privilegeId) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findGroupsByPrivilegeId");
}
return getDbSqlSession().selectList("selectGroupsWithPrivilegeId", privilegeId);
}
@SuppressWarnings("unchecked")
@Override
public List<Group> findGroupsByNativeQuery(Map<String, Object> parameterMap) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findGroupsByNativeQuery");
}
return getDbSqlSession().selectListWithRawParameter("selectGroupByNativeQuery", parameterMap);
}
@Override
public long findGroupCountByNativeQuery(Map<String, Object> parameterMap) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findGroupCountByNativeQuery");
}
return (Long) getDbSqlSession().selectOne("selectGroupCountByNativeQuery", parameterMap);
}
}

View File

@ -1,50 +0,0 @@
package com.dromara.flow.ui.config.idm;
import org.flowable.idm.api.PasswordEncoder;
import org.flowable.idm.api.PasswordSalt;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* @Author: 土豆仙
* @Date: 2021/11/12 10:04
* @Description: 密码加密器
*/
public class CustomPasswordEncoder implements PasswordEncoder,org.springframework.security.crypto.password.PasswordEncoder {
@Override
public String encode(CharSequence rawPassword, PasswordSalt passwordSalt) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(rawPassword);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
@Override
public boolean isMatches(CharSequence rawPassword, String encodedPassword, PasswordSalt salt) {
/* BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();*/
return true;
}
@Override
public String encode(CharSequence rawPassword) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.encode(rawPassword);
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
/*BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();*/
return true;
}
@Override
public boolean upgradeEncoding(String encodedPassword) {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
return passwordEncoder.upgradeEncoding(encodedPassword);
}
}

View File

@ -1,154 +0,0 @@
package com.dromara.flow.ui.config.idm;
import com.dromara.flow.ui.domain.bo.GroupCodeBo;
import com.dromara.flow.ui.domain.bo.UserQueryBo;
import com.dromara.flow.ui.mapper.CustomMybatisMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.ManagementService;
import org.flowable.engine.impl.cmd.AbstractCustomSqlExecution;
import org.flowable.idm.api.User;
import org.flowable.idm.engine.IdmEngineConfiguration;
import org.flowable.idm.engine.impl.UserQueryImpl;
import org.flowable.idm.engine.impl.persistence.entity.UserEntity;
import org.flowable.idm.engine.impl.persistence.entity.UserEntityImpl;
import org.flowable.idm.engine.impl.persistence.entity.data.AbstractIdmDataManager;
import org.flowable.idm.engine.impl.persistence.entity.data.UserDataManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: 土豆仙
* @Date: 2021/11/12 10:07
* @Description: 覆写用户信息查询
*/
@Slf4j
@Component
public class CustomUserDataManager extends AbstractIdmDataManager<UserEntity> implements UserDataManager {
public CustomUserDataManager(IdmEngineConfiguration idmEngineConfiguration) {
super(idmEngineConfiguration);
}
@Autowired
@Lazy
private ManagementService managementService;
@Override
public Class<? extends UserEntity> getManagedEntityClass() {
return UserEntityImpl.class;
}
@Override
public UserEntity create() {
return new UserEntityImpl();
}
/**
*
* @param query 流程引擎查询参数
* @return 流程引擎展示视图
*/
@SuppressWarnings("unchecked")
@Override
public List<User> findUserByQueryCriteria(UserQueryImpl query) {
if (log.isDebugEnabled()) {
log.debug("已重写自定义组查询findUserByQueryCriteria");
}
UserQueryBo userQueryBo = transformQueryImplToUserQueryBo(query);
List<User> users = managementService.executeCustomSql(new AbstractCustomSqlExecution<CustomMybatisMapper, List<User>>(CustomMybatisMapper.class) {
@Override
public List<User> execute(CustomMybatisMapper customMybatisMapper) {
return customMybatisMapper.selectUserList(userQueryBo);
}
});
return users;
}
private UserQueryBo transformQueryImplToUserQueryBo(UserQueryImpl query) {
UserQueryBo userQueryBo = new UserQueryBo();
//设置userName
if (StringUtils.isNotBlank(query.getId())) {
userQueryBo.setUserName(query.getId());
} else {
userQueryBo.setUserName(query.getIdIgnoreCase());
}
userQueryBo.setUserNames(query.getIds());
//设置nickName
if (StringUtils.isNotBlank(query.getFirstName()) || StringUtils.isNotBlank(query.getLastName())) {
String nickName = StringUtils.join(query.getFirstName(), query.getLastName());
userQueryBo.setNickName(nickName);
} else {
userQueryBo.setNickName(query.getDisplayName());
}
//设置email
userQueryBo.setEmail(query.getEmail());
userQueryBo.setEmailLike(query.getEmailLike());
//处理组映射
List<GroupCodeBo> groupBoList = new ArrayList<>();
if (StringUtils.isNotEmpty(query.getGroupId())) {
groupBoList.add(new GroupCodeBo(query.getGroupId()));
}
if (!CollectionUtils.isEmpty(query.getGroupIds())) {
List<GroupCodeBo> collect = query.getGroupIds().stream()
.map(GroupCodeBo::new)
.collect(Collectors.toList());
groupBoList.addAll(collect);
}
userQueryBo.setGroupBoList(groupBoList);
return userQueryBo;
}
@Override
public long findUserCountByQueryCriteria(UserQueryImpl query) {
if (log.isDebugEnabled()) {
log.debug("已重写自定义组查询findUserCountByQueryCriteria");
}
// return (Long) getDbSqlSession().selectOne("selectUserCountByQueryCriteria", query);
return findUserByQueryCriteria(query).size();
}
@Override
@SuppressWarnings("unchecked")
public List<User> findUsersByPrivilegeId(String privilegeId) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findUsersByPrivilegeId");
}
return getDbSqlSession().selectList("selectUsersWithPrivilegeId", privilegeId);
}
@SuppressWarnings("unchecked")
@Override
public List<User> findUsersByNativeQuery(Map<String, Object> parameterMap) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findUsersByNativeQuery");
}
return getDbSqlSession().selectListWithRawParameter("selectUserByNativeQuery", parameterMap);
}
@Override
public long findUserCountByNativeQuery(Map<String, Object> parameterMap) {
if (log.isDebugEnabled()) {
log.debug("未重写自定义组查询findUserCountByNativeQuery");
}
return (Long) getDbSqlSession().selectOne("selectUserCountByNativeQuery", parameterMap);
}
}

View File

@ -1,120 +0,0 @@
package com.dromara.flow.ui.domain.bo;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import liquibase.repackaged.org.apache.commons.text.StringSubstitutor;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 业务组与流程组转换
* Author: 土豆仙
*/
@NoArgsConstructor
public class GroupCodeBo {
/**
* 默认占位符号 代表所有
*/
private static final String STAR = "*";
/**
* 分割符号
*/
private static final String DOT = ".";
/**
* 占位字符串定义 - 后期放入配置中用于扩展
*/
private static final String PLACEHOLDER_STRING = "${deptCode}.${roleCode}";
/**
* 定义中 ${}内的内容
*/
private static final String pattern = "\\$\\{(.*?)}";
/**
* deptCode* roleCode* ...
*/
private Map<String, String> codeMap = new HashMap<>();
/**
* deptCode* roleCode* ...
*/
private static final Map<String, String> codeMapInit = new HashMap<>();
/**
* deptCoderoleCode ...
*/
private static final List<String> codeList = new ArrayList<>();
//初始化
static {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(PLACEHOLDER_STRING);
while (m.find()) {
// ${} 里面的内容
String code = m.group(1);
codeList.add(code);
codeMapInit.put(code, STAR);
}
}
public GroupCodeBo(String gourpCode) {
transferToBusiness(gourpCode);
}
/**
* @param gourpCode 流程引擎编码转换约定
*/
public void transferToBusiness(String gourpCode) {
List<String> split = StrUtil.split(gourpCode, DOT);
if (CollectionUtil.isNotEmpty(split) && split.size() == codeList.size()) {
//遍历
for (int i = 0; i < codeList.size(); i++) {
codeMap.put(codeList.get(i), split.get(i));
}
}
}
/**
* @return 组编码
*/
public String getGourpCode() {
if (MapUtil.isEmpty(codeMap)) {
codeMap.putAll(codeMapInit);
}
StringSubstitutor strSubstitutor = new StringSubstitutor(codeMap);
return strSubstitutor.replace(PLACEHOLDER_STRING);
}
/**
* @return 编码- 键值对
*/
public Map<String, String> getCodeMap() {
if (MapUtil.isEmpty(codeMap)) {
codeMap.putAll(codeMapInit);
}
return codeMap;
}
}

View File

@ -1,121 +0,0 @@
package com.dromara.flow.ui.domain.bo;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import liquibase.repackaged.org.apache.commons.text.StringSubstitutor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 业务组名与流程组转换
* Author: 土豆仙
*/
@Data
@NoArgsConstructor
public class GroupNameBo {
/**
* 默认占位符号 代表所有
*/
private static final String STAR = "*";
/**
* 分割符号
*/
private static final String DOT = ".";
/**
* 占位字符串定义 - 后期放入配置中用于扩展
*/
private static final String PLACEHOLDER_STRING = "${deptName}.${roleName}";
/**
* 定义中 ${}内的内容
*/
private static final String pattern = "\\$\\{(.*?)}";
/**
* deptName* roleName* ...
*/
private static final Map<String, String> nameMapInit = new HashMap<>();
/**
* deptName* roleName* ...
*/
private Map<String, String> nameMap = new HashMap<>();
/**
* deptNameroleName ...
*/
private static final List<String> nameList = new ArrayList<>();
//初始化
static {
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(PLACEHOLDER_STRING);
while (m.find()) {
// ${} 里面的内容
String Name = m.group(1);
nameList.add(Name);
nameMapInit.put(Name, STAR);
}
}
public GroupNameBo(String gourpName) {
transferToBusiness(gourpName);
}
/**
* @param gourpName 流程引擎编码转换约定
*/
public void transferToBusiness(String gourpName) {
List<String> split = StrUtil.split(gourpName, DOT);
if (CollectionUtil.isNotEmpty(split) && split.size() <= nameList.size()) {
//遍历
for (int i = 0; i < split.size(); i++) {
nameMap.put(nameList.get(i), split.get(i));
}
}
}
/**
* @return 组名
*/
public String getGourpname() {
if (MapUtil.isEmpty(nameMap)) {
nameMap.putAll(nameMapInit);
}
StringSubstitutor strSubstitutor = new StringSubstitutor(nameMap);
return strSubstitutor.replace(PLACEHOLDER_STRING);
}
/**
* @return 名称编码- 键值对
*/
public Map<String, String> getnameMap() {
if (MapUtil.isEmpty(nameMap)) {
nameMap.putAll(nameMapInit);
}
return nameMap;
}
}

View File

@ -1,38 +0,0 @@
package com.dromara.flow.ui.domain.bo;
import lombok.Data;
import java.util.List;
/**
* 自定义group查询条件
* Author: 土豆仙
*/
@Data
public class GroupQueryBo {
//约定 解析为 区域code/部门code/角色code
/* protected String id;
protected List<String> ids;*/
private boolean isReturnList = true;
// private DdrCodeDTO ddrCodeDTO;
private List<GroupCodeBo> groupCodeBos;
//约定 解析为 区域name/部门name/角色name
/* protected String name;
protected String nameLike;
protected String nameLikeIgnoreCase;*/
private GroupNameBo groupNameBo;
/*
protected String type;
protected String userId;
protected List<String> userIds;*/
protected List<String> userNames;
}

View File

@ -1,55 +0,0 @@
package com.dromara.flow.ui.domain.bo;
import lombok.Data;
import java.util.List;
/**
* 自定义user查询条件
* Author: 土豆仙
*/
@Data
public class UserQueryBo {
//用户ID -对应账号
/* protected String id;
protected List<String> ids;
protected String idIgnoreCase;*/
private String userName;
private List<String> userNames;
//用户名称
/*protected String firstName;
protected String firstNameLike;
protected String firstNameLikeIgnoreCase;
protected String lastName;
protected String lastNameLike;
protected String lastNameLikeIgnoreCase;
protected String fullNameLike;
protected String fullNameLikeIgnoreCase;
protected String displayName;
protected String displayNameLike;
protected String displayNameLikeIgnoreCase;*/
private String nickName;
//邮箱
/*protected String email;
protected String emailLike;*/
private String email;
private String emailLike;
//用户组
/*protected String groupId;
protected List<String> groupIds;*/
//约定用户组转换成 区化部门角色 最后使用稳定的code值
private List<GroupCodeBo> groupBoList;
//租户
protected String tenantId;
}

View File

@ -1,36 +0,0 @@
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.dromara.flow.ui.mapper;
import com.dromara.flow.ui.domain.bo.GroupQueryBo;
import com.dromara.flow.ui.domain.bo.UserQueryBo;
import org.flowable.idm.api.Group;
import org.flowable.idm.api.User;
import java.util.List;
/**
* 自定义mapperSQl
* Author: 土豆仙
*/
public interface CustomMybatisMapper {
List<User> selectUserList(UserQueryBo userQueryBo);
/**
* @param groupQueryBo
* @return (id name)
*/
List<Group> findGroupList(GroupQueryBo groupQueryBo);
}

View File

@ -1,38 +0,0 @@
--- # 监控配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
# 设置 Spring Boot Admin Server 地址
url: http://localhost:9090/admin
instance:
service-host-type: IP
username: ruoyi
password: 123456
# Spring配置
spring:
application:
name: flow-ui
main:
allow-bean-definition-overriding: true
liquibase:
enabled: false
# jackson:
# date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
datasource:
url: jdbc:mysql://localhost:3306/ry-vue?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&nullCatalogMeansCurrent=true
username: root
password: 123456
flowable:
databaseSchemaUpdate: true
# databaseSchema:
# 日志配置
logging:
level:
org.flowable.engine.impl.persistence.entity.*: DEBUG
org.flowable.task.service.impl.persistence.entity.*: DEBUG # 日志配置

View File

@ -1,38 +0,0 @@
--- # 监控配置
spring.boot.admin.client:
# 增加客户端开关
enabled: true
# 设置 Spring Boot Admin Server 地址
url: http://localhost:9090/admin
instance:
service-host-type: IP
username: ruoyi
password: 123456
# Spring配置
spring:
application:
name: flow-ui
main:
allow-bean-definition-overriding: true
liquibase:
enabled: false
# jackson:
# date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
datasource:
url: jdbc:mysql://localhost:3306/ry-vue?zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&nullCatalogMeansCurrent=true
username: root
password: 123456
flowable:
databaseSchemaUpdate: true
# databaseSchema:
# 日志配置
logging:
level:
org.flowable.engine.impl.persistence.entity.*: DEBUG
org.flowable.task.service.impl.persistence.entity.*: DEBUG # 日志配置

View File

@ -1,38 +0,0 @@
# 开发环境配置
server:
# 服务器的HTTP端口默认为8080
port: 9205
servlet:
# 应用的访问路径
context-path: /flowable-ui
tomcat:
# tomcat的URI编码
uri-encoding: UTF-8
# tomcat最大线程数默认为200
#max-threads: 800
# Tomcat启动初始化的线程数默认值25
#min-spare-threads: 30
flowable:
customMybatisXMLMappers:
- mappers/CustomMybatisXmlMapper.xml
customMybatisMappers:
- com.dromara.flow.ui.mapper.CustomMybatisMapper
--- # Actuator 监控端点的配置项
management:
health:
ldap:
enabled: false
mail:
enabled: false
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
logfile:
external-file: ./logs/ruoyi-flow-ui.log
spring:
profiles:
active: @profiles.active@

View File

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="log.path" value="./logs/ruoyi-flow-ui"/>
<property name="console.log.pattern"
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console.log.pattern}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>

View File

@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dromara.flow.ui.mapper.CustomMybatisMapper">
<!-- SELECT ALL PROCESS DEFINITION ID -->
<select id="selectProcessDefinitionDeploymentIdByKey" parameterType="String" resultType="String">
SELECT DEPLOYMENT_ID_ FROM ACT_RE_PROCDEF WHERE KEY_ = #{value}
</select>
<select id="selectUserList" resultType="org.flowable.idm.engine.impl.persistence.entity.UserEntityImpl">
select distinct
u.user_name as id,
u.nick_name as firstName,
u.nick_name as displayName,
u.email as email,
u.password as password
from sys_user u
left join sys_user d on u.dept_id = d.dept_id
<where>
u.status = '0'
<if test="userName != null and userName != ''">
AND u.user_name = #{userName}
</if>
</where>
</select>
<select id="findGroupList" resultType="org.flowable.idm.engine.impl.persistence.entity.GroupEntityImpl">
SELECT
CONCAT_WS(".",d.dept_id,r.role_id) as id,
CONCAT_WS(".",d.dept_name,r.role_name) as name
FROM sys_dept d,sys_role r
<where>
d.status = '0' and r.status = '0'
<if test="groupCodeBos !=null and groupCodeBos.size() >0 ">
AND r.role_id in
<foreach collection="groupCodeBos" item="groupCodeBo" open="(" separator="," close=")">
#{groupCodeBo}
</foreach>
</if>
</where>
UNION
SELECT
CONCAT_WS(".",d.dept_id,"*") as id,
CONCAT_WS(".",d.dept_name,"*") as name
FROM sys_dept d
<where>
d.status = '0'
</where>
UNION
SELECT
CONCAT_WS(".","*",r.role_id) as id,
CONCAT_WS(".","*",r.role_name) as name
FROM sys_role r
<where>
r.status = '0'
</where>
</select>
</mapper>

View File

@ -1,13 +0,0 @@
package org.dromara.flow.ui;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RuoyiFlowUiApplicationTests {
@Test
void contextLoads() {
}
}