123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155 |
- package org.jeecg.modules.system.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.google.common.base.Joiner;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang.StringUtils;
- import org.apache.shiro.SecurityUtils;
- import org.jeecg.common.api.dto.OnlineAuthDTO;
- import org.jeecg.common.api.dto.message.*;
- import org.jeecg.common.aspect.UrlMatchEnum;
- import org.jeecg.common.constant.CacheConstant;
- import org.jeecg.common.constant.CommonConstant;
- import org.jeecg.common.constant.DataBaseConstant;
- import org.jeecg.common.constant.WebsocketConst;
- import org.jeecg.common.exception.JeecgBootException;
- import org.jeecg.common.system.api.ISysBaseAPI;
- import org.jeecg.common.system.query.QueryGenerator;
- import org.jeecg.common.system.vo.*;
- import org.jeecg.common.util.SysAnnmentTypeEnum;
- import org.jeecg.common.util.YouBianCodeUtil;
- import org.jeecg.common.util.oConvertUtils;
- import org.jeecg.modules.message.entity.SysMessageTemplate;
- import org.jeecg.modules.message.handle.impl.EmailSendMsgHandle;
- import org.jeecg.modules.message.service.ISysMessageTemplateService;
- import org.jeecg.modules.message.websocket.WebSocket;
- import org.jeecg.modules.system.entity.*;
- import org.jeecg.modules.system.mapper.*;
- import org.jeecg.modules.system.service.*;
- import org.jeecg.modules.system.util.SecurityUtil;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
- import org.springframework.util.AntPathMatcher;
- import org.springframework.util.PathMatcher;
- import javax.annotation.Resource;
- import javax.sql.DataSource;
- import java.sql.Connection;
- import java.sql.DatabaseMetaData;
- import java.sql.SQLException;
- import java.util.*;
- /**
- * @Description: 底层共通业务API,提供其他独立模块调用
- * @Author: scott
- * @Date:2019-4-20
- * @Version:V1.0
- */
- @Slf4j
- @Service
- public class SysBaseApiImpl implements ISysBaseAPI {
- /** 当前系统数据库类型 */
- private static String DB_TYPE = "";
- @Autowired
- private ISysMessageTemplateService sysMessageTemplateService;
- @Resource
- private SysLogMapper sysLogMapper;
- @Resource
- private SysUserMapper userMapper;
- @Resource
- private SysUserRoleMapper sysUserRoleMapper;
- @Autowired
- private ISysDepartService sysDepartService;
- @Autowired
- private ISysDictService sysDictService;
- @Resource
- private SysAnnouncementMapper sysAnnouncementMapper;
- @Resource
- private SysAnnouncementSendMapper sysAnnouncementSendMapper;
- @Resource
- private WebSocket webSocket;
- @Resource
- private SysRoleMapper roleMapper;
- @Resource
- private SysDepartMapper departMapper;
- @Resource
- private SysCategoryMapper categoryMapper;
- @Autowired
- private ISysDataSourceService dataSourceService;
- @Autowired
- private ISysUserDepartService sysUserDepartService;
- @Resource
- private SysPermissionMapper sysPermissionMapper;
- @Autowired
- private ISysPermissionDataRuleService sysPermissionDataRuleService;
- @Autowired
- private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
- @Autowired
- private ThirdAppDingtalkServiceImpl dingtalkService;
- @Autowired
- ISysCategoryService sysCategoryService;
- @Override
- @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username")
- public LoginUser getUserByName(String username) {
- if(oConvertUtils.isEmpty(username)) {
- return null;
- }
- LoginUser loginUser = new LoginUser();
- SysUser sysUser = userMapper.getUserByName(username);
- if(sysUser==null) {
- return null;
- }
- BeanUtils.copyProperties(sysUser, loginUser);
- return loginUser;
- }
- @Override
- public String translateDictFromTable(String table, String text, String code, String key) {
- return sysDictService.queryTableDictTextByKey(table, text, code, key);
- }
- @Override
- public String translateDict(String code, String key) {
- return sysDictService.queryDictTextByKey(code, key);
- }
- @Override
- public List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username) {
- List<SysPermission> currentSyspermission = null;
- if(oConvertUtils.isNotEmpty(component)) {
- //1.通过注解属性pageComponent 获取菜单
- LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
- query.eq(SysPermission::getDelFlag,0);
- query.eq(SysPermission::getComponent, component);
- currentSyspermission = sysPermissionMapper.selectList(query);
- }else {
- //1.直接通过前端请求地址查询菜单
- LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
- query.eq(SysPermission::getMenuType,2);
- query.eq(SysPermission::getDelFlag,0);
- query.eq(SysPermission::getUrl, requestPath);
- currentSyspermission = sysPermissionMapper.selectList(query);
- //2.未找到 再通过自定义匹配URL 获取菜单
- if(currentSyspermission==null || currentSyspermission.size()==0) {
- //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制)
- String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath);
- LambdaQueryWrapper<SysPermission> queryQserMatch = new LambdaQueryWrapper<SysPermission>();
- queryQserMatch.eq(SysPermission::getMenuType, 1);
- queryQserMatch.eq(SysPermission::getDelFlag, 0);
- queryQserMatch.eq(SysPermission::getUrl, userMatchUrl);
- if(oConvertUtils.isNotEmpty(userMatchUrl)){
- currentSyspermission = sysPermissionMapper.selectList(queryQserMatch);
- }
- }
- //3.未找到 再通过正则匹配获取菜单
- if(currentSyspermission==null || currentSyspermission.size()==0) {
- //通过正则匹配权限配置
- String regUrl = getRegexpUrl(requestPath);
- if(regUrl!=null) {
- currentSyspermission = sysPermissionMapper.selectList(new LambdaQueryWrapper<SysPermission>().eq(SysPermission::getMenuType,2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag,0));
- }
- }
- }
- if(currentSyspermission!=null && currentSyspermission.size()>0){
- List<SysPermissionDataRuleModel> dataRules = new ArrayList<SysPermissionDataRuleModel>();
- for (SysPermission sysPermission : currentSyspermission) {
- // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722
- List<SysPermissionDataRule> temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId());
- if(temp!=null && temp.size()>0) {
- //dataRules.addAll(temp);
- dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class);
- }
- // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722
- }
- return dataRules;
- }
- return null;
- }
- /**
- * 匹配前端传过来的地址 匹配成功返回正则地址
- * AntPathMatcher匹配地址
- *()* 匹配0个或多个字符
- *()**匹配0个或多个目录
- */
- private String getRegexpUrl(String url) {
- List<String> list = sysPermissionMapper.queryPermissionUrlWithStar();
- if(list!=null && list.size()>0) {
- for (String p : list) {
- PathMatcher matcher = new AntPathMatcher();
- if(matcher.match(p, url)) {
- return p;
- }
- }
- }
- return null;
- }
- @Override
- public SysUserCacheInfo getCacheUser(String username) {
- SysUserCacheInfo info = new SysUserCacheInfo();
- info.setOneDepart(true);
- LoginUser user = this.getUserByName(username);
- if(user!=null) {
- info.setSysUserCode(user.getUsername());
- info.setSysUserName(user.getRealname());
- info.setSysOrgCode(user.getOrgCode());
- }else{
- return null;
- }
- //多部门支持in查询
- List<SysDepart> list = departMapper.queryUserDeparts(user.getId());
- List<String> sysMultiOrgCode = new ArrayList<String>();
- if(list==null || list.size()==0) {
- //当前用户无部门
- //sysMultiOrgCode.add("0");
- }else if(list.size()==1) {
- sysMultiOrgCode.add(list.get(0).getOrgCode());
- }else {
- info.setOneDepart(false);
- for (SysDepart dpt : list) {
- sysMultiOrgCode.add(dpt.getOrgCode());
- }
- }
- info.setSysMultiOrgCode(sysMultiOrgCode);
- return info;
- }
- @Override
- public LoginUser getUserById(String id) {
- if(oConvertUtils.isEmpty(id)) {
- return null;
- }
- LoginUser loginUser = new LoginUser();
- SysUser sysUser = userMapper.selectById(id);
- if(sysUser==null) {
- return null;
- }
- BeanUtils.copyProperties(sysUser, loginUser);
- return loginUser;
- }
- @Override
- public List<String> getRolesByUsername(String username) {
- return sysUserRoleMapper.getRoleByUserName(username);
- }
- @Override
- public List<String> getDepartIdsByUsername(String username) {
- List<SysDepart> list = sysDepartService.queryDepartsByUsername(username);
- List<String> result = new ArrayList<>(list.size());
- for (SysDepart depart : list) {
- result.add(depart.getId());
- }
- return result;
- }
- @Override
- public List<String> getDepartNamesByUsername(String username) {
- List<SysDepart> list = sysDepartService.queryDepartsByUsername(username);
- List<String> result = new ArrayList<>(list.size());
- for (SysDepart depart : list) {
- result.add(depart.getDepartName());
- }
- return result;
- }
- @Override
- public DictModel getParentDepartId(String departId) {
- SysDepart depart = departMapper.getParentDepartId(departId);
- DictModel model = new DictModel(depart.getId(),depart.getParentId());
- return model;
- }
- @Override
- @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code", unless = "#result == null ")
- public List<DictModel> queryDictItemsByCode(String code) {
- return sysDictService.queryDictItemsByCode(code);
- }
- @Override
- @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ")
- public List<DictModel> queryEnableDictItemsByCode(String code) {
- return sysDictService.queryEnableDictItemsByCode(code);
- }
- @Override
- public List<DictModel> queryTableDictItemsByCode(String table, String text, String code) {
- //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799
- if(table.indexOf("#{")>=0){
- table = QueryGenerator.getSqlRuleValue(table);
- }
- //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799
- return sysDictService.queryTableDictItemsByCode(table, text, code);
- }
- @Override
- public List<DictModel> queryAllDepartBackDictModel() {
- return sysDictService.queryAllDepartBackDictModel();
- }
- @Override
- public void sendSysAnnouncement(MessageDTO message) {
- this.sendSysAnnouncement(message.getFromUser(),
- message.getToUser(),
- message.getTitle(),
- message.getContent(),
- message.getCategory());
- try {
- // 同步发送第三方APP消息
- wechatEnterpriseService.sendMessage(message, true);
- dingtalkService.sendMessage(message, true);
- } catch (Exception e) {
- log.error("同步发送第三方APP消息失败!", e);
- }
- }
- @Override
- public void sendBusAnnouncement(BusMessageDTO message) {
- sendBusAnnouncement(message.getFromUser(),
- message.getToUser(),
- message.getTitle(),
- message.getContent(),
- message.getCategory(),
- message.getBusType(),
- message.getBusId());
- try {
- // 同步发送第三方APP消息
- wechatEnterpriseService.sendMessage(message, true);
- dingtalkService.sendMessage(message, true);
- } catch (Exception e) {
- log.error("同步发送第三方APP消息失败!", e);
- }
- }
- @Override
- public void sendTemplateAnnouncement(TemplateMessageDTO message) {
- String templateCode = message.getTemplateCode();
- String title = message.getTitle();
- Map<String,String> map = message.getTemplateParam();
- String fromUser = message.getFromUser();
- String toUser = message.getToUser();
- List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
- if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
- throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
- }
- SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
- //模板标题
- title = title==null?sysSmsTemplate.getTemplateName():title;
- //模板内容
- String content = sysSmsTemplate.getTemplateContent();
- if(map!=null) {
- for (Map.Entry<String, String> entry : map.entrySet()) {
- String str = "${" + entry.getKey() + "}";
- if(oConvertUtils.isNotEmpty(title)){
- title = title.replace(str, entry.getValue());
- }
- content = content.replace(str, entry.getValue());
- }
- }
- SysAnnouncement announcement = new SysAnnouncement();
- announcement.setTitile(title);
- announcement.setMsgContent(content);
- announcement.setSender(fromUser);
- announcement.setPriority(CommonConstant.PRIORITY_M);
- announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
- announcement.setSendStatus(CommonConstant.HAS_SEND);
- announcement.setSendTime(new Date());
- announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
- announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
- sysAnnouncementMapper.insert(announcement);
- // 2.插入用户通告阅读标记表记录
- String userId = toUser;
- String[] userIds = userId.split(",");
- String anntId = announcement.getId();
- for(int i=0;i<userIds.length;i++) {
- if(oConvertUtils.isNotEmpty(userIds[i])) {
- SysUser sysUser = userMapper.getUserByName(userIds[i]);
- if(sysUser==null) {
- continue;
- }
- SysAnnouncementSend announcementSend = new SysAnnouncementSend();
- announcementSend.setAnntId(anntId);
- announcementSend.setUserId(sysUser.getId());
- announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
- sysAnnouncementSendMapper.insert(announcementSend);
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
- obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
- obj.put(WebsocketConst.MSG_ID, announcement.getId());
- obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
- webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
- }
- }
- try {
- // 同步企业微信、钉钉的消息通知
- dingtalkService.sendActionCardMessage(announcement, true);
- wechatEnterpriseService.sendTextCardMessage(announcement, true);
- } catch (Exception e) {
- log.error("同步发送第三方APP消息失败!", e);
- }
- }
- @Override
- public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) {
- String templateCode = message.getTemplateCode();
- String title = message.getTitle();
- Map<String,String> map = message.getTemplateParam();
- String fromUser = message.getFromUser();
- String toUser = message.getToUser();
- String busId = message.getBusId();
- String busType = message.getBusType();
- List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
- if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
- throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
- }
- SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
- //模板标题
- title = title==null?sysSmsTemplate.getTemplateName():title;
- //模板内容
- String content = sysSmsTemplate.getTemplateContent();
- if(map!=null) {
- for (Map.Entry<String, String> entry : map.entrySet()) {
- String str = "${" + entry.getKey() + "}";
- title = title.replace(str, entry.getValue());
- content = content.replace(str, entry.getValue());
- }
- }
- SysAnnouncement announcement = new SysAnnouncement();
- announcement.setTitile(title);
- announcement.setMsgContent(content);
- announcement.setSender(fromUser);
- announcement.setPriority(CommonConstant.PRIORITY_M);
- announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
- announcement.setSendStatus(CommonConstant.HAS_SEND);
- announcement.setSendTime(new Date());
- announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
- announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
- announcement.setBusId(busId);
- announcement.setBusType(busType);
- announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
- announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
- sysAnnouncementMapper.insert(announcement);
- // 2.插入用户通告阅读标记表记录
- String userId = toUser;
- String[] userIds = userId.split(",");
- String anntId = announcement.getId();
- for(int i=0;i<userIds.length;i++) {
- if(oConvertUtils.isNotEmpty(userIds[i])) {
- SysUser sysUser = userMapper.getUserByName(userIds[i]);
- if(sysUser==null) {
- continue;
- }
- SysAnnouncementSend announcementSend = new SysAnnouncementSend();
- announcementSend.setAnntId(anntId);
- announcementSend.setUserId(sysUser.getId());
- announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
- sysAnnouncementSendMapper.insert(announcementSend);
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
- obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
- obj.put(WebsocketConst.MSG_ID, announcement.getId());
- obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
- webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
- }
- }
- try {
- // 同步企业微信、钉钉的消息通知
- dingtalkService.sendActionCardMessage(announcement, true);
- wechatEnterpriseService.sendTextCardMessage(announcement, true);
- } catch (Exception e) {
- log.error("同步发送第三方APP消息失败!", e);
- }
- }
- @Override
- public String parseTemplateByCode(TemplateDTO templateDTO) {
- String templateCode = templateDTO.getTemplateCode();
- Map<String, String> map = templateDTO.getTemplateParam();
- List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
- if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
- throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
- }
- SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
- //模板内容
- String content = sysSmsTemplate.getTemplateContent();
- if(map!=null) {
- for (Map.Entry<String, String> entry : map.entrySet()) {
- String str = "${" + entry.getKey() + "}";
- content = content.replace(str, entry.getValue());
- }
- }
- return content;
- }
- @Override
- public void updateSysAnnounReadFlag(String busType, String busId) {
- SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper<SysAnnouncement>().eq("bus_type",busType).eq("bus_id",busId));
- if(announcement != null){
- LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
- String userId = sysUser.getId();
- LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = new UpdateWrapper().lambda();
- updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG);
- updateWrapper.set(SysAnnouncementSend::getReadTime, new Date());
- updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'");
- SysAnnouncementSend announcementSend = new SysAnnouncementSend();
- sysAnnouncementSendMapper.update(announcementSend, updateWrapper);
- }
- }
- /**
- * 获取数据库类型
- * @param dataSource
- * @return
- * @throws SQLException
- */
- private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{
- if("".equals(DB_TYPE)) {
- Connection connection = dataSource.getConnection();
- try {
- DatabaseMetaData md = connection.getMetaData();
- String dbType = md.getDatabaseProductName().toLowerCase();
- if(dbType.indexOf("mysql")>=0) {
- DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL;
- }else if(dbType.indexOf("oracle")>=0) {
- DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE;
- }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) {
- DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER;
- }else if(dbType.indexOf("postgresql")>=0) {
- DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL;
- }else if(dbType.indexOf("mariadb")>=0) {
- DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB;
- }else {
- log.error("数据库类型:[" + dbType + "]不识别!");
- //throw new JeecgBootException("数据库类型:["+dbType+"]不识别!");
- }
- } catch (Exception e) {
- log.error(e.getMessage(), e);
- }finally {
- connection.close();
- }
- }
- return DB_TYPE;
- }
- @Override
- public List<DictModel> queryAllDict() {
- // 查询并排序
- QueryWrapper<SysDict> queryWrapper = new QueryWrapper<SysDict>();
- queryWrapper.orderByAsc("create_time");
- List<SysDict> dicts = sysDictService.list(queryWrapper);
- // 封装成 model
- List<DictModel> list = new ArrayList<DictModel>();
- for (SysDict dict : dicts) {
- list.add(new DictModel(dict.getDictCode(), dict.getDictName()));
- }
- return list;
- }
- @Override
- public List<SysCategoryModel> queryAllDSysCategory() {
- List<SysCategory> ls = categoryMapper.selectList(null);
- List<SysCategoryModel> res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class);
- return res;
- }
- @Override
- public List<DictModel> queryFilterTableDictInfo(String table, String text, String code, String filterSql) {
- return sysDictService.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
- }
- @Override
- public List<String> queryTableDictByKeys(String table, String text, String code, String[] keyArray) {
- return sysDictService.queryTableDictByKeys(table,text,code,Joiner.on(",").join(keyArray));
- }
- @Override
- public List<ComboModel> queryAllUserBackCombo() {
- List<ComboModel> list = new ArrayList<ComboModel>();
- List<SysUser> userList = userMapper.selectList(new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0));
- for(SysUser user : userList){
- ComboModel model = new ComboModel();
- model.setTitle(user.getRealname());
- model.setId(user.getId());
- model.setUsername(user.getUsername());
- list.add(model);
- }
- return list;
- }
- @Override
- public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) {
- JSONObject json = new JSONObject();
- QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
- List<ComboModel> list = new ArrayList<ComboModel>();
- Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
- IPage<SysUser> pageList = userMapper.selectPage(page, queryWrapper);
- for(SysUser user : pageList.getRecords()){
- ComboModel model = new ComboModel();
- model.setUsername(user.getUsername());
- model.setTitle(user.getRealname());
- model.setId(user.getId());
- model.setEmail(user.getEmail());
- if(oConvertUtils.isNotEmpty(userIds)){
- String[] temp = userIds.split(",");
- for(int i = 0; i<temp.length;i++){
- if(temp[i].equals(user.getId())){
- model.setChecked(true);
- }
- }
- }
- list.add(model);
- }
- json.put("list",list);
- json.put("total",pageList.getTotal());
- return json;
- }
- @Override
- public List<ComboModel> queryAllRole() {
- List<ComboModel> list = new ArrayList<ComboModel>();
- List<SysRole> roleList = roleMapper.selectList(new QueryWrapper<SysRole>());
- for(SysRole role : roleList){
- ComboModel model = new ComboModel();
- model.setTitle(role.getRoleName());
- model.setId(role.getId());
- list.add(model);
- }
- return list;
- }
- @Override
- public List<ComboModel> queryAllRole(String[] roleIds) {
- List<ComboModel> list = new ArrayList<ComboModel>();
- List<SysRole> roleList = roleMapper.selectList(new QueryWrapper<SysRole>());
- for(SysRole role : roleList){
- ComboModel model = new ComboModel();
- model.setTitle(role.getRoleName());
- model.setId(role.getId());
- model.setRoleCode(role.getRoleCode());
- if(oConvertUtils.isNotEmpty(roleIds)) {
- for (int i = 0; i < roleIds.length; i++) {
- if (roleIds[i].equals(role.getId())) {
- model.setChecked(true);
- }
- }
- }
- list.add(model);
- }
- return list;
- }
- @Override
- public List<String> getRoleIdsByUsername(String username) {
- return sysUserRoleMapper.getRoleIdByUserName(username);
- }
- @Override
- public String getDepartIdsByOrgCode(String orgCode) {
- return departMapper.queryDepartIdByOrgCode(orgCode);
- }
- @Override
- public List<SysDepartModel> getAllSysDepart() {
- List<SysDepartModel> departModelList = new ArrayList<SysDepartModel>();
- List<SysDepart> departList = departMapper.selectList(new QueryWrapper<SysDepart>().eq("del_flag","0"));
- for(SysDepart depart : departList){
- SysDepartModel model = new SysDepartModel();
- BeanUtils.copyProperties(depart,model);
- departModelList.add(model);
- }
- return departModelList;
- }
- @Override
- public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) {
- SysDataSource dbSource = dataSourceService.getById(dbSourceId);
- if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){
- String dbPassword = dbSource.getDbPassword();
- String decodedStr = SecurityUtil.jiemi(dbPassword);
- dbSource.setDbPassword(decodedStr);
- }
- return new DynamicDataSourceModel(dbSource);
- }
- @Override
- public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) {
- SysDataSource dbSource = dataSourceService.getOne(new LambdaQueryWrapper<SysDataSource>().eq(SysDataSource::getCode, dbSourceCode));
- if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){
- String dbPassword = dbSource.getDbPassword();
- String decodedStr = SecurityUtil.jiemi(dbPassword);
- dbSource.setDbPassword(decodedStr);
- }
- return new DynamicDataSourceModel(dbSource);
- }
- @Override
- public List<String> getDeptHeadByDepId(String deptId) {
- List<SysUser> userList = userMapper.selectList(new QueryWrapper<SysUser>().like("depart_ids",deptId).eq("status",1).eq("del_flag",0));
- List<String> list = new ArrayList<>();
- for(SysUser user : userList){
- list.add(user.getUsername());
- }
- return list;
- }
- @Override
- public void sendWebSocketMsg(String[] userIds, String cmd) {
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, cmd);
- webSocket.sendMessage(userIds, obj.toJSONString());
- }
- @Override
- public List<LoginUser> queryAllUserByIds(String[] userIds) {
- QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
- queryWrapper.in("id",userIds);
- List<LoginUser> loginUsers = new ArrayList<>();
- List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
- for (SysUser user:sysUsers) {
- LoginUser loginUser=new LoginUser();
- BeanUtils.copyProperties(user, loginUser);
- loginUsers.add(loginUser);
- }
- return loginUsers;
- }
- /**
- * 推送签到人员信息
- * @param userId
- */
- @Override
- public void meetingSignWebsocket(String userId) {
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN);
- obj.put(WebsocketConst.MSG_USER_ID,userId);
- //TODO 目前全部推送,后面修改
- webSocket.sendMessage(obj.toJSONString());
- }
- @Override
- public List<LoginUser> queryUserByNames(String[] userNames) {
- QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
- queryWrapper.in("username",userNames);
- List<LoginUser> loginUsers = new ArrayList<>();
- List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
- for (SysUser user:sysUsers) {
- LoginUser loginUser=new LoginUser();
- BeanUtils.copyProperties(user, loginUser);
- loginUsers.add(loginUser);
- }
- return loginUsers;
- }
- @Override
- public SysDepartModel selectAllById(String id) {
- SysDepart sysDepart = sysDepartService.getById(id);
- SysDepartModel sysDepartModel = new SysDepartModel();
- BeanUtils.copyProperties(sysDepart,sysDepartModel);
- return sysDepartModel;
- }
- @Override
- public List<String> queryDeptUsersByUserId(String userId) {
- List<String> userIds = new ArrayList<>();
- List<SysUserDepart> userDepartList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().eq("user_id",userId));
- if(userDepartList != null){
- //查找所属公司
- String orgCodes = "";
- for(SysUserDepart userDepart : userDepartList){
- //查询所属公司编码
- SysDepart depart = sysDepartService.getById(userDepart.getDepId());
- int length = YouBianCodeUtil.zhanweiLength;
- String compyOrgCode = "";
- if(depart != null && depart.getOrgCode() != null){
- compyOrgCode = depart.getOrgCode().substring(0,length);
- if(orgCodes.indexOf(compyOrgCode) == -1){
- orgCodes = orgCodes + "," + compyOrgCode;
- }
- }
- }
- if(oConvertUtils.isNotEmpty(orgCodes)){
- orgCodes = orgCodes.substring(1);
- List<String> listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(","));
- List<SysUserDepart> userList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().in("dep_id",listIds));
- for(SysUserDepart userDepart : userList){
- if(!userIds.contains(userDepart.getUserId())){
- userIds.add(userDepart.getUserId());
- }
- }
- }
- }
- return userIds;
- }
- /**
- * 查询用户拥有的角色集合
- * @param username
- * @return
- */
- @Override
- public Set<String> getUserRoleSet(String username) {
- // 查询用户拥有的角色集合
- List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
- log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
- return new HashSet<>(roles);
- }
- /**
- * 查询用户拥有的权限集合
- * @param username
- * @return
- */
- @Override
- public Set<String> getUserPermissionSet(String username) {
- Set<String> permissionSet = new HashSet<>();
- List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
- for (SysPermission po : permissionList) {
- // // TODO URL规则有问题?
- // if (oConvertUtils.isNotEmpty(po.getUrl())) {
- // permissionSet.add(po.getUrl());
- // }
- if (oConvertUtils.isNotEmpty(po.getPerms())) {
- permissionSet.add(po.getPerms());
- }
- }
- log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) );
- return permissionSet;
- }
- /**
- * 判断online菜单是否有权限
- * @param onlineAuthDTO
- * @return
- */
- @Override
- public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) {
- String username = onlineAuthDTO.getUsername();
- List<String> possibleUrl = onlineAuthDTO.getPossibleUrl();
- String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl();
- //查询菜单
- LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
- query.eq(SysPermission::getDelFlag, 0);
- query.in(SysPermission::getUrl, possibleUrl);
- List<SysPermission> permissionList = sysPermissionMapper.selectList(query);
- if (permissionList == null || permissionList.size() == 0) {
- //没有配置菜单 找online表单菜单地址
- SysPermission sysPermission = new SysPermission();
- sysPermission.setUrl(onlineFormUrl);
- int count = sysPermissionMapper.queryCountByUsername(username, sysPermission);
- if(count<=0){
- return false;
- }
- } else {
- //找到菜单了
- boolean has = false;
- for (SysPermission p : permissionList) {
- int count = sysPermissionMapper.queryCountByUsername(username, p);
- has = has || (count>0);
- }
- return has;
- }
- return true;
- }
- /**
- * 查询用户拥有的角色集合 common api 里面的接口实现
- * @param username
- * @return
- */
- @Override
- public Set<String> queryUserRoles(String username) {
- return getUserRoleSet(username);
- }
- /**
- * 查询用户拥有的权限集合 common api 里面的接口实现
- * @param username
- * @return
- */
- @Override
- public Set<String> queryUserAuths(String username) {
- return getUserPermissionSet(username);
- }
- /**
- * 36根据多个用户账号(逗号分隔),查询返回多个用户信息
- * @param usernames
- * @return
- */
- @Override
- public List<JSONObject> queryUsersByUsernames(String usernames) {
- LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(SysUser::getUsername,usernames.split(","));
- return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class);
- }
- @Override
- public List<JSONObject> queryUsersByIds(String ids) {
- LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(SysUser::getId,ids.split(","));
- return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class);
- }
- /**
- * 37根据多个部门编码(逗号分隔),查询返回多个部门信息
- * @param orgCodes
- * @return
- */
- @Override
- public List<JSONObject> queryDepartsByOrgcodes(String orgCodes) {
- LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(SysDepart::getOrgCode,orgCodes.split(","));
- return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class);
- }
- @Override
- public List<JSONObject> queryDepartsByIds(String ids) {
- LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(SysDepart::getId,ids.split(","));
- return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class);
- }
- /**
- * 发消息
- * @param fromUser
- * @param toUser
- * @param title
- * @param msgContent
- * @param setMsgCategory
- */
- private void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) {
- SysAnnouncement announcement = new SysAnnouncement();
- announcement.setTitile(title);
- announcement.setMsgContent(msgContent);
- announcement.setSender(fromUser);
- announcement.setPriority(CommonConstant.PRIORITY_M);
- announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
- announcement.setSendStatus(CommonConstant.HAS_SEND);
- announcement.setSendTime(new Date());
- announcement.setMsgCategory(setMsgCategory);
- announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
- sysAnnouncementMapper.insert(announcement);
- // 2.插入用户通告阅读标记表记录
- String userId = toUser;
- String[] userIds = userId.split(",");
- String anntId = announcement.getId();
- for(int i=0;i<userIds.length;i++) {
- if(oConvertUtils.isNotEmpty(userIds[i])) {
- SysUser sysUser = userMapper.getUserByName(userIds[i]);
- if(sysUser==null) {
- continue;
- }
- SysAnnouncementSend announcementSend = new SysAnnouncementSend();
- announcementSend.setAnntId(anntId);
- announcementSend.setUserId(sysUser.getId());
- announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
- sysAnnouncementSendMapper.insert(announcementSend);
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
- obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
- obj.put(WebsocketConst.MSG_ID, announcement.getId());
- obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
- webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
- }
- }
- }
- /**
- * 发消息 带业务参数
- * @param fromUser
- * @param toUser
- * @param title
- * @param msgContent
- * @param setMsgCategory
- * @param busType
- * @param busId
- */
- private void sendBusAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory, String busType, String busId) {
- SysAnnouncement announcement = new SysAnnouncement();
- announcement.setTitile(title);
- announcement.setMsgContent(msgContent);
- announcement.setSender(fromUser);
- announcement.setPriority(CommonConstant.PRIORITY_M);
- announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
- announcement.setSendStatus(CommonConstant.HAS_SEND);
- announcement.setSendTime(new Date());
- announcement.setMsgCategory(setMsgCategory);
- announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
- announcement.setBusId(busId);
- announcement.setBusType(busType);
- announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
- announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
- sysAnnouncementMapper.insert(announcement);
- // 2.插入用户通告阅读标记表记录
- String userId = toUser;
- String[] userIds = userId.split(",");
- String anntId = announcement.getId();
- for(int i=0;i<userIds.length;i++) {
- if(oConvertUtils.isNotEmpty(userIds[i])) {
- SysUser sysUser = userMapper.getUserByName(userIds[i]);
- if(sysUser==null) {
- continue;
- }
- SysAnnouncementSend announcementSend = new SysAnnouncementSend();
- announcementSend.setAnntId(anntId);
- announcementSend.setUserId(sysUser.getId());
- announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
- sysAnnouncementSendMapper.insert(announcementSend);
- JSONObject obj = new JSONObject();
- obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
- obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
- obj.put(WebsocketConst.MSG_ID, announcement.getId());
- obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
- webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
- }
- }
- }
- /**
- * 发送邮件消息
- * @param email
- * @param title
- * @param content
- */
- @Override
- public void sendEmailMsg(String email, String title, String content) {
- EmailSendMsgHandle emailHandle=new EmailSendMsgHandle();
- emailHandle.SendMsg(email, title, content);
- }
- /**
- * 获取公司下级部门和所有用户id信息
- * @param orgCode
- * @return
- */
- @Override
- public List<Map> getDeptUserByOrgCode(String orgCode) {
- //1.获取公司信息
- SysDepart comp=sysDepartService.queryCompByOrgCode(orgCode);
- if(comp!=null){
- //2.获取公司下级部门
- List<SysDepart> departs=sysDepartService.queryDeptByPid(comp.getId());
- //3.获取部门下的人员信息
- List<Map> list=new ArrayList();
- //4.处理部门和下级用户数据
- for (SysDepart dept:departs) {
- Map map=new HashMap();
- //部门名称
- String departName = dept.getDepartName();
- //根据部门编码获取下级部门id
- List<String> listIds = departMapper.getSubDepIdsByDepId(dept.getId());
- //根据下级部门ids获取下级部门的所有用户
- List<SysUserDepart> userList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().in("dep_id",listIds));
- List<String> userIds = new ArrayList<>();
- for(SysUserDepart userDepart : userList){
- if(!userIds.contains(userDepart.getUserId())){
- userIds.add(userDepart.getUserId());
- }
- }
- map.put("name",departName);
- map.put("ids",userIds);
- list.add(map);
- }
- return list;
- }
- return null;
- }
- /**
- * 查询分类字典翻译
- *
- * @param ids 分类字典表id
- * @return
- */
- @Override
- public List<String> loadCategoryDictItem(String ids) {
- return sysCategoryService.loadDictItem(ids, false);
- }
- /**
- * 根据字典code加载字典text
- *
- * @param dictCode 顺序:tableName,text,code
- * @param keys 要查询的key
- * @return
- */
- @Override
- public List<String> loadDictItem(String dictCode, String keys) {
- String[] params = dictCode.split(",");
- return sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, false);
- }
- /**
- * 根据字典code查询字典项
- *
- * @param dictCode 顺序:tableName,text,code
- * @param dictCode 要查询的key
- * @return
- */
- @Override
- public List<DictModel> getDictItems(String dictCode) {
- List<DictModel> ls = sysDictService.getDictItems(dictCode);
- if (ls == null) {
- ls = new ArrayList<>();
- }
- return ls;
- }
- /**
- * 根据多个字典code查询多个字典项
- *
- * @param dictCodeList
- * @return key = dictCode ; value=对应的字典项
- */
- @Override
- public Map<String, List<DictModel>> getManyDictItems(List<String> dictCodeList) {
- return sysDictService.queryDictItemsByCodeList(dictCodeList);
- }
- /**
- * 【下拉搜索】
- * 大数据量的字典表 走异步加载,即前端输入内容过滤数据
- *
- * @param dictCode 字典code格式:table,text,code
- * @param keyword 过滤关键字
- * @return
- */
- @Override
- public List<DictModel> loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) {
- return sysDictService.loadDict(dictCode, keyword, pageSize);
- }
- @Override
- public Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys) {
- List<String> dictCodeList = Arrays.asList(dictCodes.split(","));
- List<String> values = Arrays.asList(keys.split(","));
- return sysDictService.queryManyDictByKeys(dictCodeList, values);
- }
- @Override
- public List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys) {
- return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(",")));
- }
- }
|