package com.tievd.cube.modules.system.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tievd.cube.commons.model.LogDTO; import com.tievd.cube.commons.model.BusMessageDTO; import com.tievd.cube.commons.model.BusTemplateMessageDTO; import com.tievd.cube.commons.model.MessageDTO; import com.tievd.cube.commons.model.TemplateMessageDTO; import com.tievd.cube.commons.constant.CacheConst; import com.tievd.cube.commons.constant.CommonConst; import com.tievd.cube.commons.constant.DataBaseConst; import com.tievd.cube.commons.constant.WebSocketConst; import com.tievd.cube.commons.exception.CubeAppException; import com.tievd.cube.common.system.api.ISysBaseAPI; import com.tievd.cube.commons.mybatisplus.QueryGenerator; import com.tievd.cube.commons.enums.AnnouncementType; import com.tievd.cube.commons.utils.SystemContextUtil; import com.tievd.cube.commons.utils.db.DynamicDBUtil; import com.tievd.cube.commons.base.Result; import com.tievd.cube.commons.utils.EntityConvertUtil; import com.tievd.cube.commons.utils.YouBianCodeUtil; import com.tievd.cube.commons.utils.crypto.SecurityUtil; import com.tievd.cube.commons.utils.web.HttpServletUtil; import com.tievd.cube.modules.system.entity.*; import com.tievd.cube.modules.system.mapper.*; import com.tievd.cube.modules.system.model.*; import com.tievd.cube.modules.system.extra.ws.AppWebSocketHandler; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; import javax.servlet.http.HttpServletRequest; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.util.*; import java.util.stream.Collectors; /** * 底层共通业务API,提供其他独立模块调用 * * @author xinwuy * @version 2.3.0 * @since 2019-4-20 */ @Slf4j @Service @Transactional public class SysBaseApiImpl implements ISysBaseAPI { // 当前系统数据库类型 private static String DB_TYPE = ""; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private SysDepartMapper sysDepartMapper; @Autowired private SysDictMapper sysDictMapper; @Autowired private SysAnnouncementMapper sysAnnouncementMapper; @Autowired private SysAnnouncementSendMapper sysAnnouncementSendMapper; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysCategoryMapper sysCategoryMapper; @Autowired private SysDataSourceMapper sysDataSourceMapper; @Autowired private SysUserDepartMapper sysUserDepartMapper; @Autowired private SysPermissionMapper sysPermissionMapper; @Autowired private SysPermissionDataRuleMapper sysPermissionDataRuleMapper; @Autowired private SysDataLogMapper sysDataLogMapper; @Autowired private SysLogMapper sysLogMapper; @Autowired private AppWebSocketHandler appWebSocketHandler; @Override @Cacheable(CacheConst.SYS_USERS_CACHE) public LoginUser getUserByName(String username) { log.info("无缓存LoginUser[{}]的时候调用这里!", username); if (StrUtil.isEmpty(username)) { return null; } LoginUser loginUser = new LoginUser(); SysUser sysUser = sysUserMapper.getUserByName(username); if (sysUser == null) { return null; } BeanUtils.copyProperties(sysUser, loginUser); // 查询用户角色信息 List roles = sysUserRoleMapper.getRoleIdByUserName(username); loginUser.setRoleIds(roles); // 查询用户部门信息 List orgCodes = sysDepartMapper.queryDepartOrgCodesByUsername(username); loginUser.setOrgCodes(ArrayUtil.join(orgCodes.toArray(), ",")); return loginUser; } @Override public String translateDictFromTable(String table, String text, String code, String key) { List dictModels = sysDictMapper.queryTableDictByKeys(table, text, code, ListUtil.of(key)); if (dictModels.size() > 0) { return dictModels.get(0).getText(); } return null; } @Override @Cacheable(cacheNames = CacheConst.SYS_DICT_TABLE_CACHE) public List translateDictFromTable(String table, String text, String code, List keys) { return sysDictMapper.queryTableDictByKeys(table, text, code, keys); } @Override public String translateDictKeyFromTable(String table, String text, String code, String value) { return sysDictMapper.queryTableDictByText(table, text, code, value); } @Override @Cacheable(cacheNames = CacheConst.SYS_DICT_CACHE) public String translateDict(String code, String key) { return sysDictMapper.queryDictTextByKey(code, key); } @Override public String translateDictKey(String code, String text) { return sysDictMapper.queryDictKeyByText(code, text); } @Override @Cacheable(cacheNames = CacheConst.SYS_DATA_PERMISSIONS_CACHE) public List queryPermissionDataRule(String component, String requestPath, String username) { List currentSysPermission; if (StrUtil.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.未找到 再通过正则匹配获取菜单 if (currentSysPermission == null || currentSysPermission.size() == 0) { //通过正则匹配权限配置 String regUrl = getRegexpUrl(requestPath); if (regUrl != null) { LambdaQueryWrapper regexpQuery = new LambdaQueryWrapper<>(); regexpQuery.eq(SysPermission::getMenuType, 2); regexpQuery.eq(SysPermission::getDelFlag, 0); currentSysPermission = sysPermissionMapper.selectList(regexpQuery); } } } if (currentSysPermission == null || currentSysPermission.size() == 0) { return null; } List dataRules = new ArrayList<>(); for (SysPermission sysPermission : currentSysPermission) { List idsList = sysPermissionDataRuleMapper.queryDataRuleIds(username, sysPermission.getId()); if (idsList == null || idsList.size() == 0) { return null; } Set set = new HashSet<>(); for (String ids : idsList) { if (StrUtil.isEmpty(ids)) { continue; } String[] arr = ids.split(","); for (String id : arr) { if (StrUtil.isNotEmpty(id)) { set.add(id); } } } List temp = null; QueryWrapper wrapper = new QueryWrapper<>(); wrapper.in("id", set); wrapper.eq("status", CommonConst.STATUS_1); if (set.size() > 0) { temp = sysPermissionDataRuleMapper.selectList(wrapper); } if (temp != null && temp.size() > 0) { dataRules = EntityConvertUtil.entityListToModelList(temp, SysPermissionDataRuleModel.class); } } return dataRules; } /** * 匹配前端传过来的地址 匹配成功返回正则地址 * 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 LoginUser getUserById(String id) { if (StrUtil.isEmpty(id)) { return null; } SysUser sysUser = sysUserMapper.selectById(id); if (sysUser == null) { return null; } LoginUser loginUser = new LoginUser(); BeanUtils.copyProperties(sysUser, loginUser); return loginUser; } @Override public List getRolesByUsername(String username) { return sysUserRoleMapper.getRoleByUserName(username); } @Override public List getDepartIdsByUsername(String username) { List list = sysDepartMapper.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 = sysDepartMapper.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 = sysDepartMapper.getParentDepartId(departId); return new DictModel(depart.getId(), depart.getParentId()); } @Override @Cacheable(cacheNames = CacheConst.SYS_DICT_CACHE, key = "#code") public List queryDictItemsByCode(String code) { return sysDictMapper.queryDictItemsByCode(code); } @Override public List queryTableDictItemsByCode(String table, String text, String code) { //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 if (table.contains("#{")) { table = QueryGenerator.getSqlRuleValue(table); } //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 return sysDictMapper.queryTableDictItemsByCodeAndFilter(table, text, code, null); } @Override public List queryAllDepartBackDictModel() { return sysDictMapper.queryAllDepartBackDictModel(); } @Override public void sendSysAnnouncement(MessageDTO message) { this.sendSysAnnouncement(message.getFromUser(), message.getToUser(), message.getTitle(), message.getContent(), message.getCategory()); } @Override public void sendBusAnnouncement(BusMessageDTO message) { sendBusAnnouncement(message.getFromUser(), message.getToUser(), message.getTitle(), message.getContent(), message.getCategory(), message.getBusType(), message.getBusId()); } @Override public void sendTemplateAnnouncement(TemplateMessageDTO message) { String title = message.getTitle(); String fromUser = message.getFromUser(); String toUser = message.getToUser(); String content = message.getContent(); SysAnnouncement announcement = new SysAnnouncement(); announcement.setTitle(title); announcement.setMsgContent(content); announcement.setSender(fromUser); announcement.setPriority(CommonConst.PRIORITY_M); announcement.setMsgType(CommonConst.MSG_TYPE_UESR); announcement.setSendStatus(CommonConst.HAS_SEND); announcement.setMsgCategory(CommonConst.MSG_CATEGORY_SYSTEM); announcement.setDelFlag(CommonConst.NOT_DELETED); announcement.setSendTime(new Date()); sysAnnouncementMapper.insert(announcement); // 2.插入用户通告阅读标记表记录 String[] userIds = toUser.split(","); for (String userId : userIds) { if (StrUtil.isNotEmpty(userId)) { SysUser sysUser = sysUserMapper.getUserByName(userId); if (sysUser == null) { continue; } SysAnnouncementSend announcementSend = new SysAnnouncementSend(); announcementSend.setAnntId(announcement.getId()); announcementSend.setUserId(sysUser.getId()); announcementSend.setReadFlag(CommonConst.NO_READ_FLAG); sysAnnouncementSendMapper.insert(announcementSend); JSONObject root = JSONUtil.createObj(); root.set(WebSocketConst.MSG_CMD, WebSocketConst.CMD_USER); root.set(WebSocketConst.MSG_USER_ID, sysUser.getId()); root.set(WebSocketConst.MSG_ID, announcement.getId()); root.set(WebSocketConst.MSG_TXT, announcement.getTitle()); appWebSocketHandler.sendOneMessage(sysUser.getId(), root.toString()); } } } @Override public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) { String title = message.getTitle(); String fromUser = message.getFromUser(); String toUser = message.getToUser(); String busId = message.getBusId(); String busType = message.getBusType(); String content = message.getContent(); SysAnnouncement announcement = new SysAnnouncement(); announcement.setTitle(title); announcement.setMsgContent(content); announcement.setSender(fromUser); announcement.setPriority(CommonConst.PRIORITY_M); announcement.setMsgType(CommonConst.MSG_TYPE_UESR); announcement.setSendStatus(CommonConst.HAS_SEND); announcement.setSendTime(new Date()); announcement.setMsgCategory(CommonConst.MSG_CATEGORY_SYSTEM); announcement.setDelFlag(CommonConst.NOT_DELETED); announcement.setBusId(busId); announcement.setBusType(busType); announcement.setOpenType(Objects.requireNonNull(AnnouncementType.getByType(busType)).getOpenType()); announcement.setOpenPage(Objects.requireNonNull(AnnouncementType.getByType(busType)).getOpenPage()); sysAnnouncementMapper.insert(announcement); // 2.插入用户通告阅读标记表记录 String[] userIds = toUser.split(","); for (String userId : userIds) { if (StrUtil.isNotEmpty(userId)) { SysUser sysUser = sysUserMapper.getUserByName(userId); if (sysUser == null) { continue; } SysAnnouncementSend announcementSend = new SysAnnouncementSend(); announcementSend.setAnntId(announcement.getId()); announcementSend.setUserId(sysUser.getId()); announcementSend.setReadFlag(CommonConst.NO_READ_FLAG); sysAnnouncementSendMapper.insert(announcementSend); JSONObject obj = JSONUtil.createObj(); obj.set(WebSocketConst.MSG_CMD, WebSocketConst.CMD_USER); obj.set(WebSocketConst.MSG_USER_ID, sysUser.getId()); obj.set(WebSocketConst.MSG_ID, announcement.getId()); obj.set(WebSocketConst.MSG_TXT, announcement.getTitle()); appWebSocketHandler.sendOneMessage(sysUser.getId(), obj.toString()); } } } @Override public void updateAnnouncementReadFlag(String busType, String busId) { SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper().eq("bus_type", busType).eq("bus_id", busId)); LoginUser sysUser = SystemContextUtil.currentLoginUser(); if (announcement != null && sysUser != null) { String userId = sysUser.getId(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("read_flag", CommonConst.HAS_READ_FLAG); updateWrapper.set("read_time", new Date()); updateWrapper.last("where annt_id ='" + announcement.getId() + "' and user_id ='" + userId + "'"); sysAnnouncementSendMapper.update(new SysAnnouncementSend(), updateWrapper); } } /** * 获取数据库类型 */ private String getDatabaseTypeByDataSource(DataSource dataSource) { if ("".equals(DB_TYPE)) { try (Connection connection = dataSource.getConnection()) { DatabaseMetaData md = connection.getMetaData(); String dbType = md.getDatabaseProductName().toLowerCase(); if (dbType.contains("mysql")) { DB_TYPE = DataBaseConst.DB_TYPE_MYSQL; } else if (dbType.contains("oracle")) { DB_TYPE = DataBaseConst.DB_TYPE_ORACLE; } else if (dbType.contains("sqlserver") || dbType.contains("sql server")) { DB_TYPE = DataBaseConst.DB_TYPE_SQLSERVER; } else if (dbType.contains("postgresql")) { DB_TYPE = DataBaseConst.DB_TYPE_POSTGRESQL; } else { throw new CubeAppException("数据库类型:[" + dbType + "]不识别!"); } } catch (Exception e) { log.error(e.getMessage(), e); } } return DB_TYPE; } @Override public List queryAllDict() { // 查询并排序 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("create_time"); List sysDictList = sysDictMapper.selectList(queryWrapper); // 封装成 model List list = new ArrayList<>(); for (SysDict dict : sysDictList) { list.add(new DictModel(dict.getDictCode(), dict.getDictName())); } return list; } @Override public List queryAllCategory() { List ls = sysCategoryMapper.selectList(null); return EntityConvertUtil.entityListToModelList(ls, SysCategoryModel.class); } @Override public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { return sysDictMapper.queryTableDictItemsByCodeAndFilter(table, text, code, filterSql); } @Override public List queryAllUserBackCombo() { List list = new ArrayList<>(); List userList = sysUserMapper.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) { QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); List list = new ArrayList<>(); Page page = new Page<>(pageNo, pageSize); IPage pageList = sysUserMapper.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 (StrUtil.isNotEmpty(userIds)) { String[] temp = userIds.split(","); for (String s : temp) { if (s.equals(user.getId())) { model.setChecked(true); } } } list.add(model); } JSONObject json = JSONUtil.createObj(); json.set("list", list); json.set("total", pageList.getTotal()); return json; } @Override public List queryAllRole() { List list = new ArrayList<>(); List roleList = sysRoleMapper.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 = sysRoleMapper.selectList(new QueryWrapper<>()); for (SysRole role : roleList) { ComboModel model = new ComboModel(); model.setTitle(role.getRoleName()); model.setId(role.getId()); model.setRoleCode(role.getRoleCode()); if (roleIds != null) { for (String roleId : roleIds) { if (roleId.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 sysDepartMapper.queryDepartIdByOrgCode(orgCode); } @Override public List getAllSysDepart() { List departModelList = new ArrayList<>(); List departList = sysDepartMapper.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 = sysDataSourceMapper.selectById(dbSourceId); if (dbSource != null && StrUtil.isNotBlank(dbSource.getDbPassword())) { String dbPassword = dbSource.getDbPassword(); String decodedStr = SecurityUtil.decrypt(dbPassword); dbSource.setDbPassword(decodedStr); } return new DynamicDataSourceModel(dbSource); } @Override public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) { SysDataSource dbSource = sysDataSourceMapper.selectOne(new LambdaQueryWrapper().eq(SysDataSource::getCode, dbSourceCode)); if (dbSource != null && StrUtil.isNotBlank(dbSource.getDbPassword())) { String dbPassword = dbSource.getDbPassword(); String decodedStr = SecurityUtil.decrypt(dbPassword); dbSource.setDbPassword(decodedStr); } return new DynamicDataSourceModel(dbSource); } @Override public List getDeptHeadByDepId(String deptId) { List userList = sysUserMapper.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 = JSONUtil.createObj(); obj.set(WebSocketConst.MSG_CMD, cmd); appWebSocketHandler.sendMoreMessage(userIds, obj.toString()); } @Override public List queryAllUserByIds(String[] userIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 1); queryWrapper.eq("del_flag", 0); queryWrapper.in("id", ListUtil.toList(userIds)); List loginUsers = new ArrayList<>(); List sysUsers = sysUserMapper.selectList(queryWrapper); for (SysUser user : sysUsers) { LoginUser loginUser = new LoginUser(); BeanUtils.copyProperties(user, loginUser); loginUsers.add(loginUser); } return loginUsers; } @Override public List queryUserByNames(String[] userNames) { QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); queryWrapper.in("username", ListUtil.toList(userNames)); List loginUsers = new ArrayList<>(); List sysUsers = sysUserMapper.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 = sysDepartMapper.selectById(id); SysDepartModel sysDepartModel = new SysDepartModel(); BeanUtils.copyProperties(sysDepart, sysDepartModel); return sysDepartModel; } @Override public List queryDeptUsersByUserId(String userId) { List userIds = new ArrayList<>(); List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().eq("user_id", userId)); if (userDepartList != null) { //查找所属公司 StringBuilder orgCodes = new StringBuilder(); for (SysUserDepart userDepart : userDepartList) { //查询所属公司编码 SysDepart depart = sysDepartMapper.selectById(userDepart.getDepId()); int length = YouBianCodeUtil.zhanweiLength; String compyOrgCode; if (depart != null && depart.getOrgCode() != null) { compyOrgCode = depart.getOrgCode().substring(0, length); if (!orgCodes.toString().contains(compyOrgCode)) { orgCodes.append(",").append(compyOrgCode); } } } if (StrUtil.isNotEmpty(orgCodes.toString())) { orgCodes = new StringBuilder(orgCodes.substring(1)); List listIds = sysDepartMapper.getSubDepIdsByOrgCodes(orgCodes.toString().split(",")); List userList = sysUserDepartMapper.selectList(new QueryWrapper().in("dep_id", listIds)); for (SysUserDepart userDepart : userList) { if (!userIds.contains(userDepart.getUserId())) { userIds.add(userDepart.getUserId()); } } } } return userIds; } /** * 查询用户拥有的角色集合 common api 里面的接口实现 */ @Override public List queryUserRoles(String username) { return sysUserRoleMapper.getRoleByUserName(username); } /** * 查询用户拥有的权限集合 common api 里面的接口实现 */ @Override public List queryUserAuths(String username) { List permissionList = sysPermissionMapper.queryByUser(username); return permissionList.stream().map(SysPermission::getPerms).filter(StrUtil::isNotEmpty).collect(Collectors.toList()); } /** * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 */ @Override @SneakyThrows public JSONObject queryUsersByUsernames(String usernames) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysUser::getUsername, ListUtil.toList(usernames.split(","))); return JSONUtil.parseObj(sysUserMapper.selectList(queryWrapper)); } /** * 37根据多个部门编码(逗号分隔),查询返回多个部门信息 */ @Override public JSONObject queryDepartsByOrgCodes(String orgCodes) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysDepart::getOrgCode, ListUtil.toList(orgCodes.split(","))); return JSONUtil.parseObj(sysDepartMapper.selectList(queryWrapper)); } @Override public void addDataLog(String tableName, String dataId, String dataContent) { String versionNumber = "0"; String dataVersion = sysDataLogMapper.queryMaxDataVer(tableName, dataId); if (dataVersion != null) { versionNumber = String.valueOf(Integer.parseInt(dataVersion) + 1); } SysDataLog log = new SysDataLog(); log.setDataTable(tableName); log.setDataId(dataId); log.setDataContent(dataContent); log.setDataVersion(versionNumber); sysDataLogMapper.insert(log); } @Override public Result checkUserState(SysUser sysUser) { if (sysUser == null) { return Result.error("该用户不存在,请注册!"); } //情况2:根据用户信息查询,该用户已注销 if (sysUser.getDelFlag() == 1) { return Result.error("该用户已删除!"); } //情况3:根据用户信息查询,该用户已冻结 if (CommonConst.USER_FREEZE.equals(sysUser.getStatus())) { return Result.error("该用户已冻结!"); } return Result.ok(); } @Override public void batchAddSysUser(List sysUsers) { JdbcTemplate jdbcTemplate = DynamicDBUtil.getJdbcTemplate("master"); String sql = "INSERT INTO sys_user ( id, username, realname, password, salt, status, del_flag, work_no, create_by, create_time, user_identity, depart_ids, rel_tenant_ids, first_login ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; List data = new ArrayList<>(sysUsers.size()); for (SysUser sysUser : sysUsers) { Object[] params = new Object[14]; params[0] = sysUser.getId(); params[1] = sysUser.getUsername(); params[2] = sysUser.getRealname(); params[3] = sysUser.getPassword(); params[4] = sysUser.getSalt(); params[5] = sysUser.getStatus(); params[6] = sysUser.getDelFlag(); params[7] = sysUser.getWorkNo(); params[8] = sysUser.getCreateBy(); params[9] = sysUser.getCreateTime(); params[10] = sysUser.getUserIdentity(); params[11] = sysUser.getDepartIds(); params[12] = sysUser.getRelTenantIds(); params[13] = sysUser.getFirstLogin(); data.add(params); } jdbcTemplate.batchUpdate(sql, data); } /** * 发消息 */ private void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent, Integer setMsgCategory) { SysAnnouncement announcement = new SysAnnouncement(); announcement.setTitle(title); announcement.setMsgContent(msgContent); announcement.setSender(fromUser); announcement.setPriority(CommonConst.PRIORITY_M); announcement.setMsgType(CommonConst.MSG_TYPE_UESR); announcement.setSendStatus(CommonConst.HAS_SEND); announcement.setSendTime(new Date()); announcement.setMsgCategory(setMsgCategory); announcement.setDelFlag(CommonConst.NOT_DELETED); sysAnnouncementMapper.insert(announcement); // 2.插入用户通告阅读标记表记录 String[] userIds = toUser.split(","); for (String userId : userIds) { if (StrUtil.isNotEmpty(userId)) { SysUser sysUser = sysUserMapper.getUserByName(userId); if (sysUser == null) { continue; } SysAnnouncementSend announcementSend = new SysAnnouncementSend(); announcementSend.setAnntId(announcement.getId()); announcementSend.setUserId(sysUser.getId()); announcementSend.setReadFlag(CommonConst.NO_READ_FLAG); sysAnnouncementSendMapper.insert(announcementSend); JSONObject obj = JSONUtil.createObj(); obj.set(WebSocketConst.MSG_CMD, WebSocketConst.CMD_USER); obj.set(WebSocketConst.MSG_USER_ID, sysUser.getId()); obj.set(WebSocketConst.MSG_ID, announcement.getId()); obj.set(WebSocketConst.MSG_TXT, announcement.getTitle()); appWebSocketHandler.sendOneMessage(sysUser.getId(), obj.toString()); } } } /** * 发消息 带业务参数 */ private void sendBusAnnouncement(String fromUser, String toUser, String title, String msgContent, Integer setMsgCategory, String busType, String busId) { SysAnnouncement announcement = new SysAnnouncement(); announcement.setTitle(title); announcement.setMsgContent(msgContent); announcement.setSender(fromUser); announcement.setPriority(CommonConst.PRIORITY_M); announcement.setMsgType(CommonConst.MSG_TYPE_UESR); announcement.setSendStatus(CommonConst.HAS_SEND); announcement.setSendTime(new Date()); announcement.setMsgCategory(setMsgCategory); announcement.setDelFlag(CommonConst.NOT_DELETED); announcement.setBusId(busId); announcement.setBusType(busType); announcement.setOpenType(Objects.requireNonNull(AnnouncementType.getByType(busType)).getOpenType()); announcement.setOpenPage(Objects.requireNonNull(AnnouncementType.getByType(busType)).getOpenPage()); sysAnnouncementMapper.insert(announcement); // 2.插入用户通告阅读标记表记录 String[] userIds = toUser.split(","); for (String userId : userIds) { if (StrUtil.isNotEmpty(userId)) { SysUser sysUser = sysUserMapper.getUserByName(userId); if (sysUser == null) { continue; } SysAnnouncementSend announcementSend = new SysAnnouncementSend(); announcementSend.setAnntId(announcement.getId()); announcementSend.setUserId(sysUser.getId()); announcementSend.setReadFlag(CommonConst.NO_READ_FLAG); sysAnnouncementSendMapper.insert(announcementSend); JSONObject obj = JSONUtil.createObj(); obj.set(WebSocketConst.MSG_CMD, WebSocketConst.CMD_USER); obj.set(WebSocketConst.MSG_USER_ID, sysUser.getId()); obj.set(WebSocketConst.MSG_ID, announcement.getId()); obj.set(WebSocketConst.MSG_TXT, announcement.getTitle()); appWebSocketHandler.sendOneMessage(sysUser.getId(), obj.toString()); } } } @Override public void addLog(LogDTO logDTO) { if (StrUtil.isEmpty(logDTO.getId())) { logDTO.setId(String.valueOf(IdWorker.getId())); } sysLogMapper.saveLog(logDTO); } @Override public void addLog(String logContent, Integer logType, Integer operateType) { LogDTO sysLog = new LogDTO(); sysLog.setId(String.valueOf(IdWorker.getId())); sysLog.setLogContent(logContent); sysLog.setLogType(logType); sysLog.setOperateType(operateType); try { //获取request HttpServletRequest request = SystemContextUtil.getHttpServletRequest(); //设置IP地址 sysLog.setIp(HttpServletUtil.getIpAddr(request)); } catch (Exception e) { sysLog.setIp("127.0.0.1"); } //获取登录用户信息 if (StpUtil.isLogin()) { LoginUser user = SystemContextUtil.currentLoginUser(); if (user != null) { sysLog.setUserid(user.getUsername()); sysLog.setUsername(user.getRealname()); } } sysLog.setCreateTime(new Date()); //保存系统日志 sysLogMapper.saveLog(sysLog); } }