diff --git a/pom.xml b/pom.xml
index d061eb951..5e764e91c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -807,6 +807,66 @@
mpxj
10.11.0
+
+
+ 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
+
+
+
+
+
+ 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
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.40
+
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 000000000..6bb6f82d7
--- /dev/null
+++ b/src/main/java/com/zhgd/config/DataSourceOneConfig.java
@@ -0,0 +1,57 @@
+package com.zhgd.config;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.logging.stdout.StdOutImpl;
+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")
+ public DataSource db1DataSource() {
+ return DataSourceBuilder.create().build();
+ }
+
+ @Bean
+ @Lazy //这个是懒加载的注解,根据自己项目需要看是否添加
+ public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
+ MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
+ bean.setDataSource(dataSource);
+ //开启驼峰
+ MybatisConfiguration configuration = new MybatisConfiguration();
+ configuration.setMapUnderscoreToCamelCase(true);
+ configuration.setLogImpl(StdOutImpl.class);
+ bean.setConfiguration(configuration);
+ bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/zhgd/xmgl/**/*.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 000000000..31a747580
--- /dev/null
+++ b/src/main/java/com/zhgd/config/DataSourceTwoConfig.java
@@ -0,0 +1,54 @@
+package com.zhgd.config;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.logging.stdout.StdOutImpl;
+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.Primary;
+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 {
+
+ @Primary
+ @Bean(name = "dataSource2")
+ @ConfigurationProperties(prefix = "spring.datasource.db2")
+ public DataSource dataSource() {
+ return DataSourceBuilder.create().build();
+ }
+
+ @Primary
+ @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);
+ configuration.setLogImpl(StdOutImpl.class);
+ 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/modules/basicdata/mapper/CompanyMapper.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java
index 855fe6080..79fd4e92e 100644
--- a/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/mapper/CompanyMapper.java
@@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.basicdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.wflow.bean.vo.OrgTreeVo;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
@@ -51,4 +52,12 @@ public interface CompanyMapper extends BaseMapper {
*/
Company getHeadquarterCompany(Map map);
+ /**
+ * 查询某部门下的子部门列表
+ *
+ * @param deptId 父部门
+ * @return 子部门列表,type字段固定返回固定值 dept
+ */
+ @Select("SELECT company_sn id, company_name `name`, 'dept' AS 'type' FROM company 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 26e695357..0630b129e 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
@@ -3,6 +3,9 @@ package com.zhgd.xmgl.modules.basicdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import org.apache.ibatis.annotations.Mapper;
@@ -57,4 +60,37 @@ public interface SystemUserMapper extends BaseMapper {
List getTenantListBySn(Map map);
+ /**
+ * 查询该部门下的所有用户
+ *
+ * @param deptId 部门ID
+ * @return 用户列表 type为固定值user
+ */
+ @Select("SELECT user_id id, real_name `name`, 'user' AS 'type', avatar " +
+ "FROM system_user" +
+ " WHERE sn = #{deptId}")
+ List selectUsersByDept(@Param("deptId") String deptId);
+
+ /**
+ * 查询指定用户所在的部门,一个用户可能同时在多个部门下
+ *
+ * @param userId 用户ID
+ * @return 用户所在的部门列表
+ */
+ @Select("SELECT d.company_sn id, d.company_name FROM system_user u, company d WHERE u.sn = d.company_sn 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 000000000..1b797a165
--- /dev/null
+++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/FlowOrgRepositoryServiceImpl.java
@@ -0,0 +1,202 @@
+package com.zhgd.xmgl.modules.basicdata.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.BaseRoleUser;
+import com.zhgd.xmgl.modules.basicdata.entity.Company;
+import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
+import com.zhgd.xmgl.modules.basicdata.mapper.BaseRoleMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.BaseRoleUserMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
+import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
+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 BaseRoleUserMapper baseRoleUserMapper;
+
+ @Autowired
+ private BaseRoleMapper systemRoleMapper;
+
+ @Autowired
+ private CompanyMapper companyMapper;
+
+ @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().toString());
+ 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().toString(), 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(Object::toString)
+ .collect(Collectors.toSet());
+ } catch (Exception e) {
+ return Collections.emptySet();
+ }
+ }
+
+ @Override
+ public DeptDo getDeptById(String deptId) {
+ Company departments = companyMapper.selectOne(Wrappers.lambdaQuery().eq(Company::getCompanySn, deptId));
+ if (Objects.nonNull(departments)) {
+ DeptDo deptDo = new DeptDo();
+ deptDo.setId(departments.getCompanySn().toString());
+ deptDo.setDeptName(departments.getCompanyName());
+ 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 companyMapper.selectList(null).stream()
+ .map(d -> new DeptDo(d.getCompanySn().toString(), d.getCompanyName(), "", 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().toString(), d.getDepartment()))
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ return Collections.emptyList();
+ }
+ }
+
+ @Override
+ public List getSubDeptById(String parentId) {
+ return companyMapper.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 = companyMapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(Company::getParentId, parentId));
+ subDepts.addAll(departments.stream().map(Company::getCompanySn).collect(Collectors.toList()).stream().map(Object::toString).collect(Collectors.toList()));
+ departments.forEach(d -> loadSubDept(d.getCompanySn().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 baseRoleUserMapper.selectList(new LambdaQueryWrapper()
+ .select(BaseRoleUser::getUserId)
+ .in(BaseRoleUser::getRoleId, roles)).stream()
+ .map(Object::toString).collect(Collectors.toSet());
+ }
+
+ @Override
+ public String getUserSign(String userId) {
+ return systemUserMapper.selectById(userId).getUserId().toString();
+ }
+
+ @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/resources/application-gsx-other-env-show.properties b/src/main/resources/application-gsx-other-env-show.properties
index aaee2e504..284ff7cf6 100644
--- a/src/main/resources/application-gsx-other-env-show.properties
+++ b/src/main/resources/application-gsx-other-env-show.properties
@@ -6,10 +6,15 @@ http.port=23912
#spring.datasource.url=jdbc:mysql://139.9.66.234:3386/wisdomsite_ty?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
#spring.datasource.url=jdbc:mysql://182.90.224.237:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
#spring.datasource.url=jdbc:mysql://139.9.66.234:3306/wisdomsite?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
-spring.datasource.url=jdbc:mysql://192.168.34.221:3306/wisdomsite_other_env_show?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
-spring.datasource.username=ENC(XR4C/hvTYCUqudS49Wh/jA==)
+spring.datasource.db1.jdbc-url=jdbc:mysql://192.168.34.221:3306/wisdomsite_other_env_show?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false
+spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.db1.username=ENC(XR4C/hvTYCUqudS49Wh/jA==)
#spring.datasource.password=ENC(hHkiHEc6vSWjqfOtg2/2Uiihs0vX3l7V)
-spring.datasource.password=ENC(LsKaVL2ycDu+uUNoPndYLA==)
+spring.datasource.db1.password=ENC(LsKaVL2ycDu+uUNoPndYLA==)
+spring.datasource.db2.jdbc-url=jdbc:mysql://192.168.34.155:3306/wflow_pro?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
+spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.db2.username=root
+spring.datasource.db2.password=root
server.port=19111
#server.port=30246
basePath=C:/jxj/prod/backEnd/itbgpImage/
diff --git a/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar b/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar
new file mode 100644
index 000000000..f6df5d9a2
Binary files /dev/null and b/src/main/resources/lib/wflow-server-1.0-SNAPSHOT.jar differ