111
This commit is contained in:
165
src/main/java/com/it/rattan/monisuo/service/AdminService.java
Normal file
165
src/main/java/com/it/rattan/monisuo/service/AdminService.java
Normal file
@@ -0,0 +1,165 @@
|
||||
package com.it.rattan.monisuo.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.it.rattan.monisuo.entity.Admin;
|
||||
import com.it.rattan.monisuo.mapper.AdminMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 管理员服务
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class AdminService extends ServiceImpl<AdminMapper, Admin> {
|
||||
|
||||
private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
|
||||
/** 初始超级管理员账号 */
|
||||
private static final String[][] INIT_SUPER_ADMINS = {
|
||||
{"SupperadminWho1", "超级管理员1"},
|
||||
{"SupperadminWho2", "超级管理员2"},
|
||||
};
|
||||
private static final String INIT_PASSWORD = "saw123";
|
||||
|
||||
private static final int SUPER_ADMIN_ROLE = 1;
|
||||
|
||||
/**
|
||||
* 系统启动时自动校验并初始化超级管理员
|
||||
*/
|
||||
@PostConstruct
|
||||
public void initSuperAdmins() {
|
||||
for (String[] admin : INIT_SUPER_ADMINS) {
|
||||
String username = admin[0];
|
||||
String nickname = admin[1];
|
||||
long count = count(new LambdaQueryWrapper<Admin>()
|
||||
.eq(Admin::getUsername, username));
|
||||
if (count == 0) {
|
||||
Admin newAdmin = new Admin();
|
||||
newAdmin.setUsername(username);
|
||||
newAdmin.setPassword(passwordEncoder.encode(INIT_PASSWORD));
|
||||
newAdmin.setNickname(nickname);
|
||||
newAdmin.setRole(SUPER_ADMIN_ROLE);
|
||||
newAdmin.setPermissions("all");
|
||||
newAdmin.setIsSystem(1);
|
||||
newAdmin.setStatus(1);
|
||||
newAdmin.setCreateTime(LocalDateTime.now());
|
||||
save(newAdmin);
|
||||
log.info("自动初始化超级管理员账号: {}", username);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理员登录
|
||||
*/
|
||||
public Admin login(String username, String password) {
|
||||
Admin admin = getOne(new LambdaQueryWrapper<Admin>()
|
||||
.eq(Admin::getUsername, username)
|
||||
.eq(Admin::getStatus, 1));
|
||||
if (admin == null) {
|
||||
return null;
|
||||
}
|
||||
if (!passwordEncoder.matches(password, admin.getPassword())) {
|
||||
return null;
|
||||
}
|
||||
// 只更新最后登录时间,避免 updateById 全字段更新
|
||||
update(new LambdaUpdateWrapper<Admin>()
|
||||
.eq(Admin::getId, admin.getId())
|
||||
.set(Admin::getLastLoginTime, LocalDateTime.now()));
|
||||
admin.setLastLoginTime(LocalDateTime.now());
|
||||
return admin;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建管理员
|
||||
*/
|
||||
public Admin createAdmin(String username, String password, String nickname, Integer role) {
|
||||
// 检查用户名是否已存在
|
||||
long count = count(new LambdaQueryWrapper<Admin>()
|
||||
.eq(Admin::getUsername, username));
|
||||
if (count > 0) {
|
||||
throw new RuntimeException("用户名已存在");
|
||||
}
|
||||
Admin admin = new Admin();
|
||||
admin.setUsername(username);
|
||||
admin.setPassword(passwordEncoder.encode(password));
|
||||
admin.setNickname(nickname);
|
||||
admin.setRole(role);
|
||||
admin.setPermissions("order_approve");
|
||||
admin.setIsSystem(0);
|
||||
admin.setStatus(1);
|
||||
admin.setCreateTime(LocalDateTime.now());
|
||||
save(admin);
|
||||
return admin;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
public boolean updatePassword(Long adminId, String oldPassword, String newPassword) {
|
||||
Admin admin = getById(adminId);
|
||||
if (admin == null) {
|
||||
throw new RuntimeException("管理员不存在");
|
||||
}
|
||||
if (!passwordEncoder.matches(oldPassword, admin.getPassword())) {
|
||||
return false;
|
||||
}
|
||||
admin.setPassword(passwordEncoder.encode(newPassword));
|
||||
admin.setUpdateTime(LocalDateTime.now());
|
||||
updateById(admin);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 列出所有管理员
|
||||
*/
|
||||
public java.util.List<Admin> listAdmins() {
|
||||
return list(new LambdaQueryWrapper<Admin>()
|
||||
.orderByDesc(Admin::getRole)
|
||||
.orderByDesc(Admin::getCreateTime));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除管理员(系统预置不可删除)
|
||||
*/
|
||||
public boolean deleteAdmin(Long adminId) {
|
||||
Admin admin = getById(adminId);
|
||||
if (admin == null) {
|
||||
throw new RuntimeException("管理员不存在");
|
||||
}
|
||||
if (admin.getIsSystem() != null && admin.getIsSystem() == 1) {
|
||||
throw new RuntimeException("系统预置管理员不可操作");
|
||||
}
|
||||
return removeById(adminId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用/禁用管理员
|
||||
*/
|
||||
public boolean toggleAdminStatus(Long adminId, Integer status) {
|
||||
Admin admin = getById(adminId);
|
||||
if (admin == null) {
|
||||
throw new RuntimeException("管理员不存在");
|
||||
}
|
||||
if (admin.getIsSystem() != null && admin.getIsSystem() == 1) {
|
||||
throw new RuntimeException("系统预置管理员不可操作");
|
||||
}
|
||||
admin.setStatus(status);
|
||||
admin.setUpdateTime(LocalDateTime.now());
|
||||
return updateById(admin);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按用户名查询
|
||||
*/
|
||||
public Admin getAdminByUsername(String username) {
|
||||
return getOne(new LambdaQueryWrapper<Admin>()
|
||||
.eq(Admin::getUsername, username));
|
||||
}
|
||||
}
|
||||
8
src/test/java/GenHash.java
Normal file
8
src/test/java/GenHash.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package com.it.rattan.monisuo;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
public class GenHash {
|
||||
public static void main(String[] args) {
|
||||
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
|
||||
System.out.println(encoder.encode("saw123"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user