fix: 优化登录用户逻辑
This commit is contained in:
parent
2ecb68fbb6
commit
8ed2545759
@ -1,6 +1,7 @@
|
|||||||
package com.yfd.platform.env.controller;
|
package com.yfd.platform.env.controller;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.yfd.platform.annotation.Log;
|
import com.yfd.platform.annotation.Log;
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
@ -55,8 +56,8 @@ public class SdFishDictoryBController {
|
|||||||
@Operation(summary = "根据名称查询所有鱼类字典")
|
@Operation(summary = "根据名称查询所有鱼类字典")
|
||||||
public ResponseResult listByName(@RequestParam(required = false) String name) {
|
public ResponseResult listByName(@RequestParam(required = false) String name) {
|
||||||
return ResponseResult.successData(sdFishDictoryBService.list(
|
return ResponseResult.successData(sdFishDictoryBService.list(
|
||||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<SdFishDictoryB>()
|
new LambdaQueryWrapper<SdFishDictoryB>()
|
||||||
.eq(StrUtil.isNotBlank(name), SdFishDictoryB::getName, name)
|
.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);
|
boolean result = sdFishDictoryBService.deleteById(id);
|
||||||
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
|
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.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.yfd.platform.env.domain.SdFishDictoryB;
|
import com.yfd.platform.env.domain.SdFishDictoryB;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface ISdFishDictoryBService extends IService<SdFishDictoryB> {
|
public interface ISdFishDictoryBService extends IService<SdFishDictoryB> {
|
||||||
|
|
||||||
Page<SdFishDictoryB> selectPage(String name, String code, Integer type, Integer rare, Page<SdFishDictoryB> page);
|
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);
|
boolean deleteById(String id);
|
||||||
|
|
||||||
SdFishDictoryB getById(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.stereotype.Service;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SdFishDictoryBServiceImpl extends ServiceImpl<SdFishDictoryBMapper, SdFishDictoryB> implements ISdFishDictoryBService {
|
public class SdFishDictoryBServiceImpl extends ServiceImpl<SdFishDictoryBMapper, SdFishDictoryB> implements ISdFishDictoryBService {
|
||||||
|
|
||||||
@ -62,4 +65,116 @@ public class SdFishDictoryBServiceImpl extends ServiceImpl<SdFishDictoryBMapper,
|
|||||||
.eq(SdFishDictoryB::getIsDeleted, 0);
|
.eq(SdFishDictoryB::getIsDeleted, 0);
|
||||||
return getOne(wrapper);
|
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.ResponseResult;
|
||||||
import com.yfd.platform.config.WebConfig;
|
import com.yfd.platform.config.WebConfig;
|
||||||
import com.yfd.platform.system.domain.*;
|
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.ISmsVerifyCodeService;
|
||||||
import com.yfd.platform.system.service.ISysLogService;
|
import com.yfd.platform.system.service.ISysLogService;
|
||||||
import com.yfd.platform.system.service.IUserService;
|
import com.yfd.platform.system.service.IUserService;
|
||||||
@ -47,6 +48,9 @@ public class SmsVerifyCodeController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ISysLogService sysLogService;
|
private ISysLogService sysLogService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysMenuMapper sysMenuMapper;
|
||||||
|
|
||||||
@Value("${rsa.private_key}")
|
@Value("${rsa.private_key}")
|
||||||
private String privateKey;
|
private String privateKey;
|
||||||
|
|
||||||
@ -150,6 +154,8 @@ public class SmsVerifyCodeController {
|
|||||||
user.setOrgid("e90063ced25e3d469860e88d920c082f");
|
user.setOrgid("e90063ced25e3d469860e88d920c082f");
|
||||||
user.setUsertype(1);
|
user.setUsertype(1);
|
||||||
user.setUsername(smsVerifyCodeRequest.getUsername());
|
user.setUsername(smsVerifyCodeRequest.getUsername());
|
||||||
|
user.setGroupCode(smsVerifyCodeRequest.getGroupCode());
|
||||||
|
user.setCompanyCode(smsVerifyCodeRequest.getCompanyCode());
|
||||||
boolean success = userService.save(user);
|
boolean success = userService.save(user);
|
||||||
// 给注册用户加上默认权限
|
// 给注册用户加上默认权限
|
||||||
this.addDefaultRole(smsVerifyCodeRequest);
|
this.addDefaultRole(smsVerifyCodeRequest);
|
||||||
@ -162,12 +168,9 @@ public class SmsVerifyCodeController {
|
|||||||
|
|
||||||
private boolean addDefaultRole(SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
private boolean addDefaultRole(SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||||
String stationCode = smsVerifyCodeRequest.getStationCode();
|
String stationCode = smsVerifyCodeRequest.getStationCode();
|
||||||
String companyCode = smsVerifyCodeRequest.getCompanyCode();
|
|
||||||
String groupCode = smsVerifyCodeRequest.getGroupCode();
|
|
||||||
String hbrvcdCode = smsVerifyCodeRequest.getHbrvcdCode();
|
String hbrvcdCode = smsVerifyCodeRequest.getHbrvcdCode();
|
||||||
List<String> roleIds=new ArrayList<>();
|
|
||||||
roleIds.add("c13481a486c9ee559cf305284df4d207");
|
|
||||||
roleIds.add("c13481a486c9ee559cf305284df4d207");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +280,10 @@ public class SmsVerifyCodeController {
|
|||||||
LoginUser loginUser = new LoginUser();
|
LoginUser loginUser = new LoginUser();
|
||||||
loginUser.setUser(user);
|
loginUser.setUser(user);
|
||||||
loginUser.setUsername(user.getUsername());
|
loginUser.setUsername(user.getUsername());
|
||||||
|
//Todo 根据用户查询权限信息 添加到LoginUser中
|
||||||
|
List<String> permissions =
|
||||||
|
sysMenuMapper.selectPermsByUserId(user.getId());
|
||||||
|
loginUser.setPermissions( permissions);
|
||||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||||
SysLog sysLog = new SysLog();
|
SysLog sysLog = new SysLog();
|
||||||
sysLog.setUsercode(user.getUsername());
|
sysLog.setUsercode(user.getUsername());
|
||||||
|
|||||||
@ -24,9 +24,15 @@ public class LoginUser implements UserDetails {
|
|||||||
|
|
||||||
private List<String> permissions=new ArrayList<>();
|
private List<String> permissions=new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义构造函数(如果需要特殊逻辑)
|
||||||
|
*/
|
||||||
public LoginUser(SysUser user, List<String> permissions) {
|
public LoginUser(SysUser user, List<String> permissions) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
this.permissions = permissions;
|
// 4. 增加非空判断,确保 permissions 永远不为 null
|
||||||
|
if (permissions != null) {
|
||||||
|
this.permissions = permissions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JSONField(serialize = false)
|
@JSONField(serialize = false)
|
||||||
|
|||||||
@ -146,6 +146,15 @@ public class SysUser implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Date regTime;
|
private Date regTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 集团编号
|
||||||
|
*/
|
||||||
|
private String groupCode;
|
||||||
|
/**
|
||||||
|
* 公司编号
|
||||||
|
*/
|
||||||
|
private String companyCode;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
List<SysRole> roles;
|
List<SysRole> roles;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user