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