e8e3f8fb028c30de8a6c33d781a03976a870dd54.svn-base 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155
  1. package org.jeecg.modules.system.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  7. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  8. import com.baomidou.mybatisplus.core.metadata.IPage;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.google.common.base.Joiner;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.apache.shiro.SecurityUtils;
  14. import org.jeecg.common.api.dto.OnlineAuthDTO;
  15. import org.jeecg.common.api.dto.message.*;
  16. import org.jeecg.common.aspect.UrlMatchEnum;
  17. import org.jeecg.common.constant.CacheConstant;
  18. import org.jeecg.common.constant.CommonConstant;
  19. import org.jeecg.common.constant.DataBaseConstant;
  20. import org.jeecg.common.constant.WebsocketConst;
  21. import org.jeecg.common.exception.JeecgBootException;
  22. import org.jeecg.common.system.api.ISysBaseAPI;
  23. import org.jeecg.common.system.query.QueryGenerator;
  24. import org.jeecg.common.system.vo.*;
  25. import org.jeecg.common.util.SysAnnmentTypeEnum;
  26. import org.jeecg.common.util.YouBianCodeUtil;
  27. import org.jeecg.common.util.oConvertUtils;
  28. import org.jeecg.modules.message.entity.SysMessageTemplate;
  29. import org.jeecg.modules.message.handle.impl.EmailSendMsgHandle;
  30. import org.jeecg.modules.message.service.ISysMessageTemplateService;
  31. import org.jeecg.modules.message.websocket.WebSocket;
  32. import org.jeecg.modules.system.entity.*;
  33. import org.jeecg.modules.system.mapper.*;
  34. import org.jeecg.modules.system.service.*;
  35. import org.jeecg.modules.system.util.SecurityUtil;
  36. import org.springframework.beans.BeanUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.cache.annotation.Cacheable;
  39. import org.springframework.stereotype.Service;
  40. import org.springframework.util.AntPathMatcher;
  41. import org.springframework.util.PathMatcher;
  42. import javax.annotation.Resource;
  43. import javax.sql.DataSource;
  44. import java.sql.Connection;
  45. import java.sql.DatabaseMetaData;
  46. import java.sql.SQLException;
  47. import java.util.*;
  48. /**
  49. * @Description: 底层共通业务API,提供其他独立模块调用
  50. * @Author: scott
  51. * @Date:2019-4-20
  52. * @Version:V1.0
  53. */
  54. @Slf4j
  55. @Service
  56. public class SysBaseApiImpl implements ISysBaseAPI {
  57. /** 当前系统数据库类型 */
  58. private static String DB_TYPE = "";
  59. @Autowired
  60. private ISysMessageTemplateService sysMessageTemplateService;
  61. @Resource
  62. private SysLogMapper sysLogMapper;
  63. @Resource
  64. private SysUserMapper userMapper;
  65. @Resource
  66. private SysUserRoleMapper sysUserRoleMapper;
  67. @Autowired
  68. private ISysDepartService sysDepartService;
  69. @Autowired
  70. private ISysDictService sysDictService;
  71. @Resource
  72. private SysAnnouncementMapper sysAnnouncementMapper;
  73. @Resource
  74. private SysAnnouncementSendMapper sysAnnouncementSendMapper;
  75. @Resource
  76. private WebSocket webSocket;
  77. @Resource
  78. private SysRoleMapper roleMapper;
  79. @Resource
  80. private SysDepartMapper departMapper;
  81. @Resource
  82. private SysCategoryMapper categoryMapper;
  83. @Autowired
  84. private ISysDataSourceService dataSourceService;
  85. @Autowired
  86. private ISysUserDepartService sysUserDepartService;
  87. @Resource
  88. private SysPermissionMapper sysPermissionMapper;
  89. @Autowired
  90. private ISysPermissionDataRuleService sysPermissionDataRuleService;
  91. @Autowired
  92. private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
  93. @Autowired
  94. private ThirdAppDingtalkServiceImpl dingtalkService;
  95. @Autowired
  96. ISysCategoryService sysCategoryService;
  97. @Override
  98. @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username")
  99. public LoginUser getUserByName(String username) {
  100. if(oConvertUtils.isEmpty(username)) {
  101. return null;
  102. }
  103. LoginUser loginUser = new LoginUser();
  104. SysUser sysUser = userMapper.getUserByName(username);
  105. if(sysUser==null) {
  106. return null;
  107. }
  108. BeanUtils.copyProperties(sysUser, loginUser);
  109. return loginUser;
  110. }
  111. @Override
  112. public String translateDictFromTable(String table, String text, String code, String key) {
  113. return sysDictService.queryTableDictTextByKey(table, text, code, key);
  114. }
  115. @Override
  116. public String translateDict(String code, String key) {
  117. return sysDictService.queryDictTextByKey(code, key);
  118. }
  119. @Override
  120. public List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username) {
  121. List<SysPermission> currentSyspermission = null;
  122. if(oConvertUtils.isNotEmpty(component)) {
  123. //1.通过注解属性pageComponent 获取菜单
  124. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  125. query.eq(SysPermission::getDelFlag,0);
  126. query.eq(SysPermission::getComponent, component);
  127. currentSyspermission = sysPermissionMapper.selectList(query);
  128. }else {
  129. //1.直接通过前端请求地址查询菜单
  130. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  131. query.eq(SysPermission::getMenuType,2);
  132. query.eq(SysPermission::getDelFlag,0);
  133. query.eq(SysPermission::getUrl, requestPath);
  134. currentSyspermission = sysPermissionMapper.selectList(query);
  135. //2.未找到 再通过自定义匹配URL 获取菜单
  136. if(currentSyspermission==null || currentSyspermission.size()==0) {
  137. //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制)
  138. String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath);
  139. LambdaQueryWrapper<SysPermission> queryQserMatch = new LambdaQueryWrapper<SysPermission>();
  140. queryQserMatch.eq(SysPermission::getMenuType, 1);
  141. queryQserMatch.eq(SysPermission::getDelFlag, 0);
  142. queryQserMatch.eq(SysPermission::getUrl, userMatchUrl);
  143. if(oConvertUtils.isNotEmpty(userMatchUrl)){
  144. currentSyspermission = sysPermissionMapper.selectList(queryQserMatch);
  145. }
  146. }
  147. //3.未找到 再通过正则匹配获取菜单
  148. if(currentSyspermission==null || currentSyspermission.size()==0) {
  149. //通过正则匹配权限配置
  150. String regUrl = getRegexpUrl(requestPath);
  151. if(regUrl!=null) {
  152. currentSyspermission = sysPermissionMapper.selectList(new LambdaQueryWrapper<SysPermission>().eq(SysPermission::getMenuType,2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag,0));
  153. }
  154. }
  155. }
  156. if(currentSyspermission!=null && currentSyspermission.size()>0){
  157. List<SysPermissionDataRuleModel> dataRules = new ArrayList<SysPermissionDataRuleModel>();
  158. for (SysPermission sysPermission : currentSyspermission) {
  159. // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722
  160. List<SysPermissionDataRule> temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId());
  161. if(temp!=null && temp.size()>0) {
  162. //dataRules.addAll(temp);
  163. dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class);
  164. }
  165. // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722
  166. }
  167. return dataRules;
  168. }
  169. return null;
  170. }
  171. /**
  172. * 匹配前端传过来的地址 匹配成功返回正则地址
  173. * AntPathMatcher匹配地址
  174. *()* 匹配0个或多个字符
  175. *()**匹配0个或多个目录
  176. */
  177. private String getRegexpUrl(String url) {
  178. List<String> list = sysPermissionMapper.queryPermissionUrlWithStar();
  179. if(list!=null && list.size()>0) {
  180. for (String p : list) {
  181. PathMatcher matcher = new AntPathMatcher();
  182. if(matcher.match(p, url)) {
  183. return p;
  184. }
  185. }
  186. }
  187. return null;
  188. }
  189. @Override
  190. public SysUserCacheInfo getCacheUser(String username) {
  191. SysUserCacheInfo info = new SysUserCacheInfo();
  192. info.setOneDepart(true);
  193. LoginUser user = this.getUserByName(username);
  194. if(user!=null) {
  195. info.setSysUserCode(user.getUsername());
  196. info.setSysUserName(user.getRealname());
  197. info.setSysOrgCode(user.getOrgCode());
  198. }else{
  199. return null;
  200. }
  201. //多部门支持in查询
  202. List<SysDepart> list = departMapper.queryUserDeparts(user.getId());
  203. List<String> sysMultiOrgCode = new ArrayList<String>();
  204. if(list==null || list.size()==0) {
  205. //当前用户无部门
  206. //sysMultiOrgCode.add("0");
  207. }else if(list.size()==1) {
  208. sysMultiOrgCode.add(list.get(0).getOrgCode());
  209. }else {
  210. info.setOneDepart(false);
  211. for (SysDepart dpt : list) {
  212. sysMultiOrgCode.add(dpt.getOrgCode());
  213. }
  214. }
  215. info.setSysMultiOrgCode(sysMultiOrgCode);
  216. return info;
  217. }
  218. @Override
  219. public LoginUser getUserById(String id) {
  220. if(oConvertUtils.isEmpty(id)) {
  221. return null;
  222. }
  223. LoginUser loginUser = new LoginUser();
  224. SysUser sysUser = userMapper.selectById(id);
  225. if(sysUser==null) {
  226. return null;
  227. }
  228. BeanUtils.copyProperties(sysUser, loginUser);
  229. return loginUser;
  230. }
  231. @Override
  232. public List<String> getRolesByUsername(String username) {
  233. return sysUserRoleMapper.getRoleByUserName(username);
  234. }
  235. @Override
  236. public List<String> getDepartIdsByUsername(String username) {
  237. List<SysDepart> list = sysDepartService.queryDepartsByUsername(username);
  238. List<String> result = new ArrayList<>(list.size());
  239. for (SysDepart depart : list) {
  240. result.add(depart.getId());
  241. }
  242. return result;
  243. }
  244. @Override
  245. public List<String> getDepartNamesByUsername(String username) {
  246. List<SysDepart> list = sysDepartService.queryDepartsByUsername(username);
  247. List<String> result = new ArrayList<>(list.size());
  248. for (SysDepart depart : list) {
  249. result.add(depart.getDepartName());
  250. }
  251. return result;
  252. }
  253. @Override
  254. public DictModel getParentDepartId(String departId) {
  255. SysDepart depart = departMapper.getParentDepartId(departId);
  256. DictModel model = new DictModel(depart.getId(),depart.getParentId());
  257. return model;
  258. }
  259. @Override
  260. @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code", unless = "#result == null ")
  261. public List<DictModel> queryDictItemsByCode(String code) {
  262. return sysDictService.queryDictItemsByCode(code);
  263. }
  264. @Override
  265. @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ")
  266. public List<DictModel> queryEnableDictItemsByCode(String code) {
  267. return sysDictService.queryEnableDictItemsByCode(code);
  268. }
  269. @Override
  270. public List<DictModel> queryTableDictItemsByCode(String table, String text, String code) {
  271. //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799
  272. if(table.indexOf("#{")>=0){
  273. table = QueryGenerator.getSqlRuleValue(table);
  274. }
  275. //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799
  276. return sysDictService.queryTableDictItemsByCode(table, text, code);
  277. }
  278. @Override
  279. public List<DictModel> queryAllDepartBackDictModel() {
  280. return sysDictService.queryAllDepartBackDictModel();
  281. }
  282. @Override
  283. public void sendSysAnnouncement(MessageDTO message) {
  284. this.sendSysAnnouncement(message.getFromUser(),
  285. message.getToUser(),
  286. message.getTitle(),
  287. message.getContent(),
  288. message.getCategory());
  289. try {
  290. // 同步发送第三方APP消息
  291. wechatEnterpriseService.sendMessage(message, true);
  292. dingtalkService.sendMessage(message, true);
  293. } catch (Exception e) {
  294. log.error("同步发送第三方APP消息失败!", e);
  295. }
  296. }
  297. @Override
  298. public void sendBusAnnouncement(BusMessageDTO message) {
  299. sendBusAnnouncement(message.getFromUser(),
  300. message.getToUser(),
  301. message.getTitle(),
  302. message.getContent(),
  303. message.getCategory(),
  304. message.getBusType(),
  305. message.getBusId());
  306. try {
  307. // 同步发送第三方APP消息
  308. wechatEnterpriseService.sendMessage(message, true);
  309. dingtalkService.sendMessage(message, true);
  310. } catch (Exception e) {
  311. log.error("同步发送第三方APP消息失败!", e);
  312. }
  313. }
  314. @Override
  315. public void sendTemplateAnnouncement(TemplateMessageDTO message) {
  316. String templateCode = message.getTemplateCode();
  317. String title = message.getTitle();
  318. Map<String,String> map = message.getTemplateParam();
  319. String fromUser = message.getFromUser();
  320. String toUser = message.getToUser();
  321. List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
  322. if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
  323. throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
  324. }
  325. SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
  326. //模板标题
  327. title = title==null?sysSmsTemplate.getTemplateName():title;
  328. //模板内容
  329. String content = sysSmsTemplate.getTemplateContent();
  330. if(map!=null) {
  331. for (Map.Entry<String, String> entry : map.entrySet()) {
  332. String str = "${" + entry.getKey() + "}";
  333. if(oConvertUtils.isNotEmpty(title)){
  334. title = title.replace(str, entry.getValue());
  335. }
  336. content = content.replace(str, entry.getValue());
  337. }
  338. }
  339. SysAnnouncement announcement = new SysAnnouncement();
  340. announcement.setTitile(title);
  341. announcement.setMsgContent(content);
  342. announcement.setSender(fromUser);
  343. announcement.setPriority(CommonConstant.PRIORITY_M);
  344. announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
  345. announcement.setSendStatus(CommonConstant.HAS_SEND);
  346. announcement.setSendTime(new Date());
  347. announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
  348. announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
  349. sysAnnouncementMapper.insert(announcement);
  350. // 2.插入用户通告阅读标记表记录
  351. String userId = toUser;
  352. String[] userIds = userId.split(",");
  353. String anntId = announcement.getId();
  354. for(int i=0;i<userIds.length;i++) {
  355. if(oConvertUtils.isNotEmpty(userIds[i])) {
  356. SysUser sysUser = userMapper.getUserByName(userIds[i]);
  357. if(sysUser==null) {
  358. continue;
  359. }
  360. SysAnnouncementSend announcementSend = new SysAnnouncementSend();
  361. announcementSend.setAnntId(anntId);
  362. announcementSend.setUserId(sysUser.getId());
  363. announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
  364. sysAnnouncementSendMapper.insert(announcementSend);
  365. JSONObject obj = new JSONObject();
  366. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
  367. obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
  368. obj.put(WebsocketConst.MSG_ID, announcement.getId());
  369. obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
  370. webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
  371. }
  372. }
  373. try {
  374. // 同步企业微信、钉钉的消息通知
  375. dingtalkService.sendActionCardMessage(announcement, true);
  376. wechatEnterpriseService.sendTextCardMessage(announcement, true);
  377. } catch (Exception e) {
  378. log.error("同步发送第三方APP消息失败!", e);
  379. }
  380. }
  381. @Override
  382. public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) {
  383. String templateCode = message.getTemplateCode();
  384. String title = message.getTitle();
  385. Map<String,String> map = message.getTemplateParam();
  386. String fromUser = message.getFromUser();
  387. String toUser = message.getToUser();
  388. String busId = message.getBusId();
  389. String busType = message.getBusType();
  390. List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
  391. if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
  392. throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
  393. }
  394. SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
  395. //模板标题
  396. title = title==null?sysSmsTemplate.getTemplateName():title;
  397. //模板内容
  398. String content = sysSmsTemplate.getTemplateContent();
  399. if(map!=null) {
  400. for (Map.Entry<String, String> entry : map.entrySet()) {
  401. String str = "${" + entry.getKey() + "}";
  402. title = title.replace(str, entry.getValue());
  403. content = content.replace(str, entry.getValue());
  404. }
  405. }
  406. SysAnnouncement announcement = new SysAnnouncement();
  407. announcement.setTitile(title);
  408. announcement.setMsgContent(content);
  409. announcement.setSender(fromUser);
  410. announcement.setPriority(CommonConstant.PRIORITY_M);
  411. announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
  412. announcement.setSendStatus(CommonConstant.HAS_SEND);
  413. announcement.setSendTime(new Date());
  414. announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
  415. announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
  416. announcement.setBusId(busId);
  417. announcement.setBusType(busType);
  418. announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
  419. announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
  420. sysAnnouncementMapper.insert(announcement);
  421. // 2.插入用户通告阅读标记表记录
  422. String userId = toUser;
  423. String[] userIds = userId.split(",");
  424. String anntId = announcement.getId();
  425. for(int i=0;i<userIds.length;i++) {
  426. if(oConvertUtils.isNotEmpty(userIds[i])) {
  427. SysUser sysUser = userMapper.getUserByName(userIds[i]);
  428. if(sysUser==null) {
  429. continue;
  430. }
  431. SysAnnouncementSend announcementSend = new SysAnnouncementSend();
  432. announcementSend.setAnntId(anntId);
  433. announcementSend.setUserId(sysUser.getId());
  434. announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
  435. sysAnnouncementSendMapper.insert(announcementSend);
  436. JSONObject obj = new JSONObject();
  437. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
  438. obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
  439. obj.put(WebsocketConst.MSG_ID, announcement.getId());
  440. obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
  441. webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
  442. }
  443. }
  444. try {
  445. // 同步企业微信、钉钉的消息通知
  446. dingtalkService.sendActionCardMessage(announcement, true);
  447. wechatEnterpriseService.sendTextCardMessage(announcement, true);
  448. } catch (Exception e) {
  449. log.error("同步发送第三方APP消息失败!", e);
  450. }
  451. }
  452. @Override
  453. public String parseTemplateByCode(TemplateDTO templateDTO) {
  454. String templateCode = templateDTO.getTemplateCode();
  455. Map<String, String> map = templateDTO.getTemplateParam();
  456. List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
  457. if(sysSmsTemplates==null||sysSmsTemplates.size()==0){
  458. throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode);
  459. }
  460. SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
  461. //模板内容
  462. String content = sysSmsTemplate.getTemplateContent();
  463. if(map!=null) {
  464. for (Map.Entry<String, String> entry : map.entrySet()) {
  465. String str = "${" + entry.getKey() + "}";
  466. content = content.replace(str, entry.getValue());
  467. }
  468. }
  469. return content;
  470. }
  471. @Override
  472. public void updateSysAnnounReadFlag(String busType, String busId) {
  473. SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper<SysAnnouncement>().eq("bus_type",busType).eq("bus_id",busId));
  474. if(announcement != null){
  475. LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
  476. String userId = sysUser.getId();
  477. LambdaUpdateWrapper<SysAnnouncementSend> updateWrapper = new UpdateWrapper().lambda();
  478. updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG);
  479. updateWrapper.set(SysAnnouncementSend::getReadTime, new Date());
  480. updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'");
  481. SysAnnouncementSend announcementSend = new SysAnnouncementSend();
  482. sysAnnouncementSendMapper.update(announcementSend, updateWrapper);
  483. }
  484. }
  485. /**
  486. * 获取数据库类型
  487. * @param dataSource
  488. * @return
  489. * @throws SQLException
  490. */
  491. private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{
  492. if("".equals(DB_TYPE)) {
  493. Connection connection = dataSource.getConnection();
  494. try {
  495. DatabaseMetaData md = connection.getMetaData();
  496. String dbType = md.getDatabaseProductName().toLowerCase();
  497. if(dbType.indexOf("mysql")>=0) {
  498. DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL;
  499. }else if(dbType.indexOf("oracle")>=0) {
  500. DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE;
  501. }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) {
  502. DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER;
  503. }else if(dbType.indexOf("postgresql")>=0) {
  504. DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL;
  505. }else if(dbType.indexOf("mariadb")>=0) {
  506. DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB;
  507. }else {
  508. log.error("数据库类型:[" + dbType + "]不识别!");
  509. //throw new JeecgBootException("数据库类型:["+dbType+"]不识别!");
  510. }
  511. } catch (Exception e) {
  512. log.error(e.getMessage(), e);
  513. }finally {
  514. connection.close();
  515. }
  516. }
  517. return DB_TYPE;
  518. }
  519. @Override
  520. public List<DictModel> queryAllDict() {
  521. // 查询并排序
  522. QueryWrapper<SysDict> queryWrapper = new QueryWrapper<SysDict>();
  523. queryWrapper.orderByAsc("create_time");
  524. List<SysDict> dicts = sysDictService.list(queryWrapper);
  525. // 封装成 model
  526. List<DictModel> list = new ArrayList<DictModel>();
  527. for (SysDict dict : dicts) {
  528. list.add(new DictModel(dict.getDictCode(), dict.getDictName()));
  529. }
  530. return list;
  531. }
  532. @Override
  533. public List<SysCategoryModel> queryAllDSysCategory() {
  534. List<SysCategory> ls = categoryMapper.selectList(null);
  535. List<SysCategoryModel> res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class);
  536. return res;
  537. }
  538. @Override
  539. public List<DictModel> queryFilterTableDictInfo(String table, String text, String code, String filterSql) {
  540. return sysDictService.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
  541. }
  542. @Override
  543. public List<String> queryTableDictByKeys(String table, String text, String code, String[] keyArray) {
  544. return sysDictService.queryTableDictByKeys(table,text,code,Joiner.on(",").join(keyArray));
  545. }
  546. @Override
  547. public List<ComboModel> queryAllUserBackCombo() {
  548. List<ComboModel> list = new ArrayList<ComboModel>();
  549. List<SysUser> userList = userMapper.selectList(new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0));
  550. for(SysUser user : userList){
  551. ComboModel model = new ComboModel();
  552. model.setTitle(user.getRealname());
  553. model.setId(user.getId());
  554. model.setUsername(user.getUsername());
  555. list.add(model);
  556. }
  557. return list;
  558. }
  559. @Override
  560. public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) {
  561. JSONObject json = new JSONObject();
  562. QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
  563. List<ComboModel> list = new ArrayList<ComboModel>();
  564. Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
  565. IPage<SysUser> pageList = userMapper.selectPage(page, queryWrapper);
  566. for(SysUser user : pageList.getRecords()){
  567. ComboModel model = new ComboModel();
  568. model.setUsername(user.getUsername());
  569. model.setTitle(user.getRealname());
  570. model.setId(user.getId());
  571. model.setEmail(user.getEmail());
  572. if(oConvertUtils.isNotEmpty(userIds)){
  573. String[] temp = userIds.split(",");
  574. for(int i = 0; i<temp.length;i++){
  575. if(temp[i].equals(user.getId())){
  576. model.setChecked(true);
  577. }
  578. }
  579. }
  580. list.add(model);
  581. }
  582. json.put("list",list);
  583. json.put("total",pageList.getTotal());
  584. return json;
  585. }
  586. @Override
  587. public List<ComboModel> queryAllRole() {
  588. List<ComboModel> list = new ArrayList<ComboModel>();
  589. List<SysRole> roleList = roleMapper.selectList(new QueryWrapper<SysRole>());
  590. for(SysRole role : roleList){
  591. ComboModel model = new ComboModel();
  592. model.setTitle(role.getRoleName());
  593. model.setId(role.getId());
  594. list.add(model);
  595. }
  596. return list;
  597. }
  598. @Override
  599. public List<ComboModel> queryAllRole(String[] roleIds) {
  600. List<ComboModel> list = new ArrayList<ComboModel>();
  601. List<SysRole> roleList = roleMapper.selectList(new QueryWrapper<SysRole>());
  602. for(SysRole role : roleList){
  603. ComboModel model = new ComboModel();
  604. model.setTitle(role.getRoleName());
  605. model.setId(role.getId());
  606. model.setRoleCode(role.getRoleCode());
  607. if(oConvertUtils.isNotEmpty(roleIds)) {
  608. for (int i = 0; i < roleIds.length; i++) {
  609. if (roleIds[i].equals(role.getId())) {
  610. model.setChecked(true);
  611. }
  612. }
  613. }
  614. list.add(model);
  615. }
  616. return list;
  617. }
  618. @Override
  619. public List<String> getRoleIdsByUsername(String username) {
  620. return sysUserRoleMapper.getRoleIdByUserName(username);
  621. }
  622. @Override
  623. public String getDepartIdsByOrgCode(String orgCode) {
  624. return departMapper.queryDepartIdByOrgCode(orgCode);
  625. }
  626. @Override
  627. public List<SysDepartModel> getAllSysDepart() {
  628. List<SysDepartModel> departModelList = new ArrayList<SysDepartModel>();
  629. List<SysDepart> departList = departMapper.selectList(new QueryWrapper<SysDepart>().eq("del_flag","0"));
  630. for(SysDepart depart : departList){
  631. SysDepartModel model = new SysDepartModel();
  632. BeanUtils.copyProperties(depart,model);
  633. departModelList.add(model);
  634. }
  635. return departModelList;
  636. }
  637. @Override
  638. public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) {
  639. SysDataSource dbSource = dataSourceService.getById(dbSourceId);
  640. if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){
  641. String dbPassword = dbSource.getDbPassword();
  642. String decodedStr = SecurityUtil.jiemi(dbPassword);
  643. dbSource.setDbPassword(decodedStr);
  644. }
  645. return new DynamicDataSourceModel(dbSource);
  646. }
  647. @Override
  648. public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) {
  649. SysDataSource dbSource = dataSourceService.getOne(new LambdaQueryWrapper<SysDataSource>().eq(SysDataSource::getCode, dbSourceCode));
  650. if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){
  651. String dbPassword = dbSource.getDbPassword();
  652. String decodedStr = SecurityUtil.jiemi(dbPassword);
  653. dbSource.setDbPassword(decodedStr);
  654. }
  655. return new DynamicDataSourceModel(dbSource);
  656. }
  657. @Override
  658. public List<String> getDeptHeadByDepId(String deptId) {
  659. List<SysUser> userList = userMapper.selectList(new QueryWrapper<SysUser>().like("depart_ids",deptId).eq("status",1).eq("del_flag",0));
  660. List<String> list = new ArrayList<>();
  661. for(SysUser user : userList){
  662. list.add(user.getUsername());
  663. }
  664. return list;
  665. }
  666. @Override
  667. public void sendWebSocketMsg(String[] userIds, String cmd) {
  668. JSONObject obj = new JSONObject();
  669. obj.put(WebsocketConst.MSG_CMD, cmd);
  670. webSocket.sendMessage(userIds, obj.toJSONString());
  671. }
  672. @Override
  673. public List<LoginUser> queryAllUserByIds(String[] userIds) {
  674. QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
  675. queryWrapper.in("id",userIds);
  676. List<LoginUser> loginUsers = new ArrayList<>();
  677. List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
  678. for (SysUser user:sysUsers) {
  679. LoginUser loginUser=new LoginUser();
  680. BeanUtils.copyProperties(user, loginUser);
  681. loginUsers.add(loginUser);
  682. }
  683. return loginUsers;
  684. }
  685. /**
  686. * 推送签到人员信息
  687. * @param userId
  688. */
  689. @Override
  690. public void meetingSignWebsocket(String userId) {
  691. JSONObject obj = new JSONObject();
  692. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN);
  693. obj.put(WebsocketConst.MSG_USER_ID,userId);
  694. //TODO 目前全部推送,后面修改
  695. webSocket.sendMessage(obj.toJSONString());
  696. }
  697. @Override
  698. public List<LoginUser> queryUserByNames(String[] userNames) {
  699. QueryWrapper<SysUser> queryWrapper = new QueryWrapper<SysUser>().eq("status",1).eq("del_flag",0);
  700. queryWrapper.in("username",userNames);
  701. List<LoginUser> loginUsers = new ArrayList<>();
  702. List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
  703. for (SysUser user:sysUsers) {
  704. LoginUser loginUser=new LoginUser();
  705. BeanUtils.copyProperties(user, loginUser);
  706. loginUsers.add(loginUser);
  707. }
  708. return loginUsers;
  709. }
  710. @Override
  711. public SysDepartModel selectAllById(String id) {
  712. SysDepart sysDepart = sysDepartService.getById(id);
  713. SysDepartModel sysDepartModel = new SysDepartModel();
  714. BeanUtils.copyProperties(sysDepart,sysDepartModel);
  715. return sysDepartModel;
  716. }
  717. @Override
  718. public List<String> queryDeptUsersByUserId(String userId) {
  719. List<String> userIds = new ArrayList<>();
  720. List<SysUserDepart> userDepartList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().eq("user_id",userId));
  721. if(userDepartList != null){
  722. //查找所属公司
  723. String orgCodes = "";
  724. for(SysUserDepart userDepart : userDepartList){
  725. //查询所属公司编码
  726. SysDepart depart = sysDepartService.getById(userDepart.getDepId());
  727. int length = YouBianCodeUtil.zhanweiLength;
  728. String compyOrgCode = "";
  729. if(depart != null && depart.getOrgCode() != null){
  730. compyOrgCode = depart.getOrgCode().substring(0,length);
  731. if(orgCodes.indexOf(compyOrgCode) == -1){
  732. orgCodes = orgCodes + "," + compyOrgCode;
  733. }
  734. }
  735. }
  736. if(oConvertUtils.isNotEmpty(orgCodes)){
  737. orgCodes = orgCodes.substring(1);
  738. List<String> listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(","));
  739. List<SysUserDepart> userList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().in("dep_id",listIds));
  740. for(SysUserDepart userDepart : userList){
  741. if(!userIds.contains(userDepart.getUserId())){
  742. userIds.add(userDepart.getUserId());
  743. }
  744. }
  745. }
  746. }
  747. return userIds;
  748. }
  749. /**
  750. * 查询用户拥有的角色集合
  751. * @param username
  752. * @return
  753. */
  754. @Override
  755. public Set<String> getUserRoleSet(String username) {
  756. // 查询用户拥有的角色集合
  757. List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
  758. log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
  759. return new HashSet<>(roles);
  760. }
  761. /**
  762. * 查询用户拥有的权限集合
  763. * @param username
  764. * @return
  765. */
  766. @Override
  767. public Set<String> getUserPermissionSet(String username) {
  768. Set<String> permissionSet = new HashSet<>();
  769. List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
  770. for (SysPermission po : permissionList) {
  771. // // TODO URL规则有问题?
  772. // if (oConvertUtils.isNotEmpty(po.getUrl())) {
  773. // permissionSet.add(po.getUrl());
  774. // }
  775. if (oConvertUtils.isNotEmpty(po.getPerms())) {
  776. permissionSet.add(po.getPerms());
  777. }
  778. }
  779. log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) );
  780. return permissionSet;
  781. }
  782. /**
  783. * 判断online菜单是否有权限
  784. * @param onlineAuthDTO
  785. * @return
  786. */
  787. @Override
  788. public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) {
  789. String username = onlineAuthDTO.getUsername();
  790. List<String> possibleUrl = onlineAuthDTO.getPossibleUrl();
  791. String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl();
  792. //查询菜单
  793. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  794. query.eq(SysPermission::getDelFlag, 0);
  795. query.in(SysPermission::getUrl, possibleUrl);
  796. List<SysPermission> permissionList = sysPermissionMapper.selectList(query);
  797. if (permissionList == null || permissionList.size() == 0) {
  798. //没有配置菜单 找online表单菜单地址
  799. SysPermission sysPermission = new SysPermission();
  800. sysPermission.setUrl(onlineFormUrl);
  801. int count = sysPermissionMapper.queryCountByUsername(username, sysPermission);
  802. if(count<=0){
  803. return false;
  804. }
  805. } else {
  806. //找到菜单了
  807. boolean has = false;
  808. for (SysPermission p : permissionList) {
  809. int count = sysPermissionMapper.queryCountByUsername(username, p);
  810. has = has || (count>0);
  811. }
  812. return has;
  813. }
  814. return true;
  815. }
  816. /**
  817. * 查询用户拥有的角色集合 common api 里面的接口实现
  818. * @param username
  819. * @return
  820. */
  821. @Override
  822. public Set<String> queryUserRoles(String username) {
  823. return getUserRoleSet(username);
  824. }
  825. /**
  826. * 查询用户拥有的权限集合 common api 里面的接口实现
  827. * @param username
  828. * @return
  829. */
  830. @Override
  831. public Set<String> queryUserAuths(String username) {
  832. return getUserPermissionSet(username);
  833. }
  834. /**
  835. * 36根据多个用户账号(逗号分隔),查询返回多个用户信息
  836. * @param usernames
  837. * @return
  838. */
  839. @Override
  840. public List<JSONObject> queryUsersByUsernames(String usernames) {
  841. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  842. queryWrapper.in(SysUser::getUsername,usernames.split(","));
  843. return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class);
  844. }
  845. @Override
  846. public List<JSONObject> queryUsersByIds(String ids) {
  847. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  848. queryWrapper.in(SysUser::getId,ids.split(","));
  849. return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class);
  850. }
  851. /**
  852. * 37根据多个部门编码(逗号分隔),查询返回多个部门信息
  853. * @param orgCodes
  854. * @return
  855. */
  856. @Override
  857. public List<JSONObject> queryDepartsByOrgcodes(String orgCodes) {
  858. LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
  859. queryWrapper.in(SysDepart::getOrgCode,orgCodes.split(","));
  860. return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class);
  861. }
  862. @Override
  863. public List<JSONObject> queryDepartsByIds(String ids) {
  864. LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
  865. queryWrapper.in(SysDepart::getId,ids.split(","));
  866. return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class);
  867. }
  868. /**
  869. * 发消息
  870. * @param fromUser
  871. * @param toUser
  872. * @param title
  873. * @param msgContent
  874. * @param setMsgCategory
  875. */
  876. private void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) {
  877. SysAnnouncement announcement = new SysAnnouncement();
  878. announcement.setTitile(title);
  879. announcement.setMsgContent(msgContent);
  880. announcement.setSender(fromUser);
  881. announcement.setPriority(CommonConstant.PRIORITY_M);
  882. announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
  883. announcement.setSendStatus(CommonConstant.HAS_SEND);
  884. announcement.setSendTime(new Date());
  885. announcement.setMsgCategory(setMsgCategory);
  886. announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
  887. sysAnnouncementMapper.insert(announcement);
  888. // 2.插入用户通告阅读标记表记录
  889. String userId = toUser;
  890. String[] userIds = userId.split(",");
  891. String anntId = announcement.getId();
  892. for(int i=0;i<userIds.length;i++) {
  893. if(oConvertUtils.isNotEmpty(userIds[i])) {
  894. SysUser sysUser = userMapper.getUserByName(userIds[i]);
  895. if(sysUser==null) {
  896. continue;
  897. }
  898. SysAnnouncementSend announcementSend = new SysAnnouncementSend();
  899. announcementSend.setAnntId(anntId);
  900. announcementSend.setUserId(sysUser.getId());
  901. announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
  902. sysAnnouncementSendMapper.insert(announcementSend);
  903. JSONObject obj = new JSONObject();
  904. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
  905. obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
  906. obj.put(WebsocketConst.MSG_ID, announcement.getId());
  907. obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
  908. webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
  909. }
  910. }
  911. }
  912. /**
  913. * 发消息 带业务参数
  914. * @param fromUser
  915. * @param toUser
  916. * @param title
  917. * @param msgContent
  918. * @param setMsgCategory
  919. * @param busType
  920. * @param busId
  921. */
  922. private void sendBusAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory, String busType, String busId) {
  923. SysAnnouncement announcement = new SysAnnouncement();
  924. announcement.setTitile(title);
  925. announcement.setMsgContent(msgContent);
  926. announcement.setSender(fromUser);
  927. announcement.setPriority(CommonConstant.PRIORITY_M);
  928. announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
  929. announcement.setSendStatus(CommonConstant.HAS_SEND);
  930. announcement.setSendTime(new Date());
  931. announcement.setMsgCategory(setMsgCategory);
  932. announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
  933. announcement.setBusId(busId);
  934. announcement.setBusType(busType);
  935. announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
  936. announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
  937. sysAnnouncementMapper.insert(announcement);
  938. // 2.插入用户通告阅读标记表记录
  939. String userId = toUser;
  940. String[] userIds = userId.split(",");
  941. String anntId = announcement.getId();
  942. for(int i=0;i<userIds.length;i++) {
  943. if(oConvertUtils.isNotEmpty(userIds[i])) {
  944. SysUser sysUser = userMapper.getUserByName(userIds[i]);
  945. if(sysUser==null) {
  946. continue;
  947. }
  948. SysAnnouncementSend announcementSend = new SysAnnouncementSend();
  949. announcementSend.setAnntId(anntId);
  950. announcementSend.setUserId(sysUser.getId());
  951. announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
  952. sysAnnouncementSendMapper.insert(announcementSend);
  953. JSONObject obj = new JSONObject();
  954. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
  955. obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
  956. obj.put(WebsocketConst.MSG_ID, announcement.getId());
  957. obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
  958. webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
  959. }
  960. }
  961. }
  962. /**
  963. * 发送邮件消息
  964. * @param email
  965. * @param title
  966. * @param content
  967. */
  968. @Override
  969. public void sendEmailMsg(String email, String title, String content) {
  970. EmailSendMsgHandle emailHandle=new EmailSendMsgHandle();
  971. emailHandle.SendMsg(email, title, content);
  972. }
  973. /**
  974. * 获取公司下级部门和所有用户id信息
  975. * @param orgCode
  976. * @return
  977. */
  978. @Override
  979. public List<Map> getDeptUserByOrgCode(String orgCode) {
  980. //1.获取公司信息
  981. SysDepart comp=sysDepartService.queryCompByOrgCode(orgCode);
  982. if(comp!=null){
  983. //2.获取公司下级部门
  984. List<SysDepart> departs=sysDepartService.queryDeptByPid(comp.getId());
  985. //3.获取部门下的人员信息
  986. List<Map> list=new ArrayList();
  987. //4.处理部门和下级用户数据
  988. for (SysDepart dept:departs) {
  989. Map map=new HashMap();
  990. //部门名称
  991. String departName = dept.getDepartName();
  992. //根据部门编码获取下级部门id
  993. List<String> listIds = departMapper.getSubDepIdsByDepId(dept.getId());
  994. //根据下级部门ids获取下级部门的所有用户
  995. List<SysUserDepart> userList = sysUserDepartService.list(new QueryWrapper<SysUserDepart>().in("dep_id",listIds));
  996. List<String> userIds = new ArrayList<>();
  997. for(SysUserDepart userDepart : userList){
  998. if(!userIds.contains(userDepart.getUserId())){
  999. userIds.add(userDepart.getUserId());
  1000. }
  1001. }
  1002. map.put("name",departName);
  1003. map.put("ids",userIds);
  1004. list.add(map);
  1005. }
  1006. return list;
  1007. }
  1008. return null;
  1009. }
  1010. /**
  1011. * 查询分类字典翻译
  1012. *
  1013. * @param ids 分类字典表id
  1014. * @return
  1015. */
  1016. @Override
  1017. public List<String> loadCategoryDictItem(String ids) {
  1018. return sysCategoryService.loadDictItem(ids, false);
  1019. }
  1020. /**
  1021. * 根据字典code加载字典text
  1022. *
  1023. * @param dictCode 顺序:tableName,text,code
  1024. * @param keys 要查询的key
  1025. * @return
  1026. */
  1027. @Override
  1028. public List<String> loadDictItem(String dictCode, String keys) {
  1029. String[] params = dictCode.split(",");
  1030. return sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, false);
  1031. }
  1032. /**
  1033. * 根据字典code查询字典项
  1034. *
  1035. * @param dictCode 顺序:tableName,text,code
  1036. * @param dictCode 要查询的key
  1037. * @return
  1038. */
  1039. @Override
  1040. public List<DictModel> getDictItems(String dictCode) {
  1041. List<DictModel> ls = sysDictService.getDictItems(dictCode);
  1042. if (ls == null) {
  1043. ls = new ArrayList<>();
  1044. }
  1045. return ls;
  1046. }
  1047. /**
  1048. * 根据多个字典code查询多个字典项
  1049. *
  1050. * @param dictCodeList
  1051. * @return key = dictCode ; value=对应的字典项
  1052. */
  1053. @Override
  1054. public Map<String, List<DictModel>> getManyDictItems(List<String> dictCodeList) {
  1055. return sysDictService.queryDictItemsByCodeList(dictCodeList);
  1056. }
  1057. /**
  1058. * 【下拉搜索】
  1059. * 大数据量的字典表 走异步加载,即前端输入内容过滤数据
  1060. *
  1061. * @param dictCode 字典code格式:table,text,code
  1062. * @param keyword 过滤关键字
  1063. * @return
  1064. */
  1065. @Override
  1066. public List<DictModel> loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) {
  1067. return sysDictService.loadDict(dictCode, keyword, pageSize);
  1068. }
  1069. @Override
  1070. public Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys) {
  1071. List<String> dictCodeList = Arrays.asList(dictCodes.split(","));
  1072. List<String> values = Arrays.asList(keys.split(","));
  1073. return sysDictService.queryManyDictByKeys(dictCodeList, values);
  1074. }
  1075. @Override
  1076. public List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys) {
  1077. return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(",")));
  1078. }
  1079. }