From bcbdc79b6c04c869e252b733715b94ea0f7c7d04 Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Wed, 9 Sep 2026 16:23:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9D=E5=AF=B9=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ngp-sales-income-api.md | 3 ++- .../ngp/salesincome/NgpSalesIncomeDayLoader.java | 6 ++++-- .../ngp/salesincome/NgpSalesIncomeService.java | 4 ++-- .../ngp/salesincome/NgpSalesIncomeDayLoaderTest.java | 2 +- .../ngp/salesincome/NgpSalesIncomeServiceTest.java | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/ngp-sales-income-api.md b/docs/ngp-sales-income-api.md index e941021..d6d9ce5 100644 --- a/docs/ngp-sales-income-api.md +++ b/docs/ngp-sales-income-api.md @@ -18,7 +18,8 @@ - `employeeName` 和 `storeName` 选填;不传或传空字符串时不限制对应条件。 - 日期包含首尾两天,时间范围为开始日 `00:00:00` 至结束日 `23:59:59`。 - 服务按 `businessTypeName`、`efullname`、`ofullname` 精确筛选,并汇总 - `detailList.currencyDisedTaxedTotal`;缺少明细时使用 `currencyBillTotal`。 + `detailList.currencyDisedTaxedTotal`;缺少明细时使用 `currencyBillTotal`。销售出库在 + NGP 原始数据中可能使用负数表示出库方向,接口按页面“销售收入”口径取绝对值后返回正数。 ## 成功响应 diff --git a/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoader.java b/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoader.java index 4e08ba1..f94443b 100644 --- a/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoader.java +++ b/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoader.java @@ -107,12 +107,14 @@ public class NgpSalesIncomeDayLoader { private long billCents(JsonNode bill) { JsonNode details = bill.path("detailList"); - if (!details.isArray() || details.isEmpty()) return signedCents(bill.path("currencyBillTotal")); + if (!details.isArray() || details.isEmpty()) { + return Math.abs(signedCents(bill.path("currencyBillTotal"))); + } long result = 0; for (JsonNode detail : details) { JsonNode amount = firstPresent(detail, "currencyDisedTaxedTotal", "currencyDisedTotal", "currencyTotal"); - result += signedCents(amount); + result += Math.abs(signedCents(amount)); } return result; } diff --git a/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeService.java b/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeService.java index 966d1f5..a570d9c 100644 --- a/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeService.java +++ b/src/main/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeService.java @@ -54,9 +54,9 @@ public class NgpSalesIncomeService { String businessType = request.businessType().trim(); String employeeName = clean(request.employeeName()); String storeName = clean(request.storeName()); - long totalCents = repository.sum( + long totalCents = Math.abs(repository.sum( request.startDate(), request.endDate(), - normalize(businessType), normalize(employeeName), normalize(storeName)); + normalize(businessType), normalize(employeeName), normalize(storeName))); BigDecimal amount = BigDecimal.valueOf(totalCents, 2).setScale(2, RoundingMode.UNNECESSARY); return new NgpSalesIncomeResponse( true, diff --git a/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoaderTest.java b/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoaderTest.java index ed9d9d4..e26d6e0 100644 --- a/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoaderTest.java +++ b/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeDayLoaderTest.java @@ -31,7 +31,7 @@ class NgpSalesIncomeDayLoaderTest { 1, objectMapper.readTree(""" {"code":0,"data":{"total":4,"list":[ {"vchcode":"A","businessTypeName":"普通销售","efullname":"蔡少华","ofullname":"国际站","detailList":[ - {"currencyDisedTaxedTotal":"100000.00"},{"currencyDisedTaxedTotal":"2719.35"}]}, + {"currencyDisedTaxedTotal":"-100000.00"},{"currencyDisedTaxedTotal":"-2719.35"}]}, {"vchcode":"B","businessTypeName":"普通销售","efullname":"其他人","ofullname":"国际站","currencyBillTotal":"8.00","detailList":[]} ]}} """), diff --git a/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeServiceTest.java b/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeServiceTest.java index 44c2269..bb2ea7a 100644 --- a/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeServiceTest.java +++ b/src/test/java/com/company/agentfoundation/ngp/salesincome/NgpSalesIncomeServiceTest.java @@ -43,7 +43,7 @@ class NgpSalesIncomeServiceTest { @Test void returnsOnlyTheRequestedSalesIncomeTotal() { when(repository.findRefreshTime(any())).thenReturn(Optional.of(LocalDateTime.now())); - when(repository.sum(any(), any(), anyString(), anyString(), anyString())).thenReturn(10_271_935L); + when(repository.sum(any(), any(), anyString(), anyString(), anyString())).thenReturn(-10_271_935L); NgpSalesIncomeRequest request = new NgpSalesIncomeRequest( LocalDate.of(2026, 8, 3), LocalDate.of(2026, 8, 10), "普通销售", "蔡少华", "");