소스 검색

fix: 航信发票导出时根据含税总金额反算各项明细,修复空值问题

航信InvoiceDetail仅存储totalAmount(含税总金额,分),不含税金额和税额未存储。
由于航信开票固定13%税率,导出时根据totalAmount反算:
- 金额(不含税) = totalAmount/100/1.13
- 税额 = 总金额 - 不含税金额
- 税率 = 13%
- 货物名称 = 充电费用
- 数量 = 1

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 개월 전
부모
커밋
c8ec7966c4
1개의 변경된 파일20개의 추가작업 그리고 11개의 파일을 삭제
  1. 20 11
      service/src/main/java/com/kym/service/admin/impl/InvoiceDetailServiceImpl.java

+ 20 - 11
service/src/main/java/com/kym/service/admin/impl/InvoiceDetailServiceImpl.java

@@ -84,18 +84,27 @@ public class InvoiceDetailServiceImpl extends MPJBaseServiceImpl<InvoiceDetailMa
                     rows.add(row);
                 });
             } else {
-                // 新版航信发票:无发票行明细,一张发票汇为一行,金额统一为元
+                // 新版航信发票:无发票行明细,根据含税总金额反算各项(税率固定13%)
                 var row = new HashMap<>(baseInfo);
-                row.put("goods_name", "");
-                row.put("quantity", "");
-                row.put("amount", invoiceDetail.getAmount() != null
-                        ? NumberUtil.decimalFormat("#.##", invoiceDetail.getAmount() / 100.0) : "");
-                row.put("tax_amount", invoiceDetail.getTaxAmount() != null
-                        ? NumberUtil.decimalFormat("#.##", invoiceDetail.getTaxAmount() / 100.0) : "");
-                row.put("tax_rate", "");
-                // 航信发票额外导出含税总金额,方便财务对账
-                row.put("total_amount_has_tax", invoiceDetail.getTotalAmount() != null
-                        ? NumberUtil.decimalFormat("#.##", invoiceDetail.getTotalAmount() / 100.0) : "");
+                var totalAmount = invoiceDetail.getTotalAmount();
+                if (totalAmount != null && totalAmount > 0) {
+                    double totalYuan = totalAmount / 100.0;
+                    double amountYuan = totalYuan / 1.13;
+                    double taxYuan = totalYuan - amountYuan;
+                    row.put("goods_name", "充电费用");
+                    row.put("quantity", 1);
+                    row.put("amount", NumberUtil.decimalFormat("#.##", amountYuan));
+                    row.put("tax_amount", NumberUtil.decimalFormat("#.##", taxYuan));
+                    row.put("tax_rate", "13%");
+                    row.put("total_amount_has_tax", NumberUtil.decimalFormat("#.##", totalYuan));
+                } else {
+                    row.put("goods_name", "");
+                    row.put("quantity", "");
+                    row.put("amount", "");
+                    row.put("tax_amount", "");
+                    row.put("tax_rate", "");
+                    row.put("total_amount_has_tax", "");
+                }
                 rows.add(row);
             }
         });