Browse Source

chore: Support a key login

master
wangxiang 2 years ago
parent
commit
1e30e4ff3e
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. 6
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/UserRole.java
  2. 7
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java
  3. 50
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java
  4. 2
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/UserService.java
  5. 31
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java
  6. 8
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/UserServiceImpl.java

6
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/UserRole.java

@ -1,6 +1,8 @@
package com.cloud.kicc.system.api.entity; package com.cloud.kicc.system.api.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.cloud.kicc.common.data.entity.CommonEntity;
import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -33,5 +35,9 @@ public class UserRole implements Serializable {
*/ */
private String roleId; private String roleId;
/**
* 多租户ID
*/
private String tenantId;
} }

7
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/config/OpenAiConfigProperties.java

@ -1,6 +1,7 @@
package com.cloud.kicc.system.config; package com.cloud.kicc.system.config;
import lombok.Data; import lombok.Data;
import org.apache.poi.ss.formula.functions.Rate;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -41,4 +42,10 @@ public class OpenAiConfigProperties {
/** OpenAI API Speed - <a href="https://platform.openai.com/docs/api-reference/audio/createSpeech">...</a> */ /** OpenAI API Speed - <a href="https://platform.openai.com/docs/api-reference/audio/createSpeech">...</a> */
private Double speed = 1.0; private Double speed = 1.0;
/** Limit Duration time unit seconds default 1 day */
private int rateLimitDuration = 24 * 60 * 60;
/** Maximum number of visits in a specified time unit seconds */
private int rateLimitMaxCount = 10;
} }

50
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

@ -3,6 +3,7 @@ package com.cloud.kicc.system.controller;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -16,21 +17,16 @@ import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.common.security.annotation.Inner; import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService; import com.cloud.kicc.commonbiz.api.feign.RemotePushConcernFanService;
import com.cloud.kicc.system.api.entity.Menu; import com.cloud.kicc.system.api.entity.*;
import com.cloud.kicc.system.api.entity.Role;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.system.api.entity.UserRole;
import com.cloud.kicc.system.api.enums.UserTypeEnum; import com.cloud.kicc.system.api.enums.UserTypeEnum;
import com.cloud.kicc.system.api.vo.ResultVo; import com.cloud.kicc.system.api.vo.ResultVo;
import com.cloud.kicc.system.service.MenuService; import com.cloud.kicc.system.service.*;
import com.cloud.kicc.system.service.RoleService;
import com.cloud.kicc.system.service.UserRoleService;
import com.cloud.kicc.system.service.UserService;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
import com.pig4cloud.plugin.excel.annotation.Sheet; import com.pig4cloud.plugin.excel.annotation.Sheet;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -54,7 +50,10 @@ public class UserController {
private final UserRoleService userRoleService; private final UserRoleService userRoleService;
private final RoleService roleService; private final RoleService roleService;
private final MenuService menuService; private final MenuService menuService;
private final ISsoUserService iSsoUserService;
private final RemotePushConcernFanService remotePushConcernFanService; private final RemotePushConcernFanService remotePushConcernFanService;
private final ConfigService configService;
private final DeptService deptService;
@GetMapping("/list") @GetMapping("/list")
public R list(Page page,@RequestParam Map param) { public R list(Page page,@RequestParam Map param) {
@ -123,12 +122,37 @@ public class UserController {
return R.ok(userService.getUserAuthority(user)); return R.ok(userService.getUserAuthority(user));
} }
/** 内部小程序一键登陆 */
@Inner(false) @Inner(false)
@GetMapping("/transformationUserByCasUserId/{casUserId:\\w+}") @GetMapping("/oneClickAccess/{casUserId:\\w+}")
public R transformationUserByCasUserId(@PathVariable String casUserId) { public R oneClickAccess(@PathVariable String casUserId) {
KiccUser user = userService.getUserByCasUserId(casUserId); if (ObjectUtil.isNotEmpty(iSsoUserService.getById(casUserId)) && ObjectUtil.isEmpty(userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getCasUserId, casUserId)))) {
if (user == null) return R.error("该用户不存在,请先注册!"); String initDeptId = configService.getValueByKey("app.init.deptId");
return R.ok(userService.getUserAuthority(user)); Dept dept = deptService.getById(initDeptId);
Optional.ofNullable(dept).orElseThrow(() -> new CheckedException("当前部门无效请重新在参数管理中配置!"));
String initUserType = configService.getValueByKey("app.init.deptId");
String initTenantId = configService.getValueByKey("app.init.tenantId");
String initRoleIds = configService.getValueByKey("app.init.roleIds");
User user = new User();
user.setCasUserId(casUserId);
user.setDeptId(dept.getDeptId());
user.setDeptName(dept.getName());
user.setUserType(initUserType);
user.setTenantId(initTenantId);
userService.save(user);
// 处理角色授权
String[] roles = initRoleIds.split(",");
userRoleService.saveBatch(Arrays.stream(roles).map(roleId -> {
UserRole ur = new UserRole();
ur.setUserId(user.getId());
ur.setRoleId(roleId);
ur.setTenantId(initTenantId);
return ur;
}).collect(Collectors.toList()));
}
return R.ok(userService.getUserByCasUserId(casUserId));
} }
@SysLog("用户新增") @SysLog("用户新增")

2
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/UserService.java

@ -23,7 +23,7 @@ public interface UserService extends IService<User> {
* @param user 用户信息 * @param user 用户信息
* @return 结果 * @return 结果
*/ */
int saveUser(KiccUser user); boolean saveUser(KiccUser user);
/** /**
* 导入用户数据 * 导入用户数据

31
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/ImContentServiceImpl.java

@ -1,6 +1,5 @@
package com.cloud.kicc.system.service.impl; package com.cloud.kicc.system.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -12,7 +11,6 @@ import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.system.api.entity.ImContent; import com.cloud.kicc.system.api.entity.ImContent;
import com.cloud.kicc.system.api.entity.OssFile; import com.cloud.kicc.system.api.entity.OssFile;
import com.cloud.kicc.system.api.enums.ImMessageTypeEnum;
import com.cloud.kicc.system.config.OpenAiConfigProperties; import com.cloud.kicc.system.config.OpenAiConfigProperties;
import com.cloud.kicc.system.mapper.ImContentMapper; import com.cloud.kicc.system.mapper.ImContentMapper;
import com.cloud.kicc.system.service.FileService; import com.cloud.kicc.system.service.FileService;
@ -39,6 +37,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -220,4 +219,32 @@ public class ImContentServiceImpl extends ServiceImpl<ImContentMapper, ImContent
return receiveOssOssFile; return receiveOssOssFile;
} }
/** 速率限制请求处理 */
private void RateLimitRequestHandler() {
ZoneId chinaZoneId = ZoneId.of("Asia/Shanghai");
LocalDateTime startTime = LocalDateTime.now().minusSeconds(openAiConfigProperties.getRateLimitDuration());
long startTimestamp = startTime.atZone(chinaZoneId).toEpochSecond();
// 查询当前用户在指定范围内的发送消息
long maxCount = super.count(Wrappers.<ImContent>lambdaQuery()
.eq(ImContent::getSendUserId, SecurityUtils.getCasUser().getId())
.between(ImContent::getSendTime, startTimestamp, LocalDateTime.now().atZone(chinaZoneId)));
// 检查是否大于发送次数
// NON("0", "非订阅"),
//
// BASIC("1", "基础订阅"),
// 限制当前非订阅用户只能用10次
// 限制当前基础订阅用户只能用10次
// 高级订阅不受限制
}
} }

8
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/UserServiceImpl.java

@ -57,22 +57,22 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int saveUser(KiccUser kiccUser) { public boolean saveUser(KiccUser kiccUser) {
User user = new User(); User user = new User();
BeanUtils.copyProperties(kiccUser, user); BeanUtils.copyProperties(kiccUser, user);
if (StrUtil.isEmptyIfStr(user.getId())) { if (StrUtil.isEmptyIfStr(user.getId())) {
// 新增用户信息 // 新增用户信息
int rows = baseMapper.insert(user); boolean result = super.save(user);
// 新增用户与角色管理 // 新增用户与角色管理
kiccUser.setId(user.getId()); kiccUser.setId(user.getId());
addUserRole(kiccUser); addUserRole(kiccUser);
return rows; return result;
} else { } else {
// 修改遵守先删后新增规则 // 修改遵守先删后新增规则
userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, user.getId())); userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, user.getId()));
// 新增用户与角色管理 // 新增用户与角色管理
addUserRole(kiccUser); addUserRole(kiccUser);
return baseMapper.updateById(user); return super.updateById(user);
} }
} }

Loading…
Cancel
Save