|
|
@@ -1,7 +1,7 @@
|
|
|
package com.cyksj.service.gpt.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import cn.hutool.core.lang.Validator;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
@@ -9,10 +9,8 @@ import com.cyksj.mapper.GoodsDonSkuMapper;
|
|
|
import com.cyksj.mapper.GptTeamAccountMapper;
|
|
|
import com.cyksj.mapper.GptTeamUserBindRecordMapper;
|
|
|
import com.cyksj.mapper.OrderDonMapper;
|
|
|
-import com.cyksj.model.entity.GoodsDonSku;
|
|
|
-import com.cyksj.model.entity.GptTeamAccount;
|
|
|
-import com.cyksj.model.entity.GptTeamUserBindRecord;
|
|
|
-import com.cyksj.model.entity.OrderDon;
|
|
|
+import com.cyksj.mapper.sys.SysConfigMapper;
|
|
|
+import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.GptTeamBindRequest;
|
|
|
import com.cyksj.service.gpt.GptTeamUserBindRecordService;
|
|
|
import com.cyksj.service.user.UserBindRelationService;
|
|
|
@@ -42,6 +40,8 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
|
|
|
private final GoodsDonSkuMapper goodsDonSkuMapper;
|
|
|
|
|
|
+ private final SysConfigMapper sysConfigMapper;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
public void bindByOrderId(GptTeamBindRequest request) {
|
|
|
@@ -78,22 +78,23 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
} catch (DuplicateKeyException e) {
|
|
|
throw BusinessRuntimeException.getInstance("已有绑定的Team");
|
|
|
}
|
|
|
-
|
|
|
- // 3. 查找可用的GPT Team账号
|
|
|
- LambdaQueryWrapper<GptTeamAccount> accountWrapper = new LambdaQueryWrapper<>();
|
|
|
- accountWrapper.eq(GptTeamAccount::getStatus, true)
|
|
|
- .notExists("SELECT 1 FROM gpt_team_user_bind_record WHERE gpt_team_account_id = gpt_team_account.id AND bind_status = 1");
|
|
|
-
|
|
|
- List<GptTeamAccount> availableAccounts = gptTeamAccountMapper.selectList(accountWrapper);
|
|
|
- if (availableAccounts.isEmpty()) {
|
|
|
- throw new BusinessRuntimeException("暂无可用的GPT Team账号,请稍后再试");
|
|
|
+ Integer gptTeamInviteLimitNum = getGptTeamInviteLimitNum();
|
|
|
+ GptTeamAccount teamAccount = gptTeamAccountMapper.selecAvailableTeam(gptTeamInviteLimitNum);
|
|
|
+ if (teamAccount == null) {
|
|
|
+ throw BusinessRuntimeException.getInstance("加入Team失败,请联系客服配置Team后重新加入!");
|
|
|
}
|
|
|
-
|
|
|
- GptTeamAccount selectedAccount = availableAccounts.get(0);
|
|
|
-
|
|
|
- //绑定 Team API
|
|
|
- bindRecord.setToken("");
|
|
|
+ int update = gptTeamAccountMapper.update(null, Wrappers.lambdaUpdate(GptTeamAccount.class)
|
|
|
+ .set(GptTeamAccount::getTotalNum, teamAccount.getTotalNum() + 1)
|
|
|
+ .eq(GptTeamAccount::getId, teamAccount.getId())
|
|
|
+ .eq(GptTeamAccount::getTotalNum, teamAccount.getTotalNum())
|
|
|
+ .lt(GptTeamAccount::getTotalNum, gptTeamInviteLimitNum));
|
|
|
+ if (update == 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
|
+ }
|
|
|
+ bindRecord.setToken(teamAccount.getToken());
|
|
|
bindRecordMapper.updateById(bindRecord);
|
|
|
+ //绑定 Team API TODO
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -112,15 +113,13 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
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"));
|
|
|
if (bindRecord == null) {
|
|
|
- throw BusinessRuntimeException.getInstance("您还未假如Team");
|
|
|
+ throw BusinessRuntimeException.getInstance("您还未加入Team");
|
|
|
}
|
|
|
-
|
|
|
- // 1. 验证换绑次数
|
|
|
+ // 验证换绑次数
|
|
|
Integer changeNum = bindRecord.getChangeNum();
|
|
|
if (changeNum == 0) {
|
|
|
throw new BusinessRuntimeException("仅可换绑一次");
|
|
|
}
|
|
|
-
|
|
|
int update = bindRecordMapper.update(null, Wrappers.lambdaUpdate(GptTeamUserBindRecord.class)
|
|
|
.set(GptTeamUserBindRecord::getChangeNum, 0)
|
|
|
.eq(GptTeamUserBindRecord::getId, bindRecord.getId())
|
|
|
@@ -130,14 +129,34 @@ public class GptTeamUserBindRecordServiceImpl implements GptTeamUserBindRecordSe
|
|
|
}
|
|
|
//换绑前的token
|
|
|
String bfToken = bindRecord.getToken();
|
|
|
- // 4. 查找新的可用账号
|
|
|
- LambdaQueryWrapper<GptTeamAccount> accountWrapper = new LambdaQueryWrapper<>();
|
|
|
- accountWrapper.eq(GptTeamAccount::getStatus, true)
|
|
|
- .ne(GptTeamAccount::getToken, bfToken)
|
|
|
- .notExists("SELECT 1 FROM gpt_team_user_bind_record WHERE gpt_team_account_id = gpt_team_account.id AND bind_status = 1");
|
|
|
- //换绑其他Team API
|
|
|
- bindRecord.setToken("");
|
|
|
+ // 查找新的可用账号
|
|
|
+ Integer gptTeamInviteLimitNum = getGptTeamInviteLimitNum();
|
|
|
+ GptTeamAccount teamAccount = gptTeamAccountMapper.selecAvailableTeam(gptTeamInviteLimitNum);
|
|
|
+ if (teamAccount == null) {
|
|
|
+ throw BusinessRuntimeException.getInstance("换绑其他Team失败,请联系客服配置Team后重新换绑!");
|
|
|
+ }
|
|
|
+ int updateTeamCount = gptTeamAccountMapper.update(null, Wrappers.lambdaUpdate(GptTeamAccount.class)
|
|
|
+ .set(GptTeamAccount::getTotalNum, teamAccount.getTotalNum() + 1)
|
|
|
+ .eq(GptTeamAccount::getId, teamAccount.getId())
|
|
|
+ .eq(GptTeamAccount::getTotalNum, teamAccount.getTotalNum())
|
|
|
+ .lt(GptTeamAccount::getTotalNum, gptTeamInviteLimitNum));
|
|
|
+ if (updateTeamCount == 0) {
|
|
|
+ throw BusinessRuntimeException.getInstance("系统繁忙,请重试!");
|
|
|
+ }
|
|
|
+ bindRecord.setToken(teamAccount.getToken());
|
|
|
bindRecord.setBfToken(bfToken);
|
|
|
bindRecordMapper.updateById(bindRecord);
|
|
|
+
|
|
|
+ //换绑其他Team API TODO
|
|
|
+ }
|
|
|
+
|
|
|
+ public Integer getGptTeamInviteLimitNum() {
|
|
|
+ //默认5
|
|
|
+ Integer inviteLimitNum = 5;
|
|
|
+ SysConfig sysConfig = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.GPT_TEAM_INVITE_NUM).last("limit 1"));
|
|
|
+ if (sysConfig != null && Validator.isNumber(sysConfig.getSysValue())) {
|
|
|
+ inviteLimitNum = Integer.parseInt(sysConfig.getSysValue());
|
|
|
+ }
|
|
|
+ return inviteLimitNum;
|
|
|
}
|
|
|
}
|