diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentVoicePrintServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentVoicePrintServiceImpl.java index a51067ea..5341e823 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentVoicePrintServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentVoicePrintServiceImpl.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.*; import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; @@ -39,6 +40,8 @@ public class AgentVoicePrintServiceImpl extends ServiceImpl { + try { + // 保存声纹信息 + int row = baseMapper.insert(entity); + // 插入一条数据,影响的数据不等于1说明出现了,保存问题回滚 + if (row != 1) { + status.setRollbackOnly(); // 标记事务回滚 + return false; + } + // 发送注册声纹请求 + registerVoicePrint(entity.getId(), resource); + return true; + } catch (Exception e) { + status.setRollbackOnly(); // 标记事务回滚 + throw e; + } + })); } @Override public boolean delete(String voicePrintId) { - int insert = baseMapper.deleteById(voicePrintId); - if(insert != 1){ - throw new RenException("声纹删除失败"); - } - URI uri = getVoicePrintURI(); - String baseUrl = getBaseUrl(uri); - String requestUrl = baseUrl + "/voiceprint/" + voicePrintId; - // 创建请求头 - HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", getAuthorization(uri)); - // 创建请求体 - HttpEntity> requestEntity = new HttpEntity<>(headers); - - // 发送 POST 请求 - ResponseEntity response = restTemplate.exchange(requestUrl, HttpMethod.DELETE, requestEntity, String.class); - if (response.getStatusCode() != HttpStatus.OK) { - throw new RenException("声纹保存失败"); - } - // 检查响应内容 - String responseBody = response.getBody(); - if(responseBody == null || !responseBody.contains("true")){ - throw new RenException("声纹保存失败"); - } - return true; + // 开启事务 + return Boolean.TRUE.equals(transactionTemplate.execute(status -> { + try { + // 删除声纹 + int row = baseMapper.deleteById(voicePrintId); + if(row != 1){ + status.setRollbackOnly(); // 标记事务回滚 + return false; + } + cancelVoicePrint(voicePrintId); + return true; + } catch (Exception e) { + status.setRollbackOnly(); // 标记事务回滚 + throw e; + } + })); } + + @Override public List list(String agentId) { List list = baseMapper.selectList(new LambdaQueryWrapper() @@ -101,14 +109,35 @@ public class AgentVoicePrintServiceImpl extends ServiceImpl { + try { + AgentVoicePrintEntity entity = ConvertUtils.sourceToTarget(dto, AgentVoicePrintEntity.class); + int row = baseMapper.updateById(entity); + if (row != 1){ + status.setRollbackOnly(); // 标记事务回滚 + return false; + } + if(resource != null){ + String id = entity.getId(); + // 先注销之前这个声纹id上的声纹向量 + cancelVoicePrint(id); + // 发送注册声纹请求 + registerVoicePrint(id, resource); + } + return true; + } catch (Exception e) { + status.setRollbackOnly(); // 标记事务回滚 + throw e; + } + })); } /** @@ -207,4 +236,30 @@ public class AgentVoicePrintServiceImpl extends ServiceImpl> requestEntity = new HttpEntity<>(headers); + + // 发送 POST 请求 + ResponseEntity response = restTemplate.exchange(requestUrl, HttpMethod.DELETE, requestEntity, String.class); + if (response.getStatusCode() != HttpStatus.OK) { + throw new RenException("声纹保存失败"); + } + // 检查响应内容 + String responseBody = response.getBody(); + if(responseBody == null || !responseBody.contains("true")){ + throw new RenException("声纹保存失败"); + } + } }