From 85da52ffb9ec443c982564303a2bccf13ab1f818 Mon Sep 17 00:00:00 2001 From: H1d3rOne Date: Sun, 8 Mar 2026 21:27:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=8B=E7=AE=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=87=8D=E5=A4=8D=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题分析: - 用户测算一次可能产生多条重复记录 - 原因:没有去重机制,每次调用保存接口都创建新记录 解决方案: - 后端添加去重逻辑:DeductRecordService.saveRecord() - 根据userId + type + inputData判断是否已存在相同记录 - 如果存在则更新记录,不存在则创建新记录 - 新增Repository方法:findByUserIdAndTypeAndInputData() 去重机制: - 相同用户、相同测算类型、相同输入数据视为重复 - 重复记录只更新结果数据和AI分析 - 避免数据库中产生大量重复记录 --- .../xuan/repository/DeductRecordRepository.java | 2 ++ .../java/xuan/service/DeductRecordService.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/xuan/repository/DeductRecordRepository.java b/src/main/java/xuan/repository/DeductRecordRepository.java index d419937..6b6eb62 100644 --- a/src/main/java/xuan/repository/DeductRecordRepository.java +++ b/src/main/java/xuan/repository/DeductRecordRepository.java @@ -29,4 +29,6 @@ public interface DeductRecordRepository extends JpaRepository findByUserIdAndTypeAndKeyword(@Param("userId") String userId, @Param("type") String type, @Param("keyword") String keyword, Pageable pageable); + + List findByUserIdAndTypeAndInputData(String userId, String type, String inputData); } diff --git a/src/main/java/xuan/service/DeductRecordService.java b/src/main/java/xuan/service/DeductRecordService.java index d36c283..d5967f2 100644 --- a/src/main/java/xuan/service/DeductRecordService.java +++ b/src/main/java/xuan/service/DeductRecordService.java @@ -20,6 +20,21 @@ public class DeductRecordService { @Transactional public DeductRecord saveRecord(DeductRecord record) { + if (record.getInputData() != null && !record.getInputData().isEmpty()) { + List existingRecords = recordRepository.findByUserIdAndTypeAndInputData( + record.getUserId(), + record.getType(), + record.getInputData() + ); + + if (!existingRecords.isEmpty()) { + DeductRecord existingRecord = existingRecords.get(0); + existingRecord.setResultData(record.getResultData()); + existingRecord.setAiAnalysis(record.getAiAnalysis()); + return recordRepository.save(existingRecord); + } + } + return recordRepository.save(record); }