|
@@ -1,6 +1,7 @@
|
|
|
package com.cyksj.service.gpt.impl;
|
|
package com.cyksj.service.gpt.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.lang.Validator;
|
|
import cn.hutool.core.lang.Validator;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.constant.Constant;
|
|
import com.cyksj.common.constant.Constant;
|
|
@@ -11,8 +12,11 @@ import com.cyksj.mapper.GptTeamAccountMapper;
|
|
|
import com.cyksj.mapper.GptTeamUserBindRecordMapper;
|
|
import com.cyksj.mapper.GptTeamUserBindRecordMapper;
|
|
|
import com.cyksj.mapper.OrderDonMapper;
|
|
import com.cyksj.mapper.OrderDonMapper;
|
|
|
import com.cyksj.mapper.sys.SysConfigMapper;
|
|
import com.cyksj.mapper.sys.SysConfigMapper;
|
|
|
|
|
+import com.cyksj.model.dto.chatgpt.WorkspaceInviteRequest;
|
|
|
|
|
+import com.cyksj.model.dto.chatgpt.WorkspaceInviteResponse;
|
|
|
import com.cyksj.model.entity.*;
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.GptTeamBindRequest;
|
|
import com.cyksj.model.request.GptTeamBindRequest;
|
|
|
|
|
+import com.cyksj.service.chatgpt.ChatGptWorkspaceService;
|
|
|
import com.cyksj.service.gpt.GptTeamUserBindRecordService;
|
|
import com.cyksj.service.gpt.GptTeamUserBindRecordService;
|
|
|
import com.cyksj.service.user.UserBindRelationService;
|
|
import com.cyksj.service.user.UserBindRelationService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
@@ -44,6 +48,8 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
|
|
|
|
|
private final SysConfigMapper sysConfigMapper;
|
|
private final SysConfigMapper sysConfigMapper;
|
|
|
|
|
|
|
|
|
|
+ private final ChatGptWorkspaceService chatGptWorkspaceService;
|
|
|
|
|
+
|
|
|
private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
|
|
private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -89,7 +95,7 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
if (teamAccount == null) {
|
|
if (teamAccount == null) {
|
|
|
throw BusinessRuntimeException.getInstance("加入Team失败,请联系客服配置Team后重新加入!");
|
|
throw BusinessRuntimeException.getInstance("加入Team失败,请联系客服配置Team后重新加入!");
|
|
|
}
|
|
}
|
|
|
- Integer totalNum = bindRecordMapper.selectCount(Wrappers.lambdaQuery(GptTeamUserBindRecord.class).eq(GptTeamUserBindRecord::getToken, teamAccount.getToken()).eq(GptTeamUserBindRecord::getStatus, 1));
|
|
|
|
|
|
|
+ Integer totalNum = bindRecordMapper.selectCount(Wrappers.lambdaQuery(GptTeamUserBindRecord.class).eq(GptTeamUserBindRecord::getAccountId, teamAccount.getAccountId()).eq(GptTeamUserBindRecord::getStatus, 1));
|
|
|
int update = gptTeamAccountMapper.update(null, Wrappers.lambdaUpdate(GptTeamAccount.class)
|
|
int update = gptTeamAccountMapper.update(null, Wrappers.lambdaUpdate(GptTeamAccount.class)
|
|
|
.set(GptTeamAccount::getTotalNum, totalNum + 1)
|
|
.set(GptTeamAccount::getTotalNum, totalNum + 1)
|
|
|
.eq(GptTeamAccount::getId, teamAccount.getId())
|
|
.eq(GptTeamAccount::getId, teamAccount.getId())
|
|
@@ -97,10 +103,11 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
if (update == 0) {
|
|
if (update == 0) {
|
|
|
throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
|
}
|
|
}
|
|
|
- bindRecord.setToken(teamAccount.getToken());
|
|
|
|
|
|
|
+ bindRecord.setAccountId(teamAccount.getAccountId());
|
|
|
bindRecord.setStatus(Boolean.TRUE);
|
|
bindRecord.setStatus(Boolean.TRUE);
|
|
|
bindRecordMapper.updateById(bindRecord);
|
|
bindRecordMapper.updateById(bindRecord);
|
|
|
- //绑定 Team API TODO
|
|
|
|
|
|
|
+ //绑定gpt team
|
|
|
|
|
+ bindTeam(teamAccount.getAccountId(), email, bindRecord);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -110,7 +117,7 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
Long userId = request.getUserId();
|
|
Long userId = request.getUserId();
|
|
|
|
|
|
|
|
List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
|
|
List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
|
|
|
- GptTeamUserBindRecord bindRecord = bindRecordMapper.selectOne(Wrappers.lambdaQuery(GptTeamUserBindRecord.class).eq(GptTeamUserBindRecord::getOrderId, orderId).in(GptTeamUserBindRecord::getUserId, userIdList).last("limit 1"));
|
|
|
|
|
|
|
+ GptTeamUserBindRecord bindRecord = bindRecordMapper.selectOne(Wrappers.lambdaQuery(GptTeamUserBindRecord.class).eq(GptTeamUserBindRecord::getOrderId, orderId).eq(GptTeamUserBindRecord::getStatus, Boolean.TRUE).in(GptTeamUserBindRecord::getUserId, userIdList).last("limit 1"));
|
|
|
if (bindRecord == null) {
|
|
if (bindRecord == null) {
|
|
|
throw BusinessRuntimeException.getInstance("您还未加入Team");
|
|
throw BusinessRuntimeException.getInstance("您还未加入Team");
|
|
|
}
|
|
}
|
|
@@ -126,8 +133,9 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
if (update == 0) {
|
|
if (update == 0) {
|
|
|
throw new BusinessRuntimeException("仅可换绑一次");
|
|
throw new BusinessRuntimeException("仅可换绑一次");
|
|
|
}
|
|
}
|
|
|
- //换绑前的token
|
|
|
|
|
- String bfToken = bindRecord.getToken();
|
|
|
|
|
|
|
+ //换绑前的空间id
|
|
|
|
|
+ String bfAccountId = bindRecord.getAccountId();
|
|
|
|
|
+ String bfUserKey = bindRecord.getUserKey();
|
|
|
// 查找新的可用账号
|
|
// 查找新的可用账号
|
|
|
Integer gptTeamInviteLimitNum = getGptTeamInviteLimitNum();
|
|
Integer gptTeamInviteLimitNum = getGptTeamInviteLimitNum();
|
|
|
GptTeamAccount teamAccount = gptTeamAccountMapper.selecAvailableTeam(gptTeamInviteLimitNum);
|
|
GptTeamAccount teamAccount = gptTeamAccountMapper.selecAvailableTeam(gptTeamInviteLimitNum);
|
|
@@ -141,11 +149,18 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
if (updateTeamCount == 0) {
|
|
if (updateTeamCount == 0) {
|
|
|
throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
|
}
|
|
}
|
|
|
- bindRecord.setToken(teamAccount.getToken());
|
|
|
|
|
- bindRecord.setBfToken(bfToken);
|
|
|
|
|
|
|
+ bindRecord.setAccountId(teamAccount.getAccountId());
|
|
|
|
|
+ bindRecord.setBfAccountId(bfAccountId);
|
|
|
|
|
+ bindRecord.setBfUserKey(bfUserKey);
|
|
|
bindRecordMapper.updateById(bindRecord);
|
|
bindRecordMapper.updateById(bindRecord);
|
|
|
-
|
|
|
|
|
- //换绑其他Team API TODO
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ //换绑
|
|
|
|
|
+ bindTeam(teamAccount.getAccountId(), bindRecord.getBindEmail(), bindRecord);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("换绑其他Team失败,请重试!");
|
|
|
|
|
+ }
|
|
|
|
|
+ //解绑
|
|
|
|
|
+ chatGptWorkspaceService.deleteWorkspaceUser(bfAccountId, bfUserKey);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public Integer getGptTeamInviteLimitNum() {
|
|
public Integer getGptTeamInviteLimitNum() {
|
|
@@ -157,4 +172,23 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
}
|
|
}
|
|
|
return inviteLimitNum;
|
|
return inviteLimitNum;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 绑定GPT TEAM
|
|
|
|
|
+ */
|
|
|
|
|
+ public void bindTeam(String accountId, String email, GptTeamUserBindRecord bindRecord) {
|
|
|
|
|
+ //绑定 Team API
|
|
|
|
|
+ WorkspaceInviteRequest workspaceInviteRequest = new WorkspaceInviteRequest();
|
|
|
|
|
+ workspaceInviteRequest.setEmailAddresses(List.of(email));
|
|
|
|
|
+ WorkspaceInviteResponse workspaceInviteResponse = chatGptWorkspaceService.sendWorkspaceInvite(accountId, workspaceInviteRequest);
|
|
|
|
|
+
|
|
|
|
|
+ List<WorkspaceInviteResponse.AccountInvite> accountInvites = workspaceInviteResponse.getAccountInvites();
|
|
|
|
|
+ WorkspaceInviteResponse.AccountInvite accountInvite = accountInvites.get(0);
|
|
|
|
|
+ //绑定时间
|
|
|
|
|
+ String createdTime = accountInvite.getCreatedTime();
|
|
|
|
|
+ bindRecord.setBindTime(DateUtil.parseDateTime(createdTime));
|
|
|
|
|
+ //成员ID
|
|
|
|
|
+ bindRecord.setUserKey(accountInvite.getId());
|
|
|
|
|
+ bindRecordMapper.updateById(bindRecord);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|