作者 钟来

初始提交

... ... @@ -26,8 +26,6 @@ import com.zhonglai.luhui.openai.utils.OpenAiUtils;
import com.zhonglai.luhui.openai.utils.SysConfigKeyType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.catalina.Session;
import org.apache.commons.io.input.ReaderInputStream;
import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -93,7 +91,7 @@ public class ChatGPTController extends BaseController {
OpenAiLoginUser userInfo = (OpenAiLoginUser) getLoginUser();
Integer user_id= userInfo.getUserId().intValue();
String room_id = String.valueOf(user_id);
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT * FROM `lk_openai`.`gpt_message` WHERE room_id="+room_id+" AND user_id="+user_id+" order by create_time desc 5");
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT * FROM `lk_openai`.`gpt_message` WHERE room_id="+room_id+" AND user_id="+user_id+" order by create_time desc limit 5");
Collections.reverse(list);
return AjaxResult.success(list);
}
... ... @@ -129,7 +127,7 @@ public class ChatGPTController extends BaseController {
BigDecimal[] bs = vipService.getUnitprice();
BigDecimal openaiUnitprice = bs[0];
BigDecimal realityUnitprice = bs[1];
if(openaiUnitprice.intValue()==0 || realityUnitprice.intValue()==0)
if(openaiUnitprice.doubleValue()==0 || realityUnitprice.doubleValue()==0)
{
rlist.add(new CompletionChoiceMessage3_5("assistant","系统未配置流量单价,请联系管理员"));
return AjaxResult.success(rlist);
... ... @@ -139,7 +137,7 @@ public class ChatGPTController extends BaseController {
//上下文关联
HttpSession session = httpServletRequest.getSession();
List<ChatRoomMessages> messageList = Optional.ofNullable((List<Map<String, Object>>) session.getAttribute(sessionkey)).orElse(new ArrayList<>()).stream().map(item->mapToChatRoomMessages(item)).collect(Collectors.toList());
List<ChatRoomMessages> messageList = Optional.ofNullable((List<ChatRoomMessages>) session.getAttribute(sessionkey)).orElse(new ArrayList<>());
ChatRoomMessages chatRoomMessages = new ChatRoomMessages();
chatRoomMessages.setRole("user");
chatRoomMessages.setContent(data);
... ... @@ -150,9 +148,9 @@ public class ChatGPTController extends BaseController {
CompletionResult3_5 completionResult3_5 = null;
if(vipService.isfree(openAiUserInfo.getVip_level()))
{
completionResult3_5 = sendGPTAi(messageList);
}else{
completionResult3_5 = sendFreeGPTAi(messageList);
}else{
completionResult3_5 = sendGPTAi(messageList);
}
Usage usage = completionResult3_5.getUsage();
... ... @@ -206,7 +204,7 @@ public class ChatGPTController extends BaseController {
publicService.insertAllToTable(insertGptMessages,"`lk_openai`.`gpt_message`");
}
publicService.updateBySql("UPDATE `user_info` SET flow_packet_remain=flow_packet_remain-"+usage.getTotalTokens()+" WHERE id="+openAiUserInfo.getId());
publicService.updateBySql("UPDATE `lk_openai`.`user_info` SET flow_packet_remain=flow_packet_remain-"+usage.getTotalTokens()+" WHERE id="+openAiUserInfo.getId());
UserFlowPacketRemainLog userFlowPacketRemainLog = new UserFlowPacketRemainLog();
userFlowPacketRemainLog.setCreate_time(DateUtils.getNowTimeMilly());
... ... @@ -214,22 +212,31 @@ public class ChatGPTController extends BaseController {
userFlowPacketRemainLog.setType(2); //消费
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("房间号");
stringBuffer.append("房间号:");
stringBuffer.append(room_id);
stringBuffer.append(";");
stringBuffer.append("发送代币:");
stringBuffer.append(usage.getPromptTokens());
stringBuffer.append("返回代币:");
stringBuffer.append(";");
stringBuffer.append("返回代币:");
stringBuffer.append(usage.getCompletionTokens());
stringBuffer.append(";");
userFlowPacketRemainLog.setDescribe(stringBuffer.toString());
userFlowPacketRemainLog.setTotal_tokens(usage.getTotalTokens());
userFlowPacketRemainLog.setOpenai_money(openaiUnitprice.multiply(new BigDecimal(usage.getTotalTokens())).divide(new BigDecimal(1000),6));
userFlowPacketRemainLog.setReality_money(realityUnitprice.multiply(new BigDecimal(usage.getTotalTokens())).divide(new BigDecimal(1000),6));
userFlowPacketRemainLog.setOpenai_money((openaiUnitprice.multiply(new BigDecimal(usage.getTotalTokens()))).divide(new BigDecimal(1000),6,BigDecimal.ROUND_HALF_UP));
userFlowPacketRemainLog.setReality_money((realityUnitprice.multiply(new BigDecimal(usage.getTotalTokens()))).divide(new BigDecimal(1000),6,BigDecimal.ROUND_HALF_UP));
publicService.insertToTable(userFlowPacketRemainLog,"`lk_openai`.`user_flow_packet_remain_log`");
}
return AjaxResult.success(rlist);
}
public static void main(String[] args) {
BigDecimal openaiUnitprice = new BigDecimal(0.03);
BigDecimal r = openaiUnitprice.multiply(new BigDecimal(61)).divide(new BigDecimal(1000),6);
System.out.println(r.doubleValue());
}
/**
* 付费接口
... ... @@ -242,6 +249,7 @@ public class ChatGPTController extends BaseController {
jsonObject.put("model","gpt-3.5-turbo-0301");
jsonObject.put("messages",messageList);
String str = HttpUtil.post("https://chatgpt.njlaikun.com/v1/chat/completions",jsonObject.toString());
logger.info("返回的数据:{}",str);
CompletionResult3_5 completionResult = JSONObject.parseObject(str, CompletionResult3_5.class);
return completionResult;
}
... ...
package com.zhonglai.luhui.openai.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.constant.Constants;
... ... @@ -10,6 +11,7 @@ import com.ruoyi.common.core.domain.Message;
import com.ruoyi.common.core.domain.MessageCode;
import com.ruoyi.common.utils.DESUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.GsonConstructor;
import com.ruoyi.system.login.service.LoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
... ... @@ -35,22 +37,25 @@ public class OpenAiUserLoginController extends BaseController {
private LoginService loginService;
@ApiOperation(value = "手机验证码登陆",notes = "返回token和longtoken,token是接口操作令牌失效时间端,长期本地缓存推荐存储longtoken,longtoken可以通过/openAiUserLogin/getTokenFromLongtoken接口换取token")
@ApiImplicitParams({
@ApiImplicitParam(value = "手机号",name = "phone"),
@ApiImplicitParam(value = "/openAiUserLogin/sendPhoneCode返回的data数据",name = "key"),
@ApiImplicitParam(value = "验证码",name = "code"),
})
@PostMapping("/userpassLogin")
public AjaxResult userpassLogin(String phone, String code, String key)
public AjaxResult userpassLogin(String code, String key)
{
//验证验证码
String str = HttpUtil.get("http://ly.userlogin.yu2le.com/userLogin/verificationCode?key="+key+"&code="+code);
Message message = JSON.parseObject(str,Message.class);
String str = HttpUtil.post("http://ly.userlogin.yu2le.com/userLogin/verificationCode?key="+key+"&code="+code,new HashMap<>());
Message message = GsonConstructor.get().fromJson(str,Message.class);
if(message.getCode()!=MessageCode.DEFAULT_SUCCESS_CODE.code)
{
return AjaxResult.error(message.getMessage());
}
String[] keys = DESUtil.decode(message.getData().toString(), ENCODE_KEY).split("_");
//生成令牌
String token = loginService.openaiLoginByPass(phone,user_pass);
String longtoken = DESUtil.encode(phone+"_"+ DateUtils.getNowTimeMilly(),ENCODE_KEY);
String token = loginService.openaiLoginByPass(keys[0],user_pass);
String longtoken = DESUtil.encode(keys[0]+"_"+ DateUtils.getNowTimeMilly(),ENCODE_KEY);
return AjaxResult.success().put(Constants.TOKEN, token).put("longtoken", longtoken);
}
... ... @@ -64,7 +69,7 @@ public class OpenAiUserLoginController extends BaseController {
{
//生成令牌
String str = HttpUtil.get("http://ly.userlogin.yu2le.com/userLogin/getPhoneCode/1/"+phone);
Message message = JSON.parseObject(str,Message.class);
Message message = GsonConstructor.get().fromJson(str,Message.class);
if(message.getCode()!=MessageCode.DEFAULT_SUCCESS_CODE.code)
{
return AjaxResult.error(message.getMessage());
... ...
package com.zhonglai.luhui.openai.controller;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.system.service.PublicService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
... ... @@ -20,6 +29,11 @@ import java.util.Map;
@RequestMapping("/userInfo")
public class UserInfoController extends BaseController {
@Autowired
private ServerConfig serverConfig;
private static final String FILE_DELIMETER = ",";
@Autowired
private PublicService publicService;
@ApiOperation("获取用户信息")
@GetMapping("/getUserInfo")
... ... @@ -49,7 +63,7 @@ public class UserInfoController extends BaseController {
public TableDataInfo useFlowPacketRemainLog()
{
startPage();
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT * FROM `lk_openai`.`user_flow_packet_remain_log` WHERE `user_id=`"+getUserId().intValue()+" and `type`=2 order by create_time desc");
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT * FROM `lk_openai`.`user_flow_packet_remain_log` WHERE `user_id`="+getUserId().intValue()+" and `type`=2 order by create_time desc");
return getDataTable(list);
}
... ... @@ -61,4 +75,45 @@ public class UserInfoController extends BaseController {
List<Map<String,Object>> list = publicService.getObjectListBySQL("SELECT * FROM `lk_openai`.`user_flow_packet_remain_log` WHERE `user_id`="+getUserId().intValue()+" and `type`=1 order by create_time desc");
return getDataTable(list);
}
/**
* 通用上传请求(多个)
*/
@ApiOperation("通用上传请求(多个)")
@ApiImplicitParams({
@ApiImplicitParam(name = "files", value = "文件集合", required = true, dataType = "List<MultipartFile>", dataTypeClass = List.class)
})
@PostMapping("/uploads")
public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
List<String> urls = new ArrayList<String>();
List<String> fileNames = new ArrayList<String>();
List<String> newFileNames = new ArrayList<String>();
List<String> originalFilenames = new ArrayList<String>();
for (MultipartFile file : files)
{
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
urls.add(url);
fileNames.add(fileName);
newFileNames.add(FileUtils.getName(fileName));
originalFilenames.add(file.getOriginalFilename());
}
AjaxResult ajax = AjaxResult.success();
ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
}
... ...
... ... @@ -85,7 +85,7 @@ public class VipServiceImpl {
{
if("openai".equals(map.get("key")))
{
openaiUnitprice = new BigDecimal(map.get("value").toString());
openaiUnitprice = new BigDecimal(map.get("value").toString());
}else if("reality".equals(map.get("key")))
{
realityUnitprice = new BigDecimal(map.get("value").toString());
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 获取ip地址开关 addressEnabled: false # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8082 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-openai # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-chat-gpt send-tags: 1 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs chatgpt: token: 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 timeout: 5000
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 获取ip地址开关 addressEnabled: false # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8082 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-openai # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-chat-gpt send-tags: 1 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/openAiUserLogin/* chatgpt: token: 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 timeout: 5000
\ No newline at end of file
... ...
#错误消息
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
user.not.exists=用户不存在/密码错误
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟
user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,请联系管理员
role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.register.success=注册成功
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
##文件上传消息
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
upload.filename.exceed.length=上传的文件名最长{0}个字符
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
... ...
... ... @@ -303,6 +303,12 @@
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
... ...
... ... @@ -179,5 +179,10 @@
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
... ...
... ... @@ -4,7 +4,7 @@ import lombok.Data;
@Data
public class Message {
private int code;
private Integer code;
private String message;
private Object data;
... ...
package com.ruoyi.common.utils;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class GsonConstructor {
private static final Gson gson;
public GsonConstructor() {
}
public static final Gson get() {
return gson;
}
static {
gson = (new GsonBuilder()).setVersion(1.0D).disableInnerClassSerialization().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).setDateFormat("yyyy-MM-dd").setPrettyPrinting().create();
}
}
... ...
... ... @@ -131,12 +131,16 @@ public class PublicSQL {
/**
* 指定表名添加对象
* @param object
* @return
*/
public String insertToTable(Object object)
public String insertToTable(Map map)
{
Object object = map.get("object");
String tableName = changTableNameFromObject(object);
if(map.containsKey("tableName"))
{
tableName = map.get("tableName").toString();
}
StringBuffer sql = new StringBuffer();
sql.append("insert into ");
sql.append(tableName + "(");
... ...
package com.ruoyi.system.login.dto;
import com.ruoyi.common.core.domain.BaseLoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.tool.PublicSQLConfig;
import com.ruoyi.system.domain.tool.SysLogininforType;
import org.springframework.security.core.GrantedAuthority;
import java.util.Collection;
... ... @@ -12,9 +14,26 @@ public class OpenAiLoginUser extends BaseLoginUser {
private OpenAiUserInfo openAiUserInfo;
public OpenAiLoginUser() {
}
public OpenAiLoginUser(OpenAiUserInfo openAiUserInfo) {
this.openAiUserInfo = openAiUserInfo;
setUserId(new Long(openAiUserInfo.getId()));
super.setUserId(new Long(openAiUserInfo.getId()));
}
public OpenAiLoginUser(OpenAiUserInfo openAiUserInfo,Long userId, String token, Long loginTime, Long expireTime, String ipaddr, String loginLocation, String browser, String os, SysLogininforType sysLogininforType) {
super.setUserId(userId);
super.setToken(token);
super.setLoginTime(loginTime);
super.setExpireTime(expireTime);
super.setIpaddr(ipaddr);
super.setLoginLocation(loginLocation);
super.setBrowser(browser);
super.setOs(os);
super.setSysLogininforType( sysLogininforType);
super.setUserId(new Long(openAiUserInfo.getId()));
this.openAiUserInfo = openAiUserInfo;
}
@Override
... ... @@ -29,7 +48,7 @@ public class OpenAiLoginUser extends BaseLoginUser {
@Override
public String getPassword() {
return "123456";
return SecurityUtils.encryptPassword("123456");
}
@Override
... ... @@ -56,4 +75,12 @@ public class OpenAiLoginUser extends BaseLoginUser {
public boolean isEnabled() {
return openAiUserInfo.getState()!=0;
}
public OpenAiUserInfo getOpenAiUserInfo() {
return openAiUserInfo;
}
public void setOpenAiUserInfo(OpenAiUserInfo openAiUserInfo) {
this.openAiUserInfo = openAiUserInfo;
}
}
... ...
... ... @@ -16,7 +16,7 @@ public class OpenAiUserInfo implements Serializable {
private String nickname; // varchar(50) DEFAULT NULL COMMENT '昵称',
private String img_url; // varchar(50) DEFAULT NULL COMMENT '头像地址',
private Integer vip_level; //vip等级(0试用用户,1vip1,2vip2,3vip3)
private Integer getVip_level_end_time; //vip到期时间
private Integer vip_level_end_time; //vip到期时间
private Integer create_time; //创建时间
private Integer flow_packet_remain; //流量包余额
private Integer flow_packet_total; //流量包总额
... ... @@ -70,12 +70,12 @@ public class OpenAiUserInfo implements Serializable {
this.vip_level = vip_level;
}
public Integer getGetVip_level_end_time() {
return getVip_level_end_time;
public Integer getVip_level_end_time() {
return vip_level_end_time;
}
public void setGetVip_level_end_time(Integer getVip_level_end_time) {
this.getVip_level_end_time = getVip_level_end_time;
public void setVip_level_end_time(Integer vip_level_end_time) {
this.vip_level_end_time = vip_level_end_time;
}
public Integer getCreate_time() {
... ...
... ... @@ -12,6 +12,8 @@ import eu.bitwalker.useragentutils.UserAgent;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
... ... @@ -29,6 +31,8 @@ import java.util.concurrent.TimeUnit;
@Component
public class TokenService
{
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
// 令牌自定义标识
@Value("${token.header}")
private String header;
... ... @@ -75,7 +79,7 @@ public class TokenService
}
catch (Exception e)
{
System.err.println(e);
logger.error("令牌获取登录信息失败",e);
}
}
return null;
... ...
... ... @@ -22,7 +22,7 @@ public interface PublicMapper {
* 指定表名添加
*/
@InsertProvider(type = PublicSQL.class, method = "insertToTable")
int insertToTable(Object object,String tableName);
int insertToTable(@Param("object") Object object,@Param("tableName") String tableName);
/**
* 添加对象集合
... ...