gaoluyang
3 小时以前 2eadf3769b41e74c56364f3a6509a728a652af51
feat(erp): 付款单付款账户、关联来票、付款明细改为非必填

- 去掉 accountName/invoiceId/items 的 @NotEmpty/@NotNull,requiredMode 改 NOT_REQUIRED
- 关联来票为空时跳过来票校验与剩余可付金额校验

Co-Authored-By: Claude Code <noreply@anthropic.com>
已修改3个文件
24 ■■■■■ 文件已修改
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentRespVO.java
@@ -42,12 +42,12 @@
    @Schema(description = "供应商名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "小番茄公司")
    private String supplierName;
    @Schema(description = "关联的来票编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787")
    @Schema(description = "关联的来票编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "25787")
    private Long invoiceId;
    @Schema(description = "关联的来票信息")
    private ErpPurchaseInvoiceRespVO invoice;
    @Schema(description = "付款账户", requiredMode = Schema.RequiredMode.REQUIRED, example = "农行对公账户")
    @Schema(description = "付款账户", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "农行对公账户")
    private String accountName;
    @Schema(description = "合计价格,单位:元", requiredMode = Schema.RequiredMode.REQUIRED, example = "13832")
@@ -74,7 +74,7 @@
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;
    @Schema(description = "付款项列表", requiredMode = Schema.RequiredMode.REQUIRED)
    @Schema(description = "付款项列表", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private List<Item> items;
    @Data
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/finance/vo/payment/ErpFinancePaymentSaveReqVO.java
@@ -2,7 +2,6 @@
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -28,12 +27,10 @@
    @NotNull(message = "供应商编号不能为空")
    private Long supplierId;
    @Schema(description = "关联的来票编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787")
    @NotNull(message = "关联来票编号不能为空")
    @Schema(description = "关联的来票编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "25787")
    private Long invoiceId;
    @Schema(description = "付款账户", requiredMode = Schema.RequiredMode.REQUIRED, example = "农行对公账户")
    @NotEmpty(message = "付款账户不能为空")
    @Schema(description = "付款账户", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "农行对公账户")
    private String accountName;
    @Schema(description = "优惠金额,单位:元", requiredMode = Schema.RequiredMode.REQUIRED, example = "11600")
@@ -46,8 +43,7 @@
    @Schema(description = "附件 blobId 列表", example = "[1, 2, 3]")
    private List<Long> blobIds;
    @Schema(description = "付款项列表", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "付款项列表不能为空")
    @Schema(description = "付款项列表", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    @Valid
    private List<Item> items;
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
@@ -349,6 +349,10 @@
     * @param supplierId 供应商编号
     */
    private void validateInvoiceForPayment(Long invoiceId, Long supplierId) {
        // 未关联来票时跳过校验(付款单允许不关联来票)
        if (invoiceId == null) {
            return;
        }
        // 1. 校验来票存在
        ErpPurchaseInvoiceDO invoice = invoiceService.getPurchaseInvoice(invoiceId);
        if (invoice == null) {
@@ -373,6 +377,10 @@
     * @param oldPaymentPrice 更新场景下,该付款单自身当前的付款金额(用于排除自身),创建场景传 null
     */
    private void validatePaymentPriceExceedsInvoiceRemaining(Long invoiceId, BigDecimal paymentPrice, BigDecimal oldPaymentPrice) {
        // 未关联来票时无剩余可付金额可校验
        if (invoiceId == null) {
            return;
        }
        ErpPurchaseInvoiceDO invoice = invoiceService.getPurchaseInvoice(invoiceId);
        BigDecimal paidPrice = financePaymentMapper.selectPaymentPriceMapByInvoiceId(List.of(invoiceId))
                .getOrDefault(invoiceId, BigDecimal.ZERO);