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.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; 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.DataLogDTO; 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.*; import org.jeecg.common.constant.enums.MessageSplitTypeEnum; import org.jeecg.common.constant.enums.MessageTypeEnum; import org.jeecg.common.desensitization.util.SensitiveInfoUtil; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.system.base.entity.DataVersion; import org.jeecg.common.system.base.entity.SysUpload; import org.jeecg.common.system.base.entity.SysUploadRela; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.*; import org.jeecg.common.util.*; import org.jeecg.common.util.dynamic.db.FreemarkerParseFactory; import org.jeecg.modules.base.entity.Unit; import org.jeecg.modules.base.service.IEnterpriseService; import org.jeecg.modules.base.service.IUnitService; import org.jeecg.modules.message.entity.SysMessageTemplate; import org.jeecg.modules.message.handle.impl.DdSendMsgHandle; import org.jeecg.modules.message.handle.impl.EmailSendMsgHandle; import org.jeecg.modules.message.handle.impl.QywxSendMsgHandle; import org.jeecg.modules.message.handle.impl.SystemSendMsgHandle; import org.jeecg.modules.message.service.ISysMessageTemplateService; import org.jeecg.modules.message.websocket.WebSocket; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.service.IQuartzJobService; 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 org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.*; import java.util.stream.Collectors; /** * @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 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; @Autowired private ISysUserService sysUserService; @Autowired private ISysDataLogService sysDataLogService; @Autowired private ISysFilesService sysFilesService; @Autowired private IUploadRelaService uploadRelaService; @Autowired private IUploadService uploadService; @Autowired private IDataVersionService dataVersionService; @Autowired private IUnitService unitService; @Autowired private IEnterpriseService enterpriseService; @Autowired private IQuartzJobService quartzJobService; @Autowired private ISysDictItemService sysDictItemService; @Override //@SensitiveDecode public LoginUser getUserByName(String username) { //update-begin-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 if (oConvertUtils.isEmpty(username)) { return null; } //update-end-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 LoginUser user = sysUserService.getEncodeUserInfo(username); //相同类中方法间调用时脱敏解密 Aop会失效,获取用户信息太重要,此处采用原生解密方法,不采用@SensitiveDecodeAble注解方式 try { SensitiveInfoUtil.handlerObject(user, false); } catch (IllegalAccessException e) { e.printStackTrace(); } return user; } @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 queryPermissionDataRule(String component, String requestPath, String username) { List currentSyspermission = null; if (oConvertUtils.isNotEmpty(component)) { //1.通过注解属性pageComponent 获取菜单 LambdaQueryWrapper query = new LambdaQueryWrapper(); query.eq(SysPermission::getDelFlag, 0); query.eq(SysPermission::getComponent, component); currentSyspermission = sysPermissionMapper.selectList(query); } else { //1.直接通过前端请求地址查询菜单 LambdaQueryWrapper query = new LambdaQueryWrapper(); 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 queryQserMatch = new LambdaQueryWrapper(); // update-begin-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 1 //queryQserMatch.eq(SysPermission::getMenuType, 1); // update-end-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 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().eq(SysPermission::getMenuType, 2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag, 0)); } } } if (currentSyspermission != null && currentSyspermission.size() > 0) { List dataRules = new ArrayList(); for (SysPermission sysPermission : currentSyspermission) { // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 List 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 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); // try { // //相同类中方法间调用时脱敏@SensitiveDecodeAble解密 Aop失效处理 // SensitiveInfoUtil.handlerObject(user, false); // } catch (IllegalAccessException e) { // e.printStackTrace(); // } if (user != null) { info.setSysUserCode(user.getUsername()); info.setSysUserName(user.getRealname()); info.setSysOrgCode(user.getOrgCode()); } else { return null; } //多部门支持in查询 List list = departMapper.queryUserDeparts(user.getId()); List sysMultiOrgCode = new ArrayList(); 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 getRolesByUsername(String username) { return sysUserRoleMapper.getRoleByUserName(username); } @Override public List getDepartIdsByUsername(String username) { List list = sysDepartService.queryDepartsByUsername(username); List result = new ArrayList<>(list.size()); for (SysDepart depart : list) { result.add(depart.getId()); } return result; } @Override public List getDepartNamesByUsername(String username) { List list = sysDepartService.queryDepartsByUsername(username); List 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 queryDictItemsByCode(String code) { return sysDictService.queryDictItemsByCode(code); } @Override @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE, key = "#code", unless = "#result == null ") public List queryEnableDictItemsByCode(String code) { return sysDictService.queryEnableDictItemsByCode(code); } @Override public List queryTableDictItemsByCode(String table, String text, String code) { //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 if (table.indexOf(SymbolConstant.SYS_VAR_PREFIX) >= 0) { table = QueryGenerator.getSqlRuleValue(table); } //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 String[] arr = new String[]{text, code}; SqlInjectionUtil.filterContent(arr); SqlInjectionUtil.specialFilterContentForDictSql(table); return sysDictService.queryTableDictItemsByCode(table, text, code); } @Override public List queryAllDepartBackDictModel() { return sysDictService.queryAllDepartBackDictModel(); } @Override public void sendSysAnnouncement(MessageDTO message) { if (StringUtils.isNotBlank(message.getMessageType())) { //获取消息类型对应角色用户 MessageSplitTypeEnum messageSplitTypeEnum = MessageSplitTypeEnum.valueOfType(message.getMessageType()); SysDict sysDict = sysDictService.getOne(new LambdaQueryWrapper().eq(SysDict::getDictCode, messageSplitTypeEnum.getDictCode())); List sysDictItemList = sysDictItemService.list(new QueryWrapper().eq("dict_id",sysDict.getId())); if (CollectionUtils.isNotEmpty(sysDictItemList)) { List sysUserList = sysUserService.getUserByRoleCodeList(sysDictItemList.stream().map(SysDictItem::getItemValue).collect(Collectors.toList())); if (CollectionUtils.isNotEmpty(sysUserList)) { Set userIdList = new HashSet<>(Arrays.asList(message.getToUser().split(StringPool.COMMA))); userIdList.addAll(sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList())); message.setToUser(StringUtils.join(userIdList, StringPool.COMMA)); } } } 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 map = message.getTemplateParam(); String fromUser = message.getFromUser(); String toUser = message.getToUser(); List 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 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 map = message.getTemplateParam(); String fromUser = message.getFromUser(); String toUser = message.getToUser(); String busId = message.getBusId(); String busType = message.getBusType(); List 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 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 map = templateDTO.getTemplateParam(); List 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 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().eq("bus_type", busType).eq("bus_id", busId)); if (announcement != null) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); LambdaUpdateWrapper 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 */ @Resource 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(DataBaseConstant.DB_TYPE_MYSQL.toLowerCase()) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE.toLowerCase()) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER.toLowerCase()) >= 0 || dbType.indexOf(DataBaseConstant.DB_TYPE_SQL_SERVER_BLANK) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL.toLowerCase()) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_MARIADB.toLowerCase()) >= 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 queryAllDict() { // 查询并排序 QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.orderByAsc("create_time"); List dicts = sysDictService.list(queryWrapper); // 封装成 model List list = new ArrayList(); for (SysDict dict : dicts) { list.add(new DictModel(dict.getDictCode(), dict.getDictName())); } return list; } @Override public List queryAllSysCategory() { List ls = categoryMapper.selectList(null); List res = oConvertUtils.entityListToModelList(ls, SysCategoryModel.class); return res; } @Override public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { return sysDictService.queryTableDictItemsByCodeAndFilter(table, text, code, filterSql); } @Override public List queryTableDictByKeys(String table, String text, String code, String[] keyArray) { return sysDictService.queryTableDictByKeys(table, text, code, Joiner.on(",").join(keyArray)); } @Override public List queryAllUserBackCombo() { List list = new ArrayList(); List userList = userMapper.selectList(new QueryWrapper().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 queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); List list = new ArrayList(); Page page = new Page(pageNo, pageSize); IPage 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 queryAllRole() { List list = new ArrayList(); List roleList = roleMapper.selectList(new QueryWrapper()); for (SysRole role : roleList) { ComboModel model = new ComboModel(); model.setTitle(role.getRoleName()); model.setId(role.getId()); list.add(model); } return list; } @Override public List queryAllRole(String[] roleIds) { List list = new ArrayList(); List roleList = roleMapper.selectList(new QueryWrapper()); 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 getRoleIdsByUsername(String username) { return sysUserRoleMapper.getRoleIdByUserName(username); } @Override public String getDepartIdsByOrgCode(String orgCode) { return departMapper.queryDepartIdByOrgCode(orgCode); } @Override public List getAllSysDepart() { List departModelList = new ArrayList(); List departList = departMapper.selectList(new QueryWrapper().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().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 getDeptHeadByDepId(String deptId) { List userList = userMapper.selectList(new QueryWrapper().like("depart_ids", deptId).eq("status", 1).eq("del_flag", 0)); List 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 queryAllUserByIds(String[] userIds) { QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); queryWrapper.in("id", userIds); List loginUsers = new ArrayList<>(); List 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 queryUserByNames(String[] userNames) { QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); queryWrapper.in("username", userNames); List loginUsers = new ArrayList<>(); List 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 queryDeptUsersByUserId(String userId) { List userIds = new ArrayList<>(); List userDepartList = sysUserDepartService.list(new QueryWrapper().eq("user_id", userId)); if (userDepartList != null) { //查找所属公司 String orgCodes = ""; StringBuilder orgCodesBuilder = new StringBuilder(); orgCodesBuilder.append(orgCodes); for (SysUserDepart userDepart : userDepartList) { //查询所属公司编码 SysDepart depart = sysDepartService.getById(userDepart.getDepId()); int length = YouBianCodeUtil.ZHANWEI_LENGTH; String compyOrgCode = ""; if (depart != null && depart.getOrgCode() != null) { compyOrgCode = depart.getOrgCode().substring(0, length); if (orgCodes.indexOf(compyOrgCode) == -1) { orgCodesBuilder.append(SymbolConstant.COMMA).append(compyOrgCode); } } } orgCodes = orgCodesBuilder.toString(); if (oConvertUtils.isNotEmpty(orgCodes)) { orgCodes = orgCodes.substring(1); List listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(",")); List userList = sysUserDepartService.list(new QueryWrapper().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 getUserRoleSet(String username) { // 查询用户拥有的角色集合 List 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 getUserPermissionSet(String username) { Set permissionSet = new HashSet<>(); List 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 possibleUrl = onlineAuthDTO.getPossibleUrl(); String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl(); //查询菜单 LambdaQueryWrapper query = new LambdaQueryWrapper(); query.eq(SysPermission::getDelFlag, 0); query.in(SysPermission::getUrl, possibleUrl); List 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 queryUserRoles(String username) { return getUserRoleSet(username); } /** * 查询用户拥有的权限集合 common api 里面的接口实现 * * @param username * @return */ @Override public Set queryUserAuths(String username) { return getUserPermissionSet(username); } /** * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 * * @param usernames * @return */ @Override public List queryUsersByUsernames(String usernames) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysUser::getUsername, usernames.split(",")); return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); } @Override public List queryUsersByIds(String ids) { LambdaQueryWrapper 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 queryDepartsByOrgcodes(String orgCodes) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysDepart::getOrgCode, orgCodes.split(",")); return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); } @Override public List queryDepartsByIds(String ids) { LambdaQueryWrapper 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 getDeptUserByOrgCode(String orgCode) { //1.获取公司信息 SysDepart comp = sysDepartService.queryCompByOrgCode(orgCode); if (comp != null) { //2.获取公司下级部门 List departs = sysDepartService.queryDeptByPid(comp.getId()); //3.获取部门下的人员信息 List list = new ArrayList(); //4.处理部门和下级用户数据 for (SysDepart dept : departs) { Map map = new HashMap(5); //部门名称 String departName = dept.getDepartName(); //根据部门编码获取下级部门id List listIds = departMapper.getSubDepIdsByDepId(dept.getId()); //根据下级部门ids获取下级部门的所有用户 List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id", listIds)); List 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 loadCategoryDictItem(String ids) { return sysCategoryService.loadDictItem(ids, false); } /** * 根据字典code加载字典text * * @param dictCode 顺序:tableName,text,code * @param keys 要查询的key * @return */ @Override public List 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 getDictItems(String dictCode) { List ls = sysDictService.getDictItems(dictCode); if (ls == null) { ls = new ArrayList<>(); } return ls; } /** * 根据多个字典code查询多个字典项 * * @param dictCodeList * @return key = dictCode ; value=对应的字典项 */ @Override public Map> getManyDictItems(List dictCodeList) { return sysDictService.queryDictItemsByCodeList(dictCodeList); } /** * 【下拉搜索】 * 大数据量的字典表 走异步加载,即前端输入内容过滤数据 * * @param dictCode 字典code格式:table,text,code * @param keyword 过滤关键字 * @return */ @Override public List loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) { return sysDictService.loadDict(dictCode, keyword, pageSize); } @Override public Map> translateManyDict(String dictCodes, String keys) { List dictCodeList = Arrays.asList(dictCodes.split(",")); List values = Arrays.asList(keys.split(",")); return sysDictService.queryManyDictByKeys(dictCodeList, values); } @Override public List translateDictFromTableByKeys(String table, String text, String code, String keys) { return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(","))); } //-------------------------------------流程节点发送模板消息----------------------------------------------- @Autowired private QywxSendMsgHandle qywxSendMsgHandle; @Autowired private SystemSendMsgHandle systemSendMsgHandle; @Autowired private EmailSendMsgHandle emailSendMsgHandle; @Autowired private DdSendMsgHandle ddSendMsgHandle; @Override public void sendTemplateMessage(MessageDTO message) { String messageType = message.getType(); //update-begin-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 String templateCode = message.getTemplateCode(); if (oConvertUtils.isNotEmpty(templateCode)) { SysMessageTemplate templateEntity = getTemplateEntity(templateCode); boolean isMarkdown = CommonConstant.MSG_TEMPLATE_TYPE_MD.equals(templateEntity.getTemplateType()); String content = templateEntity.getTemplateContent(); if (oConvertUtils.isNotEmpty(content) && null != message.getData()) { content = FreemarkerParseFactory.parseTemplateContent(content, message.getData(), isMarkdown); } message.setIsMarkdown(isMarkdown); message.setContent(content); } if (oConvertUtils.isEmpty(message.getContent())) { throw new JeecgBootException("发送消息失败,消息内容为空!"); } //update-end-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 if (MessageTypeEnum.XT.getType().equals(messageType)) { if (message.isMarkdown()) { // 系统消息要解析Markdown message.setContent(HTMLUtils.parseMarkdown(message.getContent())); } systemSendMsgHandle.sendMessage(message); } else if (MessageTypeEnum.YJ.getType().equals(messageType)) { if (message.isMarkdown()) { // 邮件消息要解析Markdown message.setContent(HTMLUtils.parseMarkdown(message.getContent())); } emailSendMsgHandle.sendMessage(message); } else if (MessageTypeEnum.DD.getType().equals(messageType)) { ddSendMsgHandle.sendMessage(message); } else if (MessageTypeEnum.QYWX.getType().equals(messageType)) { qywxSendMsgHandle.sendMessage(message); } } @Override public String getTemplateContent(String code) { List list = sysMessageTemplateService.selectByCode(code); if (list == null || list.size() == 0) { return null; } return list.get(0).getTemplateContent(); } /** * 获取模板内容,解析markdown * * @param code * @return */ public SysMessageTemplate getTemplateEntity(String code) { List list = sysMessageTemplateService.selectByCode(code); if (list == null || list.size() == 0) { return null; } return list.get(0); } //-------------------------------------流程节点发送模板消息----------------------------------------------- @Override public void saveDataLog(DataLogDTO dataLogDto) { SysDataLog entity = new SysDataLog(); entity.setDataTable(dataLogDto.getTableName()); entity.setDataId(dataLogDto.getDataId()); entity.setDataContent(dataLogDto.getContent()); entity.setType(dataLogDto.getType()); entity.setDataVersion("1"); sysDataLogService.save(entity); } @Override public void addSysFiles(SysFilesModel sysFilesModel) { SysFiles sysFiles = new SysFiles(); BeanUtils.copyProperties(sysFilesModel, sysFiles); String defaultValue = "0"; sysFiles.setIzStar(defaultValue); sysFiles.setIzFolder(defaultValue); sysFiles.setIzRootFolder(defaultValue); sysFiles.setDelFlag(defaultValue); sysFilesService.save(sysFiles); } @Override public String getFileUrl(String fileId) { SysFiles sysFiles = sysFilesService.getById(fileId); return sysFiles.getUrl(); } @Override public void updateAvatar(LoginUser loginUser) { SysUser sysUser = new SysUser(); BeanUtils.copyProperties(loginUser, sysUser); sysUserService.updateById(sysUser); } @Override public void sendAppChatSocket(String userId) { JSONObject obj = new JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.MSG_CHAT); obj.put(WebsocketConst.MSG_USER_ID, userId); webSocket.sendMessage(userId, obj.toJSONString()); } @Override public List listByBusIdAndBusType(String busId, String busType) { return uploadRelaService.listByBusIdAndBusType(busId, busType); } @Override public SysUpload getUploadById(String id) { return uploadService.getById(id); } @Override public boolean saveOrUpdateBatchUploadRela(List sysUploadRelaList) { return uploadRelaService.saveOrUpdateBatch(sysUploadRelaList); } @Override public boolean updateBatchUploadById(List sysUploadList) { return uploadService.updateBatchById(sysUploadList); } @Override public List batchUploadFile(String fileType, List multipartFileList, String description) throws Exception { return uploadService.batchUploadFile(fileType, multipartFileList, description); } @Override public void saveOrUpdateUploadRale(String busId, String busType, String uploadId) { uploadRelaService.saveOrUpdateUploadRale(busId, busType, uploadId); } @Override public void removeDataVersionByBusinessId(String businessId) { dataVersionService.removeDataVersionByBusinessId(businessId); } @Override public void removeUploadById(String id) { uploadService.removeById(id); } @Override public void removeUploadRelaById(String id) { uploadRelaService.removeById(id); } @Override public void delSysUploadRelaByBusIdAndBusType(String busId, String busType) { uploadRelaService.delSysUploadRelaByBusIdAndBusType(busId, busType); } @Override public String getUnitNameById(String unitId) { Unit unit = unitService.getById(unitId); String unitName = ""; if(unit != null){ unitName = unit.getName(); } return unitName; } @Override public String queryDictTextByKey(String dictCode, String key) { return sysDictService.queryDictTextByKey(dictCode, key); } @Override public String getVersionStatusByVersionAndBusinessType(Integer version, String businessType) { return dataVersionService.getVersionStatusByVersionAndBusinessType(version, businessType); } @Override public void saveDataVersion(DataVersion dataVersion) { dataVersionService.save(dataVersion); } @Override public DataVersion getDataVersionByBusinessId(String id) { return dataVersionService.getById(id); } @Override public void removeDataVersionById(String id) { dataVersionService.removeById(id); } /** * 根据企业ID获取企业名称 * * @param enterpriseId * @return */ @Override public String getEnterpriseNameById(String enterpriseId) { String enterpriseName = enterpriseService.getById(enterpriseId).getName(); return enterpriseName; } @Override public List getLastDataVersion(String businessType, String enterpriseId, String isLastusable) { List dataVersionList = dataVersionService.getLastDataVersion(businessType, enterpriseId, isLastusable); return dataVersionList; } @Override public List getDataVersionList(String businessType, String enterpriseId, String versionStatus, String version) { List dataVersionList = dataVersionService.getDataVersionList(businessType, enterpriseId, versionStatus, version); return dataVersionList; } @Override public void removeDataVersionByIds(String ids) { dataVersionService.removeBatchByIds(Arrays.asList(ids.split(","))); } @Override public void updateBatchDataVersion(List dataVersionList) { dataVersionService.saveOrUpdateBatch(dataVersionList); } @Override public void closeJobByClassName(String className) { QuartzJob quartzJob = quartzJobService.getOne(new QueryWrapper().eq("job_class_name", className), true); if (ObjectUtils.isNotNull(quartzJob)) { quartzJobService.deleteAndStopJob(quartzJob); } } @Override public void sendAnnouncement(String fromUser, String toUser, String title, String msgContent, String category) { 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(org.apache.commons.lang3.StringUtils.isNotBlank(category) ? category : 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("cmd", "user"); obj.put("userId", sysUser.getId()); obj.put("msgId", announcement.getId()); obj.put("msgTxt", announcement.getTitile()); webSocket.sendOneMessage(sysUser.getId(), obj.toJSONString()); } } } }