This commit is contained in:
sion
2026-04-05 19:44:40 +08:00
parent 2fbc47117c
commit 2ea315cefb
71 changed files with 1266 additions and 0 deletions

View 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));
}
}

View 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"));
}
}