diff --git a/src/main/java/com/accounting/controller/BillController.java b/src/main/java/com/accounting/controller/BillController.java index 7f2f425..2742aad 100644 --- a/src/main/java/com/accounting/controller/BillController.java +++ b/src/main/java/com/accounting/controller/BillController.java @@ -2,6 +2,7 @@ package com.accounting.controller; import com.accounting.dto.BillRequest; import com.accounting.dto.BillResponse; +import com.accounting.dto.BatchBillRequest; import com.accounting.entity.User; import com.accounting.mapper.UserMapper; import com.accounting.service.BillService; @@ -37,6 +38,14 @@ public class BillController { return ResponseEntity.ok(response); } + @Operation(summary = "批量创建账单") + @PostMapping("/batch") + public ResponseEntity> createBills(@Valid @RequestBody BatchBillRequest request, Authentication authentication) { + Long userId = getUserId(authentication); + List responses = billService.createBills(request, userId); + return ResponseEntity.ok(responses); + } + @Operation(summary = "更新账单") @PutMapping("/{id}") public ResponseEntity updateBill(@PathVariable Long id, @Valid @RequestBody BillRequest request, Authentication authentication) { diff --git a/src/main/java/com/accounting/service/BillService.java b/src/main/java/com/accounting/service/BillService.java index 4229b36..e03024c 100644 --- a/src/main/java/com/accounting/service/BillService.java +++ b/src/main/java/com/accounting/service/BillService.java @@ -2,6 +2,7 @@ package com.accounting.service; import com.accounting.dto.BillRequest; import com.accounting.dto.BillResponse; +import com.accounting.dto.BatchBillRequest; import com.accounting.entity.Account; import com.accounting.entity.Bill; import com.accounting.entity.Category; @@ -14,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -56,6 +58,39 @@ public class BillService { return convertToResponse(bill, category); } + @Transactional + public List createBills(BatchBillRequest request, Long userId) { + List responses = new ArrayList<>(); + + // 获取或创建账户 + Account account = accountService.getOrCreateAccount(userId); + + for (BillRequest billRequest : request.getBills()) { + // 验证分类是否存在 + Category category = categoryMapper.selectById(billRequest.getCategoryId()); + if (category == null) { + throw new RuntimeException("分类不存在,分类ID: " + billRequest.getCategoryId()); + } + + // 创建账单 + Bill bill = new Bill(); + bill.setUserId(userId); + bill.setAccountId(account.getId()); // 自动关联账户 + bill.setCategoryId(billRequest.getCategoryId()); + bill.setAmount(billRequest.getAmount()); + bill.setDescription(billRequest.getDescription()); + bill.setBillDate(billRequest.getBillDate() != null ? billRequest.getBillDate() : LocalDate.now()); + bill.setImageUrl(billRequest.getImageUrl()); + bill.setType(billRequest.getType()); // 设置账单类型 + + billMapper.insert(bill); + + responses.add(convertToResponse(bill, category)); + } + + return responses; + } + @Transactional public BillResponse updateBill(Long id, BillRequest request, Long userId) { // 验证账单是否存在且属于当前用户