From 7ef4892f9f24f941aca37e6b3991b808a0aca619 Mon Sep 17 00:00:00 2001 From: zhanghua <314079846@qq.com> Date: 星期五, 08 九月 2023 11:16:35 +0800 Subject: [PATCH] 优化 --- ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java | 127 +++++++++++++++++++++++++++++++++++------- 1 files changed, 105 insertions(+), 22 deletions(-) diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java index d96a0ed..b2daa9f 100644 --- a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java +++ b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java @@ -1,9 +1,14 @@ package com.ycl.service.user.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.util.PageUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.druid.sql.PagerUtils; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.bo.AdminUserDetails; @@ -45,9 +50,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.time.LocalDateTime; +import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -85,8 +89,9 @@ @Override public UmsAdmin getAdminByUsername(String username) { - UmsAdmin admin = getCacheService().getAdmin(username); - if (admin != null) return admin; + // UmsAdmin admin = getCacheService().getAdmin(username); + // if (admin != null) return admin; + UmsAdmin admin = null; QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UmsAdmin::getUsername, username); List<UmsAdmin> adminList = list(wrapper); @@ -109,6 +114,9 @@ //鏌ヨ鏄惁鏈夌浉鍚岀敤鎴峰悕鐨勭敤鎴� QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(UmsAdmin::getUsername, umsAdmin.getUsername()); + if (umsAdmin.getId() != null) { + wrapper.lambda().ne(UmsAdmin::getId, umsAdmin.getId()); + } List<UmsAdmin> umsAdminList = list(wrapper); if (umsAdminList.size() > 0) { return null; @@ -116,15 +124,35 @@ //灏嗗瘑鐮佽繘琛屽姞瀵嗘搷浣� String encodePassword = passwordEncoder.encode(umsAdmin.getPassword()); - if ( !umsAdmin.getPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) { + if (umsAdmin.getId() == null && !umsAdmin.getPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) { Asserts.fail("瀵嗙爜闀垮害8鍒�16浣嶄笖瀵嗙爜涓殑瀛楃蹇呴』鍖呭惈瀛楁瘝锛堝ぇ鍐欐垨鑰呭皬鍐欙級鍜屽繀椤诲寘鍚暟瀛楋紝涓嶈兘鍖呭惈绌烘牸"); } - if(umsAdmin.getUsername().equals(umsAdmin.getPassword())){ - Asserts.fail("瀵嗙爜涓嶈兘鍜岀櫥褰曞悕瀹屽叏涓�鑷�"); + if (umsAdmin.getUsername().equals(umsAdmin.getPassword())) { + Asserts.fail("瀵嗙爜涓嶈兘鍜岀櫥褰曞悕瀹屽叏涓�鑷�"); } umsAdmin.setPassword(encodePassword); - baseMapper.insert(umsAdmin); + if (umsAdminParam.getDays() != null) { + Date date = new Date(); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + // 鎶婃棩鏈熷線鍚庡鍔犱竴澶�,鏁存暟 寰�鍚庢帹,璐熸暟寰�鍓嶇Щ鍔� + calendar.add(Calendar.DATE, umsAdminParam.getDays()); + // 杩欎釜鏃堕棿灏辨槸鏃ユ湡寰�鍚庢帹涓�澶╃殑缁撴灉 + date = calendar.getTime(); + umsAdmin.setExpirationDate(date); + } else { + umsAdmin.setExpirationDate(new Date(2090,1,1)); + } + if (umsAdmin.getId() != null) { + baseMapper.updateById(umsAdmin); + } else { + baseMapper.insert(umsAdmin); + } + LambdaQueryWrapper<UmsAdminRoleRelation> deleteWrapper = new QueryWrapper<UmsAdminRoleRelation>().lambda() + .eq(UmsAdminRoleRelation::getAdminId, umsAdmin.getId()); + + umsAdminRoleRelationService.remove(deleteWrapper); //娣诲姞瑙掕壊鎺堟潈 List<Long> ids = umsAdminParam.getRoleIds(); if (!ids.isEmpty()) { @@ -138,6 +166,8 @@ umsAdminRoleRelationService.saveBatch(roleIds); } + umsDepartManageMapper.deletedByDepartId(umsAdmin.getId()); + //娣诲姞閮ㄩ棬 UmsDepartManage departManage = new UmsDepartManage(); departManage.setUserId(umsAdmin.getId()); @@ -146,7 +176,7 @@ departManage.setUpdateTime(new Date()); umsDepartManageMapper.insert(departManage); - baseMapper.updateById(umsAdmin); + // baseMapper.updateById(umsAdmin); return umsAdmin; } @@ -167,10 +197,10 @@ //灏嗗瘑鐮佽繘琛屽姞瀵嗘搷浣� String encodePassword = passwordEncoder.encode(umsAdmin.getPassword()); - if ( !umsAdmin.getPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) { + if (!umsAdmin.getPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) { Asserts.fail("瀵嗙爜闀垮害8鍒�16浣嶄笖瀵嗙爜涓殑瀛楃蹇呴』鍖呭惈瀛楁瘝锛堝ぇ鍐欐垨鑰呭皬鍐欙級鍜屽繀椤诲寘鍚暟瀛楋紝涓嶈兘鍖呭惈绌烘牸"); } - if(umsAdmin.getUsername().equals(umsAdmin.getPassword())){ + if (umsAdmin.getUsername().equals(umsAdmin.getPassword())) { Asserts.fail("瀵嗙爜涓嶈兘鍜岀櫥褰曞悕瀹屽叏涓�鑷�"); } umsAdmin.setPassword(encodePassword); @@ -230,12 +260,51 @@ //瀵嗙爜闇�瑕佸鎴风鍔犲瘑鍚庝紶閫� try { AdminUserDetails userDetails = (AdminUserDetails) loadUserByUsername(username); + + UmsAdmin admin = userDetails.getUmsAdmin(); + LocalDateTime nowTime = LocalDateTime.now(); + nowTime = nowTime.plusMinutes(-15); + if (admin.getPasswordErrorNum() != null && admin.getPasswordErrorNum() >= 5 + && admin.getPasswordErrorLastTime().isAfter(nowTime)) { + admin.setPasswordErrorLastTime(LocalDateTime.now()); + updateById(admin); + Asserts.fail("鐧诲綍澶辫触瓒呰繃5娆★紝姝よ处鍙疯閿佸畾锛岃15鍒嗛挓鍚庡啀璇曘��"); + } if (!passwordEncoder.matches(password, userDetails.getPassword())) { + if (admin.getPasswordErrorNum() == null) { + admin.setPasswordErrorNum(1); + } else { + admin.setPasswordErrorNum(admin.getPasswordErrorNum() + 1); + } + admin.setPasswordErrorLastTime(LocalDateTime.now()); + updateById(admin); Asserts.fail("瀵嗙爜涓嶆纭�"); } if (!userDetails.isEnabled()) { Asserts.fail("甯愬彿宸茶绂佺敤"); } + admin.setPasswordErrorNum(0); + updateById(admin); + + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(authentication); + //鏍规嵁鐢ㄦ埛id锛岀敤鎴峰鍚� + token = jwtTokenUtil.generateToken(userDetails.getUserId(), userDetails.getUsername()); + redisService.set(RedisKey.PLATFORM_TOKEN_KEY.concat(username), token, LiveTimeMillisecond.s7200.time); +// updateLoginTimeByUsername(username); + //insertLoginLog(username); + } catch (AuthenticationException e) { + LOGGER.warn("鐧诲綍寮傚父:{}", e.getMessage()); + } + return token; + } + + @Override + public String getOAuthToken(String username) { + String token = null; + //瀵嗙爜闇�瑕佸鎴风鍔犲瘑鍚庝紶閫� + try { + AdminUserDetails userDetails = (AdminUserDetails) loadUserByUsername(username); UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authentication); //鏍规嵁鐢ㄦ埛id锛岀敤鎴峰鍚� @@ -369,7 +438,7 @@ && !param.getNewPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) { return -1; } - if(param.getUsername().equals(param.getNewPassword())){ + if (param.getUsername().equals(param.getNewPassword())) { return -4; } QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>(); @@ -393,10 +462,15 @@ //鑾峰彇鐢ㄦ埛淇℃伅 UmsAdmin admin = getAdminByUsername(username); if (admin != null) { + if (admin.getExpirationDate() != null) { + if (!admin.getExpirationDate().after(new Date())) { + Asserts.fail("璐﹀彿宸茶繃鏈熻鑱旂郴绠$悊鍛�"); + } + } List<UmsMenu> resourceList = getResourceList(admin.getId()); return new AdminUserDetails(admin, resourceList); } - throw new UsernameNotFoundException("鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒"); + throw new UsernameNotFoundException("鐢ㄦ埛涓嶅瓨鍦�"); } @Override @@ -432,9 +506,13 @@ if (pageUserVO.getJobTitle() != null && !("".equals(pageUserVO.getJobTitle()))) { umsAdmin.setJobTitle(pageUserVO.getJobTitle()); } - Page<UmsAdmin> page1 = baseMapper.selectCondPage(page, umsAdmin); - - return page1; + PageUtil.setFirstPageNo(1); + int offset = PageUtil.getStart(current, pageSize); + List<UmsAdmin> list = baseMapper.selectCondList(umsAdmin, offset, pageSize); + Long total = baseMapper.selectCondTotal(umsAdmin); + page.setRecords(list); + page.setTotal(total); + return page; } @Override @@ -456,7 +534,7 @@ roleStrBuffer.append(","); } }); - roleStrBuffer.deleteCharAt(roleStrBuffer.length()-1); + roleStrBuffer.deleteCharAt(roleStrBuffer.length() - 1); res1.setRoles(roleStrBuffer.toString()); StringBuffer departStrBuffer = new StringBuffer(); List<UmsDepart> departs = item.getDepart(); @@ -467,19 +545,19 @@ departStrBuffer.append(","); } }); - departStrBuffer.deleteCharAt(departStrBuffer.length()-1); + departStrBuffer.deleteCharAt(departStrBuffer.length() - 1); res1.setDepart(departStrBuffer.toString()); res1.setJobTitle(item.getJobTitle()); Date createTime = item.getCreateTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - if (createTime != null){ + if (createTime != null) { res1.setCreateTime(sdf.format(createTime)); } Integer status = item.getStatus(); - if (status.equals(1)){ + if (status.equals(1)) { res1.setStatus("鍚敤"); - }else { + } else { res1.setStatus("绂佺敤"); } return res1; @@ -537,5 +615,10 @@ return str; } + @Override + public UmsAdmin getByOpenid(String openid) { + LambdaQueryWrapper<UmsAdmin> wrapper = new LambdaQueryWrapper<UmsAdmin>().eq(UmsAdmin::getOpenid, openid).last("limit 1"); + return baseMapper.selectOne(wrapper); + } } -- Gitblit v1.8.0