From 15a9cc43d0a68b10007eeb11e151214aedd4464b Mon Sep 17 00:00:00 2001
From: pengjie <17373303529@163.com>
Date: Fri, 15 Mar 2024 16:42:52 +0800
Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90wflow?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 109 ++++++++--
src/main/java/com/WisdomSiteApplication.java | 3 +-
.../com/zhgd/config/DataSourceOneConfig.java | 55 +++++
.../com/zhgd/config/DataSourceTwoConfig.java | 47 ++++
.../com/zhgd/xmgl/config/AsyncConfig.java | 5 +-
.../modules/basicdata/entity/SystemUser.java | 4 +
.../basicdata/mapper/SystemDeptMapper.java | 13 ++
.../basicdata/mapper/SystemUserMapper.java | 38 ++++
.../impl/FlowOrgRepositoryServiceImpl.java | 200 ++++++++++++++++++
.../zhgd/xmgl/security/WebSecurityConfig.java | 3 +
10 files changed, 458 insertions(+), 19 deletions(-)
create mode 100644 src/main/java/com/zhgd/config/DataSourceOneConfig.java
create mode 100644 src/main/java/com/zhgd/config/DataSourceTwoConfig.java
create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java
diff --git a/pom.xml b/pom.xml
index 06913e8..9673603 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.1.1.RELEASE
+ 2.2.3.RELEASE
com.zhgd
@@ -27,7 +27,7 @@
0.9.1
2.6
- 9.0.12
+ 9.0.30
0.17.0
@@ -122,10 +122,10 @@
org.springframework.boot
spring-boot-starter-aop
-
+
org.springframework.boot
@@ -234,7 +234,7 @@
-
-
mysql
mysql-connector-java
- 8.0.33
+ 5.1.48
+
@@ -304,6 +304,12 @@
com.qiwenshare
ufop-spring-boot-starter
1.2.3
+
+
+ hutool-core
+ cn.hutool
+
+
@@ -457,13 +463,13 @@
cn.hutool
hutool-all
- 5.8.5
+ 5.8.16
-
+
org.bouncycastle
bcprov-jdk15to18
@@ -484,6 +490,12 @@
cn.xuyanwu
spring-file-storage
0.5.0
+
+
+ hutool-core
+ cn.hutool
+
+
@@ -855,6 +867,73 @@
org.springframework.kafka
spring-kafka
+
+
+ org.example
+ wflow-server
+ 1.0-SNAPSHOT
+ system
+ ${basedir}/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar
+
+
+
+ org.flowable
+ flowable-spring-boot-starter-actuator
+ 6.7.2
+
+
+ org.mybatis
+ mybatis
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.20
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.40
+
+
+
+ cn.dev33
+ sa-token-spring-boot-starter
+ 1.30.0
+
+
+
+ com.belerweb
+ pinyin4j
+ 2.5.1
+
+
+
+ com.googlecode.aviator
+ aviator
+ 5.3.1
+
+
+
+ org.javadelight
+ delight-nashorn-sandbox
+ 0.3.2
+
+
+
+ xerces
+ xercesImpl
+ 2.12.0
+
+
diff --git a/src/main/java/com/WisdomSiteApplication.java b/src/main/java/com/WisdomSiteApplication.java
index 91e24c9..a8fa889 100644
--- a/src/main/java/com/WisdomSiteApplication.java
+++ b/src/main/java/com/WisdomSiteApplication.java
@@ -3,7 +3,6 @@ package com;
import cn.xuyanwu.spring.file.storage.EnableFileStorage;
import org.apache.catalina.connector.Connector;
-import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -23,7 +22,7 @@ import org.springframework.security.web.firewall.StrictHttpFirewall;
* @author: Mr.Peng
* @create: 2020-08-03 14:50
**/
-@MapperScan({"com.zhgd.*.*.*.mapper","com.zhwl.*.*.*.mapper","com.zhgd.*.*.*.*.mapper"})
+//@MapperScan(basePackages = {"com.zhgd.*.*.*.mapper","com.zhwl.*.*.*.mapper","com.zhgd.*.*.*.*.mapper", "com.wflow.mapper"})
@EnableAsync //开启异步调用
@EnableScheduling
@EnableFileStorage
diff --git a/src/main/java/com/zhgd/config/DataSourceOneConfig.java b/src/main/java/com/zhgd/config/DataSourceOneConfig.java
new file mode 100644
index 0000000..3c1a1b0
--- /dev/null
+++ b/src/main/java/com/zhgd/config/DataSourceOneConfig.java
@@ -0,0 +1,55 @@
+package com.zhgd.config;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = {"com.zhgd.*.*.*.*.mapper", "com.zhgd.*.*.*.mapper"}, sqlSessionTemplateRef = "db1SqlSessionTemplate")
+public class DataSourceOneConfig {
+
+ @Bean
+ @ConfigurationProperties(prefix = "spring.datasource.db1")
+ @Primary
+ public DataSource db1DataSource() {
+ return DataSourceBuilder.create().build();
+ }
+
+ @Bean
+ @Primary
+ @Lazy //这个是懒加载的注解,根据自己项目需要看是否添加
+ public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
+ MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
+ bean.setDataSource(dataSource);
+ //开启驼峰
+ MybatisConfiguration configuration = new MybatisConfiguration();
+ configuration.setMapUnderscoreToCamelCase(true);
+ bean.setConfiguration(configuration);
+ bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
+ return bean.getObject();
+ }
+ @Bean
+ @Primary
+ public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
+ return new DataSourceTransactionManager(dataSource);
+ }
+ @Bean
+ @Primary
+ @Lazy
+ public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
+ return new SqlSessionTemplate(sqlSessionFactory);
+ }
+}
diff --git a/src/main/java/com/zhgd/config/DataSourceTwoConfig.java b/src/main/java/com/zhgd/config/DataSourceTwoConfig.java
new file mode 100644
index 0000000..849e949
--- /dev/null
+++ b/src/main/java/com/zhgd/config/DataSourceTwoConfig.java
@@ -0,0 +1,47 @@
+package com.zhgd.config;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = "com.wflow.mapper", sqlSessionTemplateRef = "sqlSessionTemplate2")
+public class DataSourceTwoConfig {
+
+ @Bean(name = "dataSource2")
+ @ConfigurationProperties(prefix = "spring.datasource.db2")
+ public DataSource dataSource() {
+ return DataSourceBuilder.create().build();
+ }
+
+ @Bean(name = "sqlSessionFactory2")
+ public SqlSessionFactory db1SqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
+ MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
+ bean.setDataSource(dataSource);
+ //开启驼峰
+ MybatisConfiguration configuration = new MybatisConfiguration();
+ configuration.setMapUnderscoreToCamelCase(true);
+ bean.setConfiguration(configuration);
+ bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
+ return bean.getObject();
+ }
+ @Bean(name = "transactionManager2")
+ public DataSourceTransactionManager transactionManager(@Qualifier("dataSource2") DataSource dataSource) {
+ return new DataSourceTransactionManager(dataSource);
+ }
+ @Bean(name = "sqlSessionTemplate2")
+ public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
+ return new SqlSessionTemplate(sqlSessionFactory);
+ }
+}
diff --git a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java
index cb373ea..c1ac647 100644
--- a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java
+++ b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java
@@ -2,6 +2,7 @@ package com.zhgd.xmgl.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
@@ -32,7 +33,7 @@ public class AsyncConfig {
* 当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
* 当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
*/
-
+ @Primary
@Bean("taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
@@ -57,7 +58,7 @@ public class AsyncConfig {
* 当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
* 当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
*/
-
+ @Primary
@Bean("doubleCarbonExecutor")
public ThreadPoolTaskExecutor doubleCarbonExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java
index 3572748..7633cc6 100644
--- a/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/entity/SystemUser.java
@@ -138,6 +138,10 @@ public class SystemUser implements Serializable {
@ApiModelProperty(value = "性别(0女;1男)")
private Integer sex;
+ @Excel(name = "头像", width = 15)
+ @ApiModelProperty(value = "头像")
+ private String avatar;
+
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private String remark;
diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemDeptMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemDeptMapper.java
index 9219edd..afc3e55 100644
--- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemDeptMapper.java
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemDeptMapper.java
@@ -1,8 +1,13 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.wflow.bean.vo.OrgTreeVo;
import com.zhgd.xmgl.modules.basicdata.entity.SystemDept;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
/**
* @Description: 政府内部部门
@@ -14,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper;
public interface SystemDeptMapper extends BaseMapper {
String getChildrenByDeptId(String deptId);
+
+ /**
+ * 查询某部门下的子部门列表
+ * @param deptId 父部门
+ * @return 子部门列表,type字段固定返回固定值 dept
+ */
+ @Select("SELECT dept_id id, dept_name `name`, 'dept' AS 'type' FROM system_dept WHERE parent_id=#{deptId}")
+ List selectByDept(@Param("deptId") String deptId);
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java
index 0023a93..1f1b46a 100644
--- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/SystemUserMapper.java
@@ -4,11 +4,16 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.wflow.bean.do_.DeptDo;
+import com.wflow.bean.do_.UserDeptDo;
+import com.wflow.bean.vo.OrgTreeVo;
import com.zhgd.xmgl.modules.basicdata.dto.SystemUserDto;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import java.util.Collection;
import java.util.List;
/**
@@ -25,4 +30,37 @@ public interface SystemUserMapper extends BaseMapper {
Page getPageList(Page page, @Param(Constants.WRAPPER) Wrapper wrapper);
List getPageList(@Param(Constants.WRAPPER) Wrapper wrapper);
+
+ /**
+ * 查询该部门下的所有用户
+ * @param deptId 部门ID
+ * @return 用户列表 type为固定值user
+ */
+ @Select("SELECT user_id id, real_name `name`, 'user' AS 'type', avatar " +
+ "FROM system_user" +
+ " WHERE department = #{deptId}")
+ List selectUsersByDept(@Param("deptId") String deptId);
+
+ /**
+ * 查询指定用户所在的部门,一个用户可能同时在多个部门下
+ *
+ * @param userId 用户ID
+ * @return 用户所在的部门列表
+ */
+ @Select("SELECT d.dept_id id, d.dept_name FROM system_user u, system_dept d WHERE u.department = d.dept_id AND u.user_id = #{userId}")
+ List getUserDepts(@Param("userId") String userId);
+
+ /**
+ * 批量查询指定用户及部门信息
+ *
+ * @param udIds 用户ID_部门id 字符串拼接的集合
+ * @return 用户部门信息列表
+ */
+ @Select({""})
+ List getUserDepInfosBatch(@Param("list") Collection udIds);
}
diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java
new file mode 100644
index 0000000..43a8b90
--- /dev/null
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java
@@ -0,0 +1,200 @@
+package com.zhgd.xmgl.modules.basicdata.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.wflow.bean.do_.DeptDo;
+import com.wflow.bean.do_.RoleDo;
+import com.wflow.bean.do_.UserDeptDo;
+import com.wflow.bean.do_.UserDo;
+import com.wflow.bean.vo.ModelGroupVo;
+import com.wflow.bean.vo.OrgTreeVo;
+import com.wflow.bean.vo.UserVo;
+import com.wflow.service.OrgRepositoryService;
+import com.zhgd.xmgl.modules.basicdata.entity.SystemDept;
+import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
+import com.zhgd.xmgl.modules.basicdata.entity.SystemUserRole;
+import com.zhgd.xmgl.modules.basicdata.mapper.SystemDeptMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.SystemRoleMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserRoleMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Primary
+@Service
+public class FlowOrgRepositoryServiceImpl implements OrgRepositoryService {
+
+ @Autowired
+ private SystemUserMapper systemUserMapper;
+
+ @Autowired
+ private SystemDeptMapper systemDeptMapper;
+
+ @Autowired
+ private SystemRoleMapper systemRoleMapper;
+
+ @Autowired
+ private SystemUserRoleMapper systemUserRoleMapper;
+
+ @Override
+ public List getModelsByPerm(String userId) {
+ return null;
+ }
+
+ @Override
+ public UserDo getUserById(String userId) {
+ SystemUser systemUser = systemUserMapper.selectById(userId);
+ if (Objects.nonNull(systemUser)){
+ UserDo userDo = new UserDo();
+ userDo.setUserId(systemUser.getUserId());
+ userDo.setUserName(systemUser.getRealName());
+ userDo.setAvatar(systemUser.getAvatar());
+ return userDo;
+ }
+ return null;
+ }
+
+ @Override
+ public List selectUsersByPy(String py) {
+ return null;
+ }
+
+ @Override
+ public List selectUsersByDept(String deptId) {
+ return systemUserMapper.selectUsersByDept(deptId);
+ }
+
+ @Override
+ public List getUsersBatch(Collection userIds) {
+ try {
+ return systemUserMapper.selectBatchIds(userIds).stream()
+ .map(u -> new UserDo(u.getUserId(), u.getRealName(), u.getAvatar()))
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public Set getUsersByDepts(Collection deptIds) {
+ try {
+ return systemUserMapper.selectList(
+ new LambdaQueryWrapper()
+ .select(SystemUser::getUserId)
+ .in(SystemUser::getDepartment, deptIds))
+ .stream().map(SystemUser::getUserId)
+ .collect(Collectors.toSet());
+ } catch (Exception e) {
+ return Collections.emptySet();
+ }
+ }
+
+ @Override
+ public DeptDo getDeptById(String deptId) {
+ SystemDept departments = systemDeptMapper.selectById(deptId);
+ if (Objects.nonNull(departments)){
+ DeptDo deptDo = new DeptDo();
+ deptDo.setId(departments.getDeptId().toString());
+ deptDo.setDeptName(departments.getDeptName());
+ deptDo.setLeader("");
+ deptDo.setParentId(departments.getParentId().toString());
+ return deptDo;
+ }
+ return null;
+ }
+
+ @Override
+ public List getDeptsByUser(String userId) {
+ return systemUserMapper.getUserDepts(userId);
+ }
+
+ @Override
+ public List getSysAllDepts() {
+ try {
+ return systemDeptMapper.selectList(null).stream()
+ .map(d -> new DeptDo(d.getDeptId().toString(), d.getDeptName(), d.getLeader(), d.getParentId().toString()))
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public List getSysAllUserDepts() {
+ try {
+ return systemUserMapper.selectList(null).stream()
+ .map(d -> new UserDeptDo(d.getUserId(), d.getDepartment()))
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public List getSubDeptById(String parentId) {
+ return systemDeptMapper.selectByDept(parentId);
+ }
+
+ @Override
+ public List getRecursiveSubDept(String parentId) {
+ List list = new ArrayList<>();
+ loadSubDept(parentId, list);
+ return list;
+ }
+
+ /**
+ * 递归加载所有子部门
+ * @param parentId 父部门ID
+ * @param subDepts 所有子部门缓存
+ */
+ private void loadSubDept(String parentId, List subDepts){
+ List departments = systemDeptMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(SystemDept::getParentId, parentId));
+ subDepts.addAll(departments.stream().map(SystemDept::getDeptId).collect(Collectors.toList()).stream().map(Object::toString).collect(Collectors.toList()));
+ departments.forEach(d -> loadSubDept(d.getDeptId().toString(), subDepts));
+ }
+
+ @Override
+ public List getSysAllRoles() {
+ try {
+ return systemRoleMapper.selectList(null).stream()
+ .map(r -> new RoleDo(r.getRoleId().toString(), r.getRoleName()))
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public Set getUsersByRoles(List roles) {
+ return systemUserRoleMapper.selectList(new LambdaQueryWrapper()
+ .select(SystemUserRole::getUserId)
+ .in(SystemUserRole::getRoleId, roles)).stream()
+ .map(SystemUserRole::getUserId).collect(Collectors.toSet());
+ }
+
+ @Override
+ public String getUserSign(String userId) {
+ return systemUserMapper.selectById(userId).getUserId();
+ }
+
+ @Override
+ public void updateUserSign(String userId, String signature) {
+
+ }
+
+ @Override
+ public UserVo getUserDetail(String userId) {
+ return null;
+ }
+
+ @Override
+ public Map getUserDeptInfos(Collection userDeptIds) {
+ return systemUserMapper.getUserDepInfosBatch(userDeptIds)
+ .stream().collect(Collectors.toMap(UserDeptDo::getUserId, v -> v));
+ }
+}
diff --git a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java
index 15e4e1b..b9afe63 100644
--- a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java
+++ b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java
@@ -92,6 +92,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/project/workerAttendance/add").permitAll()
.antMatchers("/jwt/sso").permitAll()
.antMatchers("/xmgl/systemUser/ssoLogin").permitAll()
+ .antMatchers("/wflow/**").permitAll()
+ .antMatchers("/oa/**").permitAll()
+ .antMatchers("/sys/auth/**").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
.anyRequest().authenticated() // 剩下所有的验证都需要验证
.and()