fix: 优化登录用户逻辑
This commit is contained in:
parent
2ecb68fbb6
commit
8ed2545759
@ -1,6 +1,7 @@
|
||||
package com.yfd.platform.env.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.yfd.platform.annotation.Log;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
@ -55,8 +56,8 @@ public class SdFishDictoryBController {
|
||||
@Operation(summary = "根据名称查询所有鱼类字典")
|
||||
public ResponseResult listByName(@RequestParam(required = false) String name) {
|
||||
return ResponseResult.successData(sdFishDictoryBService.list(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<SdFishDictoryB>()
|
||||
.eq(StrUtil.isNotBlank(name), SdFishDictoryB::getName, name)
|
||||
new LambdaQueryWrapper<SdFishDictoryB>()
|
||||
.eq(StrUtil.isNotBlank(name), SdFishDictoryB::getName, name).select(SdFishDictoryB::getId, SdFishDictoryB::getName, SdFishDictoryB::getAlias)
|
||||
));
|
||||
}
|
||||
|
||||
@ -89,4 +90,12 @@ public class SdFishDictoryBController {
|
||||
boolean result = sdFishDictoryBService.deleteById(id);
|
||||
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
|
||||
}
|
||||
|
||||
@GetMapping("/similar")
|
||||
@Operation(summary = "查询相似鱼类列表")
|
||||
public ResponseResult findSimilarFish(
|
||||
@RequestParam String name,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer limit) {
|
||||
return ResponseResult.successData(sdFishDictoryBService.findSimilarFish(name, limit));
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.yfd.platform.env.domain.SdFishDictoryB;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ISdFishDictoryBService extends IService<SdFishDictoryB> {
|
||||
|
||||
Page<SdFishDictoryB> selectPage(String name, String code, Integer type, Integer rare, Page<SdFishDictoryB> page);
|
||||
@ -15,4 +17,6 @@ public interface ISdFishDictoryBService extends IService<SdFishDictoryB> {
|
||||
boolean deleteById(String id);
|
||||
|
||||
SdFishDictoryB getById(String id);
|
||||
|
||||
List<SdFishDictoryB> findSimilarFish(String name, Integer limit);
|
||||
}
|
||||
@ -9,6 +9,9 @@ import com.yfd.platform.env.service.ISdFishDictoryBService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class SdFishDictoryBServiceImpl extends ServiceImpl<SdFishDictoryBMapper, SdFishDictoryB> implements ISdFishDictoryBService {
|
||||
|
||||
@ -62,4 +65,116 @@ public class SdFishDictoryBServiceImpl extends ServiceImpl<SdFishDictoryBMapper,
|
||||
.eq(SdFishDictoryB::getIsDeleted, 0);
|
||||
return getOne(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SdFishDictoryB> findSimilarFish(String name, Integer limit) {
|
||||
if (!StringUtils.hasText(name)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
String searchName = name.trim();
|
||||
LambdaQueryWrapper<SdFishDictoryB> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SdFishDictoryB::getIsDeleted, 0);
|
||||
List<SdFishDictoryB> allFish = list(wrapper);
|
||||
|
||||
SdFishDictoryB referenceFish = allFish.stream()
|
||||
.filter(f -> f.getName() != null && f.getName().equals(searchName))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (referenceFish == null) {
|
||||
referenceFish = allFish.stream()
|
||||
.filter(f -> f.getName() != null && f.getName().contains(searchName))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
if (referenceFish == null && allFish.stream().anyMatch(f ->
|
||||
f.getName() != null && (f.getName().contains(searchName) || searchName.contains(f.getName())))) {
|
||||
final String searchNameFinal = searchName;
|
||||
referenceFish = allFish.stream()
|
||||
.filter(f -> f.getName() != null &&
|
||||
(f.getName().contains(searchNameFinal) || searchNameFinal.contains(f.getName())))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
if (referenceFish == null) {
|
||||
return allFish.stream()
|
||||
.filter(f -> f.getName() != null && f.getName().contains(searchName))
|
||||
.limit(limit != null ? limit : 10)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
final SdFishDictoryB finalRefFish = referenceFish;
|
||||
Map<SdFishDictoryB, Integer> similarityMap = new HashMap<>();
|
||||
|
||||
for (SdFishDictoryB fish : allFish) {
|
||||
if (fish.getId().equals(finalRefFish.getId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int score = calculateSimilarity(finalRefFish, fish);
|
||||
if (score > 0) {
|
||||
similarityMap.put(fish, score);
|
||||
}
|
||||
}
|
||||
|
||||
return similarityMap.entrySet().stream()
|
||||
.sorted(Map.Entry.<SdFishDictoryB, Integer>comparingByValue().reversed())
|
||||
.limit(limit != null ? limit : 10)
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private int calculateSimilarity(SdFishDictoryB ref, SdFishDictoryB target) {
|
||||
int score = 0;
|
||||
|
||||
if (ref.getOrders() != null && ref.getOrders().equals(target.getOrders())) {
|
||||
score += 3;
|
||||
}
|
||||
if (ref.getFamily() != null && ref.getFamily().equals(target.getFamily())) {
|
||||
score += 5;
|
||||
}
|
||||
if (ref.getGenus() != null && ref.getGenus().equals(target.getGenus())) {
|
||||
score += 8;
|
||||
}
|
||||
if (ref.getSpecies() != null && ref.getSpecies().equals(target.getSpecies())) {
|
||||
score += 10;
|
||||
}
|
||||
|
||||
if (ref.getType() != null && ref.getType().equals(target.getType())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
if (ref.getHabitat() != null && ref.getHabitat().equals(target.getHabitat())) {
|
||||
score += 3;
|
||||
}
|
||||
|
||||
if (ref.getRare() != null && ref.getRare().equals(target.getRare())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
if (ref.getPtype() != null && ref.getPtype().equals(target.getPtype())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
if (ref.getResourceType() != null && ref.getResourceType().equals(target.getResourceType())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
if (ref.getHabitMigrat() != null && ref.getHabitMigrat().equals(target.getHabitMigrat())) {
|
||||
score += 3;
|
||||
}
|
||||
|
||||
if (ref.getFeedingHabit() != null && ref.getFeedingHabit().equals(target.getFeedingHabit())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
if (ref.getSpawnCharact() != null && ref.getSpawnCharact().equals(target.getSpawnCharact())) {
|
||||
score += 2;
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ import cn.hutool.jwt.JWTUtil;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.config.WebConfig;
|
||||
import com.yfd.platform.system.domain.*;
|
||||
import com.yfd.platform.system.mapper.SysMenuMapper;
|
||||
import com.yfd.platform.system.service.ISmsVerifyCodeService;
|
||||
import com.yfd.platform.system.service.ISysLogService;
|
||||
import com.yfd.platform.system.service.IUserService;
|
||||
@ -47,6 +48,9 @@ public class SmsVerifyCodeController {
|
||||
@Resource
|
||||
private ISysLogService sysLogService;
|
||||
|
||||
@Resource
|
||||
private SysMenuMapper sysMenuMapper;
|
||||
|
||||
@Value("${rsa.private_key}")
|
||||
private String privateKey;
|
||||
|
||||
@ -150,6 +154,8 @@ public class SmsVerifyCodeController {
|
||||
user.setOrgid("e90063ced25e3d469860e88d920c082f");
|
||||
user.setUsertype(1);
|
||||
user.setUsername(smsVerifyCodeRequest.getUsername());
|
||||
user.setGroupCode(smsVerifyCodeRequest.getGroupCode());
|
||||
user.setCompanyCode(smsVerifyCodeRequest.getCompanyCode());
|
||||
boolean success = userService.save(user);
|
||||
// 给注册用户加上默认权限
|
||||
this.addDefaultRole(smsVerifyCodeRequest);
|
||||
@ -162,12 +168,9 @@ public class SmsVerifyCodeController {
|
||||
|
||||
private boolean addDefaultRole(SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
String stationCode = smsVerifyCodeRequest.getStationCode();
|
||||
String companyCode = smsVerifyCodeRequest.getCompanyCode();
|
||||
String groupCode = smsVerifyCodeRequest.getGroupCode();
|
||||
String hbrvcdCode = smsVerifyCodeRequest.getHbrvcdCode();
|
||||
List<String> roleIds=new ArrayList<>();
|
||||
roleIds.add("c13481a486c9ee559cf305284df4d207");
|
||||
roleIds.add("c13481a486c9ee559cf305284df4d207");
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -277,7 +280,10 @@ public class SmsVerifyCodeController {
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setUser(user);
|
||||
loginUser.setUsername(user.getUsername());
|
||||
|
||||
//Todo 根据用户查询权限信息 添加到LoginUser中
|
||||
List<String> permissions =
|
||||
sysMenuMapper.selectPermsByUserId(user.getId());
|
||||
loginUser.setPermissions( permissions);
|
||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||
SysLog sysLog = new SysLog();
|
||||
sysLog.setUsercode(user.getUsername());
|
||||
|
||||
@ -24,9 +24,15 @@ public class LoginUser implements UserDetails {
|
||||
|
||||
private List<String> permissions=new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 自定义构造函数(如果需要特殊逻辑)
|
||||
*/
|
||||
public LoginUser(SysUser user, List<String> permissions) {
|
||||
this.user = user;
|
||||
this.permissions = permissions;
|
||||
// 4. 增加非空判断,确保 permissions 永远不为 null
|
||||
if (permissions != null) {
|
||||
this.permissions = permissions;
|
||||
}
|
||||
}
|
||||
|
||||
@JSONField(serialize = false)
|
||||
|
||||
@ -146,6 +146,15 @@ public class SysUser implements Serializable {
|
||||
*/
|
||||
private Date regTime;
|
||||
|
||||
/**
|
||||
* 集团编号
|
||||
*/
|
||||
private String groupCode;
|
||||
/**
|
||||
* 公司编号
|
||||
*/
|
||||
private String companyCode;
|
||||
|
||||
@TableField(exist = false)
|
||||
List<SysRole> roles;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user