From 46251c20b66bb1ca05058ae63a92a195e5543b90 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期四, 02 十一月 2023 21:27:37 +0800
Subject: [PATCH] 优化
---
ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java | 334 +++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 274 insertions(+), 60 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 c4f418f..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,17 +1,23 @@
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.metadata.IPage;
+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;
import com.ycl.dto.UmsAdminParam;
+import com.ycl.dto.user.UmsUserDto1;
import com.ycl.dto.UpdateAdminPasswordParam;
import com.ycl.entity.depart.UmsDepart;
import com.ycl.entity.user.*;
+import com.ycl.exception.ApiException;
import com.ycl.exception.Asserts;
import com.ycl.mapper.user.*;
import com.ycl.service.depart.UmsDepartService;
@@ -23,11 +29,8 @@
import com.ycl.utils.SpringUtil;
import com.ycl.utils.common.LiveTimeMillisecond;
import com.ycl.utils.common.MacUtils;
-import com.ycl.utils.common.PojoUtils;
-import com.ycl.utils.common.RandomUtils;
import com.ycl.utils.redis.RedisKey;
import com.ycl.vo.user.UserVO;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -46,9 +49,10 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
@@ -80,11 +84,14 @@
UmsRoleMenuRelationMapper umsRoleMenuRelationMapper;
@Resource
AdminMenuRelationMapper adminMenuRelationMapper;
+ @Resource
+ UmsMenuMapper umsMenuMapper;
@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);
@@ -100,7 +107,82 @@
@Transactional(rollbackFor = Exception.class)
public UmsAdmin register(UmsAdminParam umsAdminParam) {
UmsAdmin umsAdmin = new UmsAdmin();
- //TODO mac,ip,鑱屽姟锛岀敤鎴风被鍨�
+ BeanUtils.copyProperties(umsAdminParam, umsAdmin);
+ umsAdmin.setCreateTime(new Date());
+ umsAdmin.setStatus(1);
+// umsAdmin.setMacAddress(MacUtils.getMac());
+ //鏌ヨ鏄惁鏈夌浉鍚岀敤鎴峰悕鐨勭敤鎴�
+ 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;
+ }
+ //灏嗗瘑鐮佽繘琛屽姞瀵嗘搷浣�
+ String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
+
+ 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("瀵嗙爜涓嶈兘鍜岀櫥褰曞悕瀹屽叏涓�鑷�");
+ }
+ umsAdmin.setPassword(encodePassword);
+ 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()) {
+ List<UmsAdminRoleRelation> roleIds = new ArrayList<>();
+ for (Long id : ids) {
+ UmsAdminRoleRelation urr = new UmsAdminRoleRelation();
+ urr.setAdminId(umsAdmin.getId());
+ urr.setRoleId(id);
+ roleIds.add(urr);
+ }
+ umsAdminRoleRelationService.saveBatch(roleIds);
+ }
+
+ umsDepartManageMapper.deletedByDepartId(umsAdmin.getId());
+
+ //娣诲姞閮ㄩ棬
+ UmsDepartManage departManage = new UmsDepartManage();
+ departManage.setUserId(umsAdmin.getId());
+ departManage.setDepartId(umsAdminParam.getDepartmentId());
+ departManage.setCreateTime(new Date());
+ departManage.setUpdateTime(new Date());
+ umsDepartManageMapper.insert(departManage);
+
+ // baseMapper.updateById(umsAdmin);
+ return umsAdmin;
+ }
+
+ @Override
+ public void importExcl(UmsAdminParam umsAdminParam) {
+ UmsAdmin umsAdmin = new UmsAdmin();
BeanUtils.copyProperties(umsAdminParam, umsAdmin);
umsAdmin.setCreateTime(new Date());
umsAdmin.setStatus(1);
@@ -110,10 +192,17 @@
wrapper.lambda().eq(UmsAdmin::getUsername, umsAdmin.getUsername());
List<UmsAdmin> umsAdminList = list(wrapper);
if (umsAdminList.size() > 0) {
- return null;
+ throw new RuntimeException("鐢ㄦ埛宸插瓨鍦�");
}
//灏嗗瘑鐮佽繘琛屽姞瀵嗘搷浣�
String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
+
+ 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())) {
+ Asserts.fail("瀵嗙爜涓嶈兘鍜岀櫥褰曞悕瀹屽叏涓�鑷�");
+ }
umsAdmin.setPassword(encodePassword);
baseMapper.insert(umsAdmin);
@@ -131,34 +220,38 @@
}
//缁戝畾鑿滃崟浜庣敤鎴�
if (!ids.isEmpty()) {
- Integer size = 0;
- Long maxId = null;
+ ArrayList<UmsRoleMenuRelation> umsRoleMenuRelations = new ArrayList<>();
for (Long id : ids) {
- if (size < umsRoleMenuRelationMapper
+ umsRoleMenuRelations.addAll(umsRoleMenuRelationMapper
.selectList(new LambdaQueryWrapper<UmsRoleMenuRelation>()
- .eq(UmsRoleMenuRelation::getRoleId, id)).size()) {
- size = umsRoleMenuRelationMapper
- .selectList(new LambdaQueryWrapper<UmsRoleMenuRelation>()
- .eq(UmsRoleMenuRelation::getRoleId, id)).size();
- maxId = id;
- }
+ .eq(UmsRoleMenuRelation::getRoleId, id)));
}
- umsRoleMenuRelationMapper
- .selectList(new LambdaQueryWrapper<UmsRoleMenuRelation>()
- .eq(UmsRoleMenuRelation::getRoleId, maxId))
+ umsRoleMenuRelations
.stream()
- .forEach(item->{
+ .map(item -> item.getMenuId())
+ .collect(Collectors.toList())
+ .stream()
+ .distinct()
+ .collect(Collectors.toList())
+ .stream()
+ .forEach(item -> {
AdminMenuRelation adminMenuRelation = new AdminMenuRelation();
adminMenuRelation.setAdminId(umsAdmin.getId());
- adminMenuRelation.setMenuId(item.getMenuId());
+ adminMenuRelation.setMenuId(item);
adminMenuRelationMapper.insert(adminMenuRelation);
});
}
//瀵圭敤鎴峰悕绯荤粺榛樿娣诲姞
- umsAdmin.setNickName(RandomUtils.getUserId(umsAdmin.getId()));
- baseMapper.updateById(umsAdmin);
+ //umsAdmin.setNickName(RandomUtils.getUserId(umsAdmin.getId()));
+ //娣诲姞閮ㄩ棬
+ UmsDepartManage departManage = new UmsDepartManage();
+ departManage.setUserId(umsAdmin.getId());
+ departManage.setDepartId(umsAdminParam.getDepartmentId());
+ departManage.setCreateTime(new Date());
+ departManage.setUpdateTime(new Date());
+ umsDepartManageMapper.insert(departManage);
- return umsAdmin;
+ baseMapper.updateById(umsAdmin);
}
@Override
@@ -167,19 +260,58 @@
//瀵嗙爜闇�瑕佸鎴风鍔犲瘑鍚庝紶閫�
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);
+ //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锛岀敤鎴峰鍚�
+ 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());
}
@@ -288,24 +420,26 @@
}
@Override
- public List<UmsResource> getResourceList(Long adminId) {
- List<UmsResource> resourceList = getCacheService().getResourceList(adminId);
- if (CollUtil.isNotEmpty(resourceList)) {
- return resourceList;
+ public List<UmsMenu> getResourceList(Long adminId) {
+ List<UmsMenu> umsMenuList = getCacheService().getResourceList(adminId);
+ if (CollUtil.isNotEmpty(umsMenuList)) {
+ return umsMenuList;
}
- resourceList = umsResourceMapper.getResourceList(adminId);
- if (CollUtil.isNotEmpty(resourceList)) {
- getCacheService().setResourceList(adminId, resourceList);
- }
- return resourceList;
+ umsMenuList = umsMenuMapper.getMenuList(adminId);
+ getCacheService().setResourceList(adminId, umsMenuList);
+ return umsMenuList;
}
@Override
public int updatePassword(UpdateAdminPasswordParam param) {
- if (StrUtil.isEmpty(param.getUsername())
- || StrUtil.isEmpty(param.getOldPassword())
- || StrUtil.isEmpty(param.getNewPassword())) {
+ if (StrUtil.isNotEmpty(param.getUsername())
+ && StrUtil.isNotEmpty(param.getOldPassword())
+ && StrUtil.isNotEmpty(param.getNewPassword())
+ && !param.getNewPassword().matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$")) {
return -1;
+ }
+ if (param.getUsername().equals(param.getNewPassword())) {
+ return -4;
}
QueryWrapper<UmsAdmin> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(UmsAdmin::getUsername, param.getUsername());
@@ -328,10 +462,15 @@
//鑾峰彇鐢ㄦ埛淇℃伅
UmsAdmin admin = getAdminByUsername(username);
if (admin != null) {
- List<UmsResource> resourceList = getResourceList(admin.getId());
+ 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
@@ -340,11 +479,11 @@
}
@Override
- public IPage<UmsAdmin> pageUser(UserVO.PageUserVO pageUserVO) {
+ public Page<UmsAdmin> pageUser(UserVO.PageUserVO pageUserVO) {
int pageSize = pageUserVO.getPageSize();
int current = pageUserVO.getCurrent();
Page<UmsAdmin> page = new Page<>(current, pageSize);
- LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
+ /* LambdaQueryWrapper<UmsAdmin> queryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(pageUserVO.getKeyword())) {
queryWrapper.like(UmsAdmin::getUsername, pageUserVO.getKeyword())
@@ -356,24 +495,74 @@
}
if (PojoUtils.Vo.isUsefulSearchParam(pageUserVO.getUserType())) {
queryWrapper.eq(UmsAdmin::getUserType, pageUserVO.getUserType());
+ }*/
+ UmsAdmin umsAdmin = new UmsAdmin();
+ if (pageUserVO.getUserType() != null) {
+ umsAdmin.setUserType(pageUserVO.getUserType());
}
- if (PojoUtils.Vo.isUsefulSearchParam(pageUserVO.getDepartmentId())) {
- queryWrapper.eq(UmsAdmin::getDepartmentId, pageUserVO.getDepartmentId());
+ if (pageUserVO.getKeyword() != null && !("".equals(pageUserVO.getKeyword()))) {
+ umsAdmin.setKeyword(pageUserVO.getKeyword());
}
- Page<UmsAdmin> page1 = baseMapper.selectPage(page, queryWrapper);
- List<UmsAdmin> records = page1.getRecords();
- if (CollUtil.isNotEmpty(records)) {
- records.forEach(e -> {
- UmsDepart umsDepart = departService.getById(e.getDepartmentId());
- if (null != umsDepart) {
- e.setDepartName(umsDepart.getDepartName());
- }
- //鑾峰彇瑙掕壊鍒楄〃
- List<UmsRole> roles = umsRoleMapper.getRoleList(e.getId());
- e.setRoles(roles);
- });
+ if (pageUserVO.getJobTitle() != null && !("".equals(pageUserVO.getJobTitle()))) {
+ umsAdmin.setJobTitle(pageUserVO.getJobTitle());
}
- 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
+ public List<UmsUserDto1> userExp() {
+ List<UmsAdmin> umsAdmins = baseMapper.selectToExp();
+ List<UmsUserDto1> res = umsAdmins.stream()
+ .map(item -> {
+ UmsUserDto1 res1 = new UmsUserDto1();
+ res1.setId(item.getId());
+ res1.setUsername(item.getUsername());
+ res1.setNickName(item.getNickName());
+ res1.setMobile(item.getMobile());
+ StringBuffer roleStrBuffer = new StringBuffer();
+ List<UmsRole> roles = item.getRoles();
+ roles.forEach(new Consumer<UmsRole>() {
+ @Override
+ public void accept(UmsRole o) {
+ roleStrBuffer.append(o.getName());
+ roleStrBuffer.append(",");
+ }
+ });
+ roleStrBuffer.deleteCharAt(roleStrBuffer.length() - 1);
+ res1.setRoles(roleStrBuffer.toString());
+ StringBuffer departStrBuffer = new StringBuffer();
+ List<UmsDepart> departs = item.getDepart();
+ departs.forEach(new Consumer<UmsDepart>() {
+ @Override
+ public void accept(UmsDepart o) {
+ departStrBuffer.append(o.getDepartName());
+ departStrBuffer.append(",");
+ }
+ });
+ 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) {
+ res1.setCreateTime(sdf.format(createTime));
+ }
+
+ Integer status = item.getStatus();
+ if (status.equals(1)) {
+ res1.setStatus("鍚敤");
+ } else {
+ res1.setStatus("绂佺敤");
+ }
+ return res1;
+ }).collect(Collectors.toList());
+ return res;
}
@Override
@@ -407,4 +596,29 @@
List<UmsAdmin> adminList = baseMapper.selectList(wrapperUser);
return adminList;
}
+
+ @Override
+ public String getTargetTo(String ids, String sendType) {
+ String str = null;
+ String[] arr = ids.split(",");
+ QueryWrapper<UmsAdmin> wrapperUser = new QueryWrapper<>();
+ wrapperUser.in("id", arr);
+ List<UmsAdmin> adminList = baseMapper.selectList(wrapperUser);
+ if (adminList == null || adminList.isEmpty()) {
+ throw new ApiException("鏈煡璇㈠埌鐢ㄦ埛");
+ }
+ if ("02".equals(sendType)) {
+ str = adminList.stream().map(UmsAdmin::getEmail).collect(Collectors.joining(","));
+ } else {
+ str = adminList.stream().map(UmsAdmin::getMobile).collect(Collectors.joining(","));
+ }
+ 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