SysUserServiceImpl.java 14 KB

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