SysUserServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470
  1. package com.ydtech.modules.admin.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.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.ydtech.core.page.HttpResult;
  9. import com.ydtech.core.page.PageResult;
  10. import com.ydtech.modules.admin.dao.SysUserMapper;
  11. import com.ydtech.modules.admin.model.*;
  12. import com.ydtech.modules.admin.model.vo.SysUser2Vo;
  13. import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
  14. import com.ydtech.modules.admin.model.vo.SysUserInternalVO;
  15. import com.ydtech.modules.admin.model.vo.SysUserVO;
  16. import com.ydtech.modules.admin.service.*;
  17. import com.ydtech.modules.base.model.dto.PageDto;
  18. import com.ydtech.modules.base.model.vo.PageVo;
  19. import com.ydtech.modules.esm.model.EsmUserImage;
  20. import com.ydtech.modules.esm.model.EsmUserReferrer;
  21. import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
  22. import com.ydtech.modules.esm.service.EsmUserImageService;
  23. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  24. import com.ydtech.security.utils.PasswordUtils;
  25. import com.ydtech.utils.StringUtils;
  26. import com.ydtech.utils.idgen.IdGenerate;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import java.util.*;
  31. import java.util.function.Function;
  32. import java.util.stream.Collectors;
  33. @Service
  34. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
  35. @Autowired
  36. private SysMenuService sysMenuService;
  37. @Autowired
  38. private SysRoleMenuService sysRoleMenuService;
  39. @Autowired
  40. private SysDeptService sysDeptService;
  41. @Autowired
  42. private SysUserMapper sysUserMapper;
  43. @Autowired
  44. private SysUserRoleService sysUserRoleService;
  45. @Autowired
  46. private EsmUserReferrerService esmUserReferrerService;
  47. @Autowired
  48. private SysUserInfoService sysUserInfoService;
  49. @Autowired
  50. private EsmUserImageService esmUserImageService;
  51. @Override
  52. public SysUser findByUsername(String username) {
  53. SysUser sysUser = null;
  54. if (StringUtils.isNotEmpty(username)) {
  55. sysUser = getById(username);
  56. }
  57. return sysUser;
  58. }
  59. @Override
  60. public SysUser findByPhone(String phone) {
  61. SysUser sysUser = null;
  62. LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
  63. lqw.eq(StringUtils.isNotEmpty(phone), SysUser::getMobile, phone);
  64. List<SysUser> lst = list(lqw);
  65. if (lst.size() > 0) {
  66. sysUser = lst.get(0);
  67. }
  68. return sysUser;
  69. }
  70. @Override
  71. public Set<String> findPermissions(SysUser sysUser) {
  72. Set<String> perms = new HashSet<>();
  73. String sql = "";
  74. List<String> lsPerms = null;
  75. if (sysUser.getId().equalsIgnoreCase("admin")) {
  76. LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<>();
  77. lqw.isNotNull(SysMenu::getPerms);
  78. lqw.select(SysMenu::getPerms);
  79. lsPerms = sysMenuService.listObjs(lqw, new Function<Object, String>() {
  80. @Override
  81. public String apply(Object id) {
  82. return id.toString();
  83. }
  84. });
  85. } else {
  86. List<SysMenu> sysMenuList = sysRoleMenuService.gainMenuIds(sysUser.getId());
  87. lsPerms =
  88. sysMenuList.stream().filter(a -> StringUtils.isNotEmpty(a.getPerms())).map(SysMenu::getPerms).collect(Collectors.toList());
  89. }
  90. if (lsPerms != null && lsPerms.size() > 0) {
  91. for (String perm : lsPerms) {
  92. if (!StringUtils.isNullOrEmpty(perm)) {
  93. perms.add(perm);
  94. }
  95. }
  96. }
  97. return perms;
  98. }
  99. // @Override
  100. // public Set<String> findPermissions(SysUser sysUser) {
  101. // Set<String> perms = new HashSet<>();
  102. // String sql = "";
  103. // JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  104. // List<String> lsPerms = null;
  105. //
  106. // if (sysUser.getId().equalsIgnoreCase("admin")) {
  107. // sql = "SELECT perms FROM sys_menu WHERE perms IS NOT NULL AND perms <> ''";
  108. //
  109. // lsPerms = jdbcTemplate.queryForList(sql, String.class);
  110. // } else {
  111. // sql = "SELECT perms FROM sys_menu sm WHERE sm.id IN ( " +
  112. // "SELECT menu_id FROM sys_role_menu srm, sys_user_role sur ,sys_user su " +
  113. // "WHERE srm.role_id=sur.role_id " +
  114. // "AND sur.user_id=su.id AND su.id=?) " +
  115. // "AND perms IS NOT NULL AND perms <> ''"
  116. // ;
  117. //
  118. // lsPerms = jdbcTemplate.queryForList(sql, String.class, sysUser.getId());
  119. // }
  120. //
  121. // if (lsPerms != null && lsPerms.size() > 0) {
  122. // for (String perm : lsPerms) {
  123. // if (!StringUtils.isNullOrEmpty(perm)) {
  124. // perms.add(perm);
  125. // }
  126. // }
  127. // }
  128. //
  129. // return perms;
  130. // }
  131. @Override
  132. public List<SysUserRole> findUserRoles(Long userId) {
  133. return null;
  134. }
  135. @Override
  136. public PageResult selectPagingCustom(int pageNumber, int pageSize, String name, String deptCode) {
  137. return null;
  138. }
  139. /**
  140. * 获取用户列表
  141. *
  142. * @param page 分页信息
  143. * @param sysUser 查询条件
  144. * @param containsSubDept 是否汉堡下级机构
  145. * @return
  146. */
  147. @Override
  148. public IPage<SysUser> selectUserPage(Page page, SysUser sysUser, String containsSubDept) {
  149. return baseMapper.selectUserPage(page, sysUser, containsSubDept);
  150. }
  151. @Override
  152. public void findSysUseresmUserInternalVORoles(PageResult pageResult) {
  153. }
  154. @Override
  155. public Integer deleteFlag(List<SysUser> lsSysUser) {
  156. List<String> ids = lsSysUser.stream().map(SysUser::getId).collect(Collectors.toList());
  157. LambdaUpdateWrapper<SysUser> lqw = new LambdaUpdateWrapper<>();
  158. lqw.set(SysUser::getStatus, "0");
  159. lqw.in(SysUser::getId, ids);
  160. return update(lqw) == true ? ids.size() : 0;
  161. }
  162. @Override
  163. public SysUser findById(String id) {
  164. if (!StringUtils.isNullOrEmpty(id)) {
  165. return getById(id);
  166. }
  167. return null;
  168. }
  169. @Override
  170. public SysUser findByUserId(String userId) {
  171. SysUser sysUser = null;
  172. if (!StringUtils.isNullOrEmpty(userId)) {
  173. sysUser = getById(userId);
  174. }
  175. return sysUser;
  176. }
  177. @Override
  178. public SysUserVO gainUserInternal(String userId) {
  179. return super.baseMapper.gainInternalUser(userId);
  180. }
  181. @Override
  182. public SysUserVO gainUserInternalByDeptId(String deptId) {
  183. return super.baseMapper.gainInternalUserByDeptId(deptId);
  184. }
  185. @Override
  186. public List<SysUserVO> findByReferrerId(String deptId) {
  187. return super.baseMapper.findByReferrerId(deptId);
  188. }
  189. @Override
  190. public PageVo gainUserPage(PageDto pageDto) {
  191. PageVo<SysUserBaseVO> pageVo = new PageVo();
  192. //获取分页数量
  193. int total = super.baseMapper.gainUserBaseInfoCount(pageDto);
  194. //计算mysql分页起索引
  195. int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize();
  196. // int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize() + 1;
  197. //计算mysql分页总页数
  198. int totalPages = total % pageDto.getPageSize() == 0 ? total / pageDto.getPageSize() : total / pageDto.getPageSize() + 1;
  199. // if(pageRequest.getPageNum() > 0){
  200. // int newPageNum = pageRequest.getPageNum() -1;
  201. // pageRequest.setPageNum(newPageNum * pageRequest.getPageSize());
  202. // }
  203. //响应
  204. pageVo.setTotalSize(total);
  205. pageVo.setPageNum(pageDto.getPageNum());
  206. pageVo.setPageSize(pageDto.getPageSize());
  207. pageVo.setTotalPages(totalPages);
  208. //请求替换分页开始索引
  209. pageDto.setPageNum(firstIndex);
  210. pageVo.setContent(super.baseMapper.gainUserBaseInfo(pageDto));
  211. return pageVo;
  212. }
  213. @Override
  214. public String gainNextUserId(String deptId) {
  215. int noCount = 3;//顺序号是几位的
  216. String nextPK;
  217. QueryWrapper<SysUser> lq = new QueryWrapper<>();
  218. lq.select(" MAX(id) as id ");
  219. // lq.eq("dept_id", deptId);
  220. lq.likeRight("id", deptId);
  221. SysUser userMaxId = getOne(lq);
  222. String maxId = "";
  223. if (null != userMaxId) maxId = userMaxId.getId();
  224. if (StringUtils.isNullOrEmpty(maxId)) {
  225. nextPK = deptId + "001";
  226. } else {
  227. nextPK = IdGenerate.nextCode(maxId, noCount);
  228. }
  229. return nextPK;
  230. }
  231. @Override
  232. public SysUserInternalVO gainUserSynthesisInfo(String userId) {
  233. SysUserInternalVO vo = new SysUserInternalVO();
  234. SysUser sysUser = getById(userId);
  235. // EsmUserInternal sysUserInternal = esmUserInternalService.selectByPk(userId);
  236. String pDeptId = sysUser.getDeptId();
  237. if (pDeptId.indexOf("D") > 1) {
  238. pDeptId = sysUser.getDeptId().substring(0, pDeptId.indexOf("D"));
  239. }
  240. SysDept sysDept = sysDeptService.getById(pDeptId);
  241. vo.setSysUser(sysUser);
  242. vo.setSysDept(sysDept);
  243. // vo.setSysUserInternal(sysUserInternal);
  244. return vo;
  245. }
  246. @Override
  247. public String findMaxId(String deptId) {
  248. QueryWrapper<SysUser> qw = new QueryWrapper<>();
  249. qw.select("IFNULL(MAX(id),0) maxId");
  250. qw.eq("dept_id", deptId);
  251. Map<String, Object> m = getMap(qw);
  252. String maxId = m.get("maxId").toString();
  253. return maxId;
  254. }
  255. @Override
  256. public boolean check(String userId, Integer approvalStatus, String approvalOpinion) {
  257. SysUser user = getById(userId);
  258. // user.setApprovalStatus(approvalStatus);
  259. user.setApprovalOpinion(approvalOpinion);
  260. return updateById(user);
  261. }
  262. @Override
  263. public SysUserBaseVO selectUserById(String userId) {
  264. return sysUserMapper.selectUserById(userId);
  265. }
  266. @Override
  267. @Transactional
  268. public boolean saveUser(SysUser sysUser) {
  269. // 判断用户id是否存在
  270. if (StringUtils.isNullOrEmpty(sysUser.getId())) {
  271. sysUser.setId(gainNextUserId(sysUser.getDeptId()));
  272. sysUser.setMobile(sysUser.getMobile());
  273. }
  274. // 角色信息
  275. SysUserRole sur = new SysUserRole();
  276. sur.setUserId(sysUser.getId());
  277. sur.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  278. // 删除角色
  279. sysUserRoleService.deleteByUserId(sysUser.getId());
  280. // 删除推荐人
  281. esmUserReferrerService.deldeleteByReferrerId(sysUser.getId());
  282. // 构建推荐人信息
  283. EsmUserReferrer eur = new EsmUserReferrer();
  284. eur.setId(sysUser.getId());
  285. eur.setReferrerId(sysUser.getReferrerId());//推荐人
  286. eur.setReferrerName(sysUser.getReferrerName());
  287. // 新增或跟新用户表
  288. save(sysUser);
  289. // 保存推荐人
  290. esmUserReferrerService.save(eur);
  291. // 保存角色
  292. sysUserRoleService.save(sur);
  293. return true;
  294. }
  295. @Override
  296. @Transactional
  297. public HttpResult saveUserInfo(SysUser2Vo sysUserVo) {
  298. SysUser sysUser = sysUserVo.getSysUser();
  299. String userId = gainNextUserId(sysUser.getDeptId());
  300. sysUser.setId(userId);
  301. save(sysUser);
  302. //角色配置
  303. SysUserRole userRole = new SysUserRole();
  304. userRole.setUserId(sysUser.getId());
  305. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  306. sysUserRoleService.save(userRole);
  307. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  308. //推荐人
  309. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  310. }
  311. // EsmUserReferrer eur = new EsmUserReferrer();
  312. // eur.setId(sysUser.getId());
  313. // eur.setReferrerName(sysUser.getReferrerName());
  314. // eur.setReferrerId(sysUser.getReferrerId());
  315. // eur.setLevel(1);
  316. //
  317. // esmUserReferrerService.save(eur);
  318. SysUserInfo userInfo = sysUserVo.getSysUserInfo();
  319. if (userInfo != null) {
  320. userInfo.setId(sysUser.getId());
  321. }
  322. // userInfo.setId(sysUser.getId());
  323. sysUserInfoService.save(userInfo);
  324. List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
  325. List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList());
  326. esmUserImageService.saveBatch(esmUserImages);
  327. return HttpResult.ok("新增成功");
  328. }
  329. @Override
  330. @Transactional
  331. public HttpResult updateUserInfo(String userId, SysUser2Vo sysUserVo) {
  332. SysUser sysUser = sysUserVo.getSysUser();
  333. //处理密码
  334. if (StringUtils.isNotEmpty(sysUser.getPassword())) {
  335. String salt = PasswordUtils.getSalt();
  336. String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
  337. sysUser.setPassword(pwd);
  338. sysUser.setSalt(salt);
  339. } else {
  340. sysUser.setPassword(null);
  341. }
  342. updateById(sysUser);
  343. //角色配置
  344. SysUserRole userRole = new SysUserRole();
  345. userRole.setUserId(userId);
  346. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  347. userRole.setLastUpdateBy(sysUser.getCreateBy());
  348. userRole.setLastUpdateTime(new Date());
  349. sysUserRoleService.updateById(userRole);
  350. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  351. //推荐人
  352. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  353. }
  354. // EsmUserReferrer referrer = esmUserReferrerService.getById(userId);
  355. // EsmUserReferrer eur = new EsmUserReferrer();
  356. // eur.setId(userId);
  357. // eur.setReferrerName(sysUser.getReferrerName());
  358. // eur.setReferrerId(sysUser.getReferrerId());
  359. // if (null != referrer) {
  360. // eur.setLevel(referrer.getLevel() + 1);
  361. // } else {
  362. // eur.setLevel(1);
  363. // }
  364. // esmUserReferrerService.updateById(eur);
  365. //用户详情信息
  366. SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
  367. sysUserInfo.setId(userId);
  368. if (null == sysUserInfo.getRemark()) sysUserInfo.setRemark("");
  369. sysUserInfoService.saveOrUpdate(sysUserInfo);
  370. return HttpResult.ok("修改成功");
  371. }
  372. }