dad84106f9c421f05fca1c45b55229875b1877fd.svn-base 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. package org.jeecg.modules.system.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.jeecg.common.api.vo.Result;
  9. import org.jeecg.common.constant.CacheConstant;
  10. import org.jeecg.common.constant.CommonConstant;
  11. import org.jeecg.common.system.api.ISysBaseAPI;
  12. import org.jeecg.common.system.vo.LoginUser;
  13. import org.jeecg.common.system.vo.SysUserCacheInfo;
  14. import org.jeecg.common.util.PasswordUtil;
  15. import org.jeecg.common.util.UUIDGenerator;
  16. import org.jeecg.common.util.oConvertUtils;
  17. import org.jeecg.modules.base.service.BaseCommonService;
  18. import org.jeecg.modules.system.entity.*;
  19. import org.jeecg.modules.system.mapper.*;
  20. import org.jeecg.modules.system.model.SysUserSysDepartModel;
  21. import org.jeecg.modules.system.service.ISysUserService;
  22. import org.jeecg.modules.system.vo.SysUserDepVo;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.cache.annotation.CacheEvict;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import javax.annotation.Resource;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. /**
  31. * <p>
  32. * 用户表 服务实现类
  33. * </p>
  34. *
  35. * @Author: scott
  36. * @Date: 2018-12-20
  37. */
  38. @Service
  39. @Slf4j
  40. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
  41. @Autowired
  42. private SysUserMapper userMapper;
  43. @Autowired
  44. private SysPermissionMapper sysPermissionMapper;
  45. @Autowired
  46. private SysUserRoleMapper sysUserRoleMapper;
  47. @Autowired
  48. private SysUserDepartMapper sysUserDepartMapper;
  49. @Autowired
  50. private ISysBaseAPI sysBaseAPI;
  51. @Autowired
  52. private SysDepartMapper sysDepartMapper;
  53. @Autowired
  54. private SysRoleMapper sysRoleMapper;
  55. @Autowired
  56. private SysDepartRoleUserMapper departRoleUserMapper;
  57. @Autowired
  58. private SysDepartRoleMapper sysDepartRoleMapper;
  59. @Resource
  60. private BaseCommonService baseCommonService;
  61. @Autowired
  62. private SysThirdAccountMapper sysThirdAccountMapper;
  63. @Autowired
  64. ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
  65. @Autowired
  66. ThirdAppDingtalkServiceImpl dingtalkService;
  67. @Override
  68. @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
  69. public Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) {
  70. SysUser user = userMapper.getUserByName(username);
  71. String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt());
  72. if (!user.getPassword().equals(passwordEncode)) {
  73. return Result.error("旧密码输入错误!");
  74. }
  75. if (oConvertUtils.isEmpty(newpassword)) {
  76. return Result.error("新密码不允许为空!");
  77. }
  78. if (!newpassword.equals(confirmpassword)) {
  79. return Result.error("两次输入密码不一致!");
  80. }
  81. String password = PasswordUtil.encrypt(username, newpassword, user.getSalt());
  82. this.userMapper.update(new SysUser().setPassword(password), new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
  83. return Result.ok("密码重置成功!");
  84. }
  85. @Override
  86. @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
  87. public Result<?> changePassword(SysUser sysUser) {
  88. String salt = oConvertUtils.randomGen(8);
  89. sysUser.setSalt(salt);
  90. String password = sysUser.getPassword();
  91. String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
  92. sysUser.setPassword(passwordEncode);
  93. this.userMapper.updateById(sysUser);
  94. return Result.ok("密码修改成功!");
  95. }
  96. @Override
  97. @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
  98. @Transactional(rollbackFor = Exception.class)
  99. public boolean deleteUser(String userId) {
  100. //1.删除用户
  101. this.removeById(userId);
  102. return false;
  103. }
  104. @Override
  105. @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
  106. @Transactional(rollbackFor = Exception.class)
  107. public boolean deleteBatchUsers(String userIds) {
  108. //1.删除用户
  109. this.removeByIds(Arrays.asList(userIds.split(",")));
  110. return false;
  111. }
  112. @Override
  113. public SysUser getUserByName(String username) {
  114. return userMapper.getUserByName(username);
  115. }
  116. @Override
  117. @Transactional
  118. public void addUserWithRole(SysUser user, String roles) {
  119. this.save(user);
  120. if(oConvertUtils.isNotEmpty(roles)) {
  121. String[] arr = roles.split(",");
  122. for (String roleId : arr) {
  123. SysUserRole userRole = new SysUserRole(user.getId(), roleId);
  124. sysUserRoleMapper.insert(userRole);
  125. }
  126. }
  127. }
  128. @Override
  129. @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true)
  130. @Transactional
  131. public void editUserWithRole(SysUser user, String roles) {
  132. this.updateById(user);
  133. //先删后加
  134. sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
  135. if(oConvertUtils.isNotEmpty(roles)) {
  136. String[] arr = roles.split(",");
  137. for (String roleId : arr) {
  138. SysUserRole userRole = new SysUserRole(user.getId(), roleId);
  139. sysUserRoleMapper.insert(userRole);
  140. }
  141. }
  142. }
  143. @Override
  144. public List<String> getRole(String username) {
  145. return sysUserRoleMapper.getRoleByUserName(username);
  146. }
  147. /**
  148. * 通过用户名获取用户角色集合
  149. * @param username 用户名
  150. * @return 角色集合
  151. */
  152. @Override
  153. public Set<String> getUserRolesSet(String username) {
  154. // 查询用户拥有的角色集合
  155. List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
  156. log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
  157. return new HashSet<>(roles);
  158. }
  159. /**
  160. * 通过用户名获取用户权限集合
  161. *
  162. * @param username 用户名
  163. * @return 权限集合
  164. */
  165. @Override
  166. public Set<String> getUserPermissionsSet(String username) {
  167. Set<String> permissionSet = new HashSet<>();
  168. List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
  169. for (SysPermission po : permissionList) {
  170. // // TODO URL规则有问题?
  171. // if (oConvertUtils.isNotEmpty(po.getUrl())) {
  172. // permissionSet.add(po.getUrl());
  173. // }
  174. if (oConvertUtils.isNotEmpty(po.getPerms())) {
  175. permissionSet.add(po.getPerms());
  176. }
  177. }
  178. log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) );
  179. return permissionSet;
  180. }
  181. @Override
  182. public SysUserCacheInfo getCacheUser(String username) {
  183. SysUserCacheInfo info = new SysUserCacheInfo();
  184. info.setOneDepart(true);
  185. // SysUser user = userMapper.getUserByName(username);
  186. // info.setSysUserCode(user.getUsername());
  187. // info.setSysUserName(user.getRealname());
  188. LoginUser user = sysBaseAPI.getUserByName(username);
  189. if(user!=null) {
  190. info.setSysUserCode(user.getUsername());
  191. info.setSysUserName(user.getRealname());
  192. info.setSysOrgCode(user.getOrgCode());
  193. }
  194. //多部门支持in查询
  195. List<SysDepart> list = sysDepartMapper.queryUserDeparts(user.getId());
  196. List<String> sysMultiOrgCode = new ArrayList<String>();
  197. if(list==null || list.size()==0) {
  198. //当前用户无部门
  199. //sysMultiOrgCode.add("0");
  200. }else if(list.size()==1) {
  201. sysMultiOrgCode.add(list.get(0).getOrgCode());
  202. }else {
  203. info.setOneDepart(false);
  204. for (SysDepart dpt : list) {
  205. sysMultiOrgCode.add(dpt.getOrgCode());
  206. }
  207. }
  208. info.setSysMultiOrgCode(sysMultiOrgCode);
  209. return info;
  210. }
  211. // 根据部门Id查询
  212. @Override
  213. public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId,String username) {
  214. return userMapper.getUserByDepId(page, departId,username);
  215. }
  216. @Override
  217. public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username) {
  218. return userMapper.getUserByDepIds(page, departIds,username);
  219. }
  220. @Override
  221. public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
  222. List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
  223. Map<String, String> res = new HashMap<String, String>();
  224. list.forEach(item -> {
  225. if (res.get(item.getUserId()) == null) {
  226. res.put(item.getUserId(), item.getDepartName());
  227. } else {
  228. res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
  229. }
  230. }
  231. );
  232. return res;
  233. }
  234. @Override
  235. public IPage<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper) {
  236. LambdaQueryWrapper<SysUser> lambdaQueryWrapper = queryWrapper.lambda();
  237. lambdaQueryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
  238. lambdaQueryWrapper.inSql(SysUser::getId, "SELECT user_id FROM sys_user_depart WHERE dep_id = '" + departId + "'");
  239. return userMapper.selectPage(page, lambdaQueryWrapper);
  240. }
  241. @Override
  242. public IPage<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) {
  243. List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams);
  244. Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams);
  245. IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
  246. result.setRecords(list);
  247. return result;
  248. }
  249. // 根据角色Id查询
  250. @Override
  251. public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
  252. return userMapper.getUserByRoleId(page,roleId,username);
  253. }
  254. @Override
  255. @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username")
  256. public void updateUserDepart(String username,String orgCode) {
  257. baseMapper.updateUserDepart(username, orgCode);
  258. }
  259. @Override
  260. public SysUser getUserByPhone(String phone) {
  261. return userMapper.getUserByPhone(phone);
  262. }
  263. @Override
  264. public SysUser getUserByEmail(String email) {
  265. return userMapper.getUserByEmail(email);
  266. }
  267. @Override
  268. @Transactional
  269. public void addUserWithDepart(SysUser user, String selectedParts) {
  270. // this.save(user); //保存角色的时候已经添加过一次了
  271. if(oConvertUtils.isNotEmpty(selectedParts)) {
  272. String[] arr = selectedParts.split(",");
  273. for (String deaprtId : arr) {
  274. SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
  275. sysUserDepartMapper.insert(userDeaprt);
  276. }
  277. }
  278. }
  279. @Override
  280. @Transactional(rollbackFor = Exception.class)
  281. @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
  282. public void editUserWithDepart(SysUser user, String departs) {
  283. this.updateById(user); //更新角色的时候已经更新了一次了,可以再跟新一次
  284. String[] arr = {};
  285. if(oConvertUtils.isNotEmpty(departs)){
  286. arr = departs.split(",");
  287. }
  288. //查询已关联部门
  289. List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
  290. if(userDepartList != null && userDepartList.size()>0){
  291. for(SysUserDepart depart : userDepartList ){
  292. //修改已关联部门删除部门用户角色关系
  293. if(!Arrays.asList(arr).contains(depart.getDepId())){
  294. List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
  295. new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId()));
  296. List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
  297. if(roleIds != null && roleIds.size()>0){
  298. departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
  299. .in(SysDepartRoleUser::getDroleId,roleIds));
  300. }
  301. }
  302. }
  303. }
  304. //先删后加
  305. sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
  306. if(oConvertUtils.isNotEmpty(departs)) {
  307. for (String departId : arr) {
  308. SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
  309. sysUserDepartMapper.insert(userDepart);
  310. }
  311. }
  312. }
  313. /**
  314. * 校验用户是否有效
  315. * @param sysUser
  316. * @return
  317. */
  318. @Override
  319. public Result<?> checkUserIsEffective(SysUser sysUser) {
  320. Result<?> result = new Result<Object>();
  321. //情况1:根据用户信息查询,该用户不存在
  322. if (sysUser == null) {
  323. result.error500("该用户不存在,请注册");
  324. baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
  325. return result;
  326. }
  327. //情况2:根据用户信息查询,该用户已注销
  328. //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------
  329. if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
  330. //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------
  331. baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
  332. result.error500("该用户已注销");
  333. return result;
  334. }
  335. //情况3:根据用户信息查询,该用户已冻结
  336. if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
  337. baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
  338. result.error500("该用户已冻结");
  339. return result;
  340. }
  341. return result;
  342. }
  343. @Override
  344. public List<SysUser> queryLogicDeleted() {
  345. return this.queryLogicDeleted(null);
  346. }
  347. @Override
  348. public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper) {
  349. if (wrapper == null) {
  350. wrapper = new LambdaQueryWrapper<>();
  351. }
  352. wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1);
  353. return userMapper.selectLogicDeleted(wrapper);
  354. }
  355. @Override
  356. public boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity) {
  357. String ids = String.format("'%s'", String.join("','", userIds));
  358. return userMapper.revertLogicDeleted(ids, updateEntity) > 0;
  359. }
  360. @Override
  361. @Transactional(rollbackFor = Exception.class)
  362. public boolean removeLogicDeleted(List<String> userIds) {
  363. String ids = String.format("'%s'", String.join("','", userIds));
  364. // 1. 删除用户
  365. int line = userMapper.deleteLogicDeleted(ids);
  366. // 2. 删除用户部门关系
  367. line += sysUserDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds));
  368. //3. 删除用户角色关系
  369. line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
  370. //4.同步删除第三方App的用户
  371. try {
  372. dingtalkService.removeThirdAppUser(userIds);
  373. wechatEnterpriseService.removeThirdAppUser(userIds);
  374. } catch (Exception e) {
  375. log.error("同步删除第三方App的用户失败:", e);
  376. }
  377. //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删)
  378. line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
  379. return line != 0;
  380. }
  381. @Override
  382. @Transactional(rollbackFor = Exception.class)
  383. public boolean updateNullPhoneEmail() {
  384. userMapper.updateNullByEmptyString("email");
  385. userMapper.updateNullByEmptyString("phone");
  386. return true;
  387. }
  388. @Override
  389. public void saveThirdUser(SysUser sysUser) {
  390. //保存用户
  391. String userid = UUIDGenerator.generate();
  392. sysUser.setId(userid);
  393. baseMapper.insert(sysUser);
  394. //获取第三方角色
  395. SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
  396. //保存用户角色
  397. SysUserRole userRole = new SysUserRole();
  398. userRole.setRoleId(sysRole.getId());
  399. userRole.setUserId(userid);
  400. sysUserRoleMapper.insert(userRole);
  401. }
  402. @Override
  403. public List<SysUser> queryByDepIds(List<String> departIds, String username) {
  404. return userMapper.queryByDepIds(departIds,username);
  405. }
  406. @Override
  407. @Transactional(rollbackFor = Exception.class)
  408. public void saveUser(SysUser user, String selectedRoles, String selectedDeparts) {
  409. //step.1 保存用户
  410. this.save(user);
  411. //step.2 保存角色
  412. if(oConvertUtils.isNotEmpty(selectedRoles)) {
  413. String[] arr = selectedRoles.split(",");
  414. for (String roleId : arr) {
  415. SysUserRole userRole = new SysUserRole(user.getId(), roleId);
  416. sysUserRoleMapper.insert(userRole);
  417. }
  418. }
  419. //step.3 保存所属部门
  420. if(oConvertUtils.isNotEmpty(selectedDeparts)) {
  421. String[] arr = selectedDeparts.split(",");
  422. for (String deaprtId : arr) {
  423. SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
  424. sysUserDepartMapper.insert(userDeaprt);
  425. }
  426. }
  427. }
  428. @Override
  429. @Transactional(rollbackFor = Exception.class)
  430. @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
  431. public void editUser(SysUser user, String roles, String departs) {
  432. //step.1 修改用户基础信息
  433. this.updateById(user);
  434. //step.2 修改角色
  435. //处理用户角色 先删后加
  436. sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
  437. if(oConvertUtils.isNotEmpty(roles)) {
  438. String[] arr = roles.split(",");
  439. for (String roleId : arr) {
  440. SysUserRole userRole = new SysUserRole(user.getId(), roleId);
  441. sysUserRoleMapper.insert(userRole);
  442. }
  443. }
  444. //step.3 修改部门
  445. String[] arr = {};
  446. if(oConvertUtils.isNotEmpty(departs)){
  447. arr = departs.split(",");
  448. }
  449. //查询已关联部门
  450. List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
  451. if(userDepartList != null && userDepartList.size()>0){
  452. for(SysUserDepart depart : userDepartList ){
  453. //修改已关联部门删除部门用户角色关系
  454. if(!Arrays.asList(arr).contains(depart.getDepId())){
  455. List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
  456. new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId()));
  457. List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
  458. if(roleIds != null && roleIds.size()>0){
  459. departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
  460. .in(SysDepartRoleUser::getDroleId,roleIds));
  461. }
  462. }
  463. }
  464. }
  465. //先删后加
  466. sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
  467. if(oConvertUtils.isNotEmpty(departs)) {
  468. for (String departId : arr) {
  469. SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
  470. sysUserDepartMapper.insert(userDepart);
  471. }
  472. }
  473. //step.4 修改手机号和邮箱
  474. // 更新手机号、邮箱空字符串为 null
  475. userMapper.updateNullByEmptyString("email");
  476. userMapper.updateNullByEmptyString("phone");
  477. }
  478. @Override
  479. public List<String> userIdToUsername(Collection<String> userIdList) {
  480. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  481. queryWrapper.in(SysUser::getId, userIdList);
  482. List<SysUser> userList = super.list(queryWrapper);
  483. return userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
  484. }
  485. }