GptTeamAccountServiceImpl.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.cyksj.service.chatgpt.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.cyksj.common.exception.BusinessRuntimeException;
  7. import com.cyksj.mapper.GptTeamAccountMapper;
  8. import com.cyksj.model.entity.GptTeamAccount;
  9. import com.cyksj.service.chatgpt.ChatGptWorkspaceService;
  10. import com.cyksj.service.chatgpt.GptTeamAccountService;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.util.ArrayList;
  16. import java.util.HashSet;
  17. import java.util.List;
  18. import java.util.Set;
  19. /**
  20. * GPT Team账号 Service实现
  21. */
  22. @Slf4j
  23. @Service
  24. @RequiredArgsConstructor
  25. public class GptTeamAccountServiceImpl extends ServiceImpl<GptTeamAccountMapper, GptTeamAccount> implements GptTeamAccountService {
  26. private final ChatGptWorkspaceService gptWorkspaceService;
  27. @Override
  28. @Transactional(rollbackFor = Exception.class)
  29. public void addAccount(GptTeamAccount account) {
  30. // 验证token唯一性
  31. if (StrUtil.isNotBlank(account.getToken())) {
  32. Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
  33. .eq(GptTeamAccount::getToken, account.getToken()));
  34. if (count > 0) {
  35. throw BusinessRuntimeException.getInstance("Token已存在");
  36. }
  37. }
  38. // 验证账号唯一性
  39. if (StrUtil.isNotBlank(account.getAccount())) {
  40. Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
  41. .eq(GptTeamAccount::getAccount, account.getAccount()));
  42. if (count > 0) {
  43. throw BusinessRuntimeException.getInstance("账号已存在");
  44. }
  45. }
  46. this.save(account);
  47. }
  48. @Override
  49. @Transactional(rollbackFor = Exception.class)
  50. public void updateAccount(GptTeamAccount account) {
  51. if (account.getId() == null) {
  52. throw BusinessRuntimeException.getInstance("ID不能为空");
  53. }
  54. // 验证token唯一性
  55. if (StrUtil.isNotBlank(account.getToken())) {
  56. Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
  57. .eq(GptTeamAccount::getToken, account.getToken())
  58. .ne(GptTeamAccount::getId, account.getId()));
  59. if (count > 0) {
  60. throw BusinessRuntimeException.getInstance("Token已存在");
  61. }
  62. }
  63. // 验证账号唯一性
  64. if (StrUtil.isNotBlank(account.getAccount())) {
  65. Integer count = baseMapper.selectCount(Wrappers.lambdaQuery(GptTeamAccount.class)
  66. .eq(GptTeamAccount::getAccount, account.getAccount())
  67. .ne(GptTeamAccount::getId, account.getId()));
  68. if (count > 0) {
  69. throw BusinessRuntimeException.getInstance("账号已存在");
  70. }
  71. }
  72. this.updateById(account);
  73. }
  74. @Override
  75. @Transactional(rollbackFor = Exception.class)
  76. public void deleteAccount(Long id) {
  77. if (id == null) {
  78. throw BusinessRuntimeException.getInstance("ID不能为空");
  79. }
  80. this.removeById(id);
  81. }
  82. @Override
  83. @Transactional(rollbackFor = Exception.class)
  84. public void batchImport(List<String> tokens) {
  85. if (CollUtil.isEmpty(tokens)) {
  86. throw BusinessRuntimeException.getInstance("导入数据不能为空");
  87. }
  88. // 去重
  89. Set<String> tokenSet = new HashSet<>(tokens);
  90. // 过滤空白token
  91. tokenSet.removeIf(StrUtil::isBlank);
  92. if (tokenSet.isEmpty()) {
  93. throw BusinessRuntimeException.getInstance("有效token为空");
  94. }
  95. // 查询已存在的token
  96. List<GptTeamAccount> existingAccounts = baseMapper.selectList(
  97. Wrappers.lambdaQuery(GptTeamAccount.class)
  98. .in(GptTeamAccount::getToken, tokenSet)
  99. );
  100. Set<String> existingTokens = new HashSet<>();
  101. for (GptTeamAccount account : existingAccounts) {
  102. existingTokens.add(account.getToken());
  103. }
  104. // 准备新增的账号列表
  105. List<GptTeamAccount> newAccounts = new ArrayList<>();
  106. int skipCount = 0;
  107. for (String token : tokenSet) {
  108. if (existingTokens.contains(token)) {
  109. skipCount++;
  110. continue;
  111. }
  112. GptTeamAccount account = new GptTeamAccount();
  113. account.setToken(token);
  114. account.setStatus(true); // 默认启用
  115. newAccounts.add(account);
  116. }
  117. // 批量保存
  118. if (CollUtil.isNotEmpty(newAccounts)) {
  119. this.saveBatch(newAccounts);
  120. }
  121. }
  122. @Override
  123. public void removeTeamUser(String accountId, String userKey) {
  124. gptWorkspaceService.deleteWorkspaceUser(accountId, userKey);
  125. }
  126. }