package com.yupi.springbootinit.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yupi.springbootinit.common.ErrorCode; import com.yupi.springbootinit.exception.BusinessException; import com.yupi.springbootinit.mapper.SystemTenantMapper; import com.yupi.springbootinit.model.entity.SystemTenant; import com.yupi.springbootinit.model.entity.SystemUsers; import com.yupi.springbootinit.mapper.SystemUsersMapper; import com.yupi.springbootinit.model.vo.user.SystemUsersVO; import com.yupi.springbootinit.service.SystemUsersService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; /* * @author: ziin * @date: 2025/6/11 20:13 */ @Service public class SystemUsersServiceImpl extends ServiceImpl implements SystemUsersService{ @Value("${md5.salt}") private String MD5_SALT; @Resource private SystemTenantMapper systemTenantMapper; @Override public SystemUsers getUserByUserName(String username,Long tenantId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username",username); queryWrapper.eq("tenant_id",tenantId); queryWrapper.eq("deleted",false); return baseMapper.selectOne(queryWrapper); } @Override public boolean isPasswordMatch(String rawPassword, String encodedPassword) { String s = SecureUtil.md5(MD5_SALT + rawPassword); return s.equals(encodedPassword); } @Override public boolean isExpired(Long tendId) { SystemTenant systemTenant = systemTenantMapper.selectById(tendId); long between = DateUtil.between(systemTenant.getExpireTime(), DateUtil.date(), DateUnit.DAY); return between < 0; } @Override public Long getTenantExpiredTime(Long tenantId) { SystemTenant systemTenant = systemTenantMapper.selectById(tenantId); long between = DateUtil.between(systemTenant.getExpireTime(), DateUtil.date(), DateUnit.SECOND); if (between > 0 ) { return between; } return 0L; } @Override public boolean checkCrawlRole(Long userId) { SystemUsers systemUsers = baseMapper.selectById(userId); return systemUsers.getCrawl() == 1; } @Override public boolean checkbigBrotherlRole(Long userId) { SystemUsers systemUsers = baseMapper.selectById(userId); return systemUsers.getBigBrother() == 1; } @Override public boolean checkAiCHatLoginRole(Long userId) { SystemUsers systemUsers = baseMapper.selectById(userId); return systemUsers.getAiChat() == 1; } @Override public boolean checkWebAILoginRole(Long userId) { SystemUsers systemUsers = baseMapper.selectById(userId); return systemUsers.getWebAi() == 1; } @Override public SystemUsersVO getCurrentUserInfo() { Long userId = StpUtil.getLoginIdAsLong(); SystemUsers user = baseMapper.selectById(userId); if (user == null || Boolean.TRUE.equals(user.getDeleted())) { throw new BusinessException(ErrorCode.NOT_FOUND_ERROR, "用户不存在"); } SystemTenant tenant = systemTenantMapper.selectById(user.getTenantId()); if (tenant == null || Boolean.TRUE.equals(tenant.getDeleted())) { throw new BusinessException(ErrorCode.TENANT_NAME_NOT_EXISTS); } return buildSystemUsersVO(user, tenant); } private SystemUsersVO buildSystemUsersVO(SystemUsers user, SystemTenant tenant) { SystemUsersVO userVO = new SystemUsersVO(); BeanUtil.copyProperties(user, userVO); userVO.setTokenName(StpUtil.getTokenName()); userVO.setTokenValue(StpUtil.getTokenValue()); userVO.setExpireTime(tenant.getExpireTime()); userVO.setCrawlExpireTime(tenant.getCrawlExpireTime()); userVO.setBrotherExpireTime(tenant.getBrotherExpireTime()); userVO.setAiExpireTime(tenant.getAiExpireTime()); fillFeatureEnabled(userVO, user); return userVO; } private void fillFeatureEnabled(SystemUsersVO userVO, SystemUsers user) { userVO.setAiReplayEnabled(isEnabled(user.getAiReplay())); userVO.setCrawlEnabled(isEnabled(user.getCrawl())); userVO.setBigBrotherEnabled(isEnabled(user.getBigBrother())); userVO.setAiChatEnabled(isEnabled(user.getAiChat())); userVO.setWebAiEnabled(isEnabled(user.getWebAi())); } private boolean isEnabled(Byte value) { return value != null && value == 1; } }