From d9f5b25cc790d7de02bdf38a609f8ef6d6b95307 Mon Sep 17 00:00:00 2001 From: maxiangong <298222784@qq.com> Date: Fri, 29 May 2026 13:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=96=E5=8D=8F=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/oem/pojo/vo/PriceSheetVO.java | 7 ++- .../springblade/desk/util/PriceMatcher.java | 49 ++++++++++++++++++- .../service/impl/OemStatementServiceImpl.java | 30 +++++------- .../erpdata/mapper/ErpDataOemMapper.xml | 5 +- 4 files changed, 69 insertions(+), 22 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java index b95e0232f..67ed282e9 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/PriceSheetVO.java @@ -138,7 +138,7 @@ public class PriceSheetVO { * 镀种描述 */ @Schema(description = "镀种描述") - private String coating_desc; + private String coatingDesc; /** * 阶梯价计量单位 */ @@ -146,6 +146,9 @@ public class PriceSheetVO { private String stairunit; @Schema(description = "金银价格") - private String au_ag_price; + private String auAgPrice; + + @Schema(description = "标准工艺代码") + private String standardProcessCode; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java index aaa6c1348..38b1109ee 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/util/PriceMatcher.java @@ -89,6 +89,53 @@ public class PriceMatcher { return false; } + + /** + * 判断备注是否包含目标价格 + */ + private static boolean containsPriceNew(String remark, BigDecimal targetPrice) { + if(StringUtils.isEmpty(remark)){ + return false; + } + // 正则表达式匹配价格范围或单价 + // 匹配如:350.01-360、467.5、100.5-200.8 + String regex = "(\\d+(?:\\.\\d+)?)(?:,(\\d+(?:\\.\\d+)?))?"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(remark); + + while (matcher.find()) { + String startPriceStr = matcher.group(1); + String endPriceStr = matcher.group(2); + + try { + if (endPriceStr != null) { + // 价格范围,如 "350.01-360" + BigDecimal startPrice = new BigDecimal(startPriceStr); + BigDecimal endPrice = new BigDecimal(endPriceStr); + + // 检查目标价格是否在范围内 + if (targetPrice.compareTo(startPrice) >= 0 && + targetPrice.compareTo(endPrice) <= 0) { + return true; + } + } else { + // 单一价格,如 "467.5" + BigDecimal singlePrice = new BigDecimal(startPriceStr); + + // 检查目标价格是否等于这个价格 + if (targetPrice.compareTo(singlePrice) == 0) { + return true; + } + } + } catch (NumberFormatException e) { + // 解析失败,跳过这个匹配 + continue; + } + } + + return false; + } + /** * 使用Stream API的版本 */ @@ -111,6 +158,6 @@ public class PriceMatcher { * @return */ public static boolean isContainsPrice(String remark, BigDecimal targetPrice) { - return containsPrice(remark, targetPrice); + return containsPriceNew(remark, targetPrice); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java index 4806fd8d2..5908c55c4 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java @@ -827,9 +827,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> { - String coatingDesc = priceSheet.getCoating_desc(); + String coatingDesc = priceSheet.getCoatingDesc(); return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc)); - }).collect(Collectors.groupingBy(PriceSheetVO::getCoating_desc, Collectors.toList())); + }).collect(Collectors.groupingBy(PriceSheetVO::getCoatingDesc, Collectors.toList())); // 如果没有任何报价记录 if (coatingDescPriceSheetMap.isEmpty()) { //结算异常:无报价记录结算结果 @@ -1759,7 +1759,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl colorPriceSheetVOS = new ArrayList<>(); for (PriceSheetVO sheet : priceSheetList) { - boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) - // TODO 报价单标准工艺代码没加 - && StringUtils.equals(sheet.getWono(), standardProcessCode); + boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getStandardProcessCode(), standardProcessCode); if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { - match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price); + match = PriceMatcher.isContainsPrice(sheet.getAuAgPrice(), price); } if (match) { if (hasColorCount(statementVO)) { @@ -2003,9 +1997,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl> coatingDescPriceSheetMap = priceSheetList.stream().filter(priceSheet -> { - String coatingDesc = priceSheet.getCoating_desc(); + String coatingDesc = priceSheet.getCoatingDesc(); return coatingDesc != null && !coatingDesc.trim().isEmpty() && ("涂色标".equals(coatingDesc) || "涂色带".equals(coatingDesc) || "涂箭头".equals(coatingDesc)); - }).collect(Collectors.groupingBy(PriceSheetVO::getCoating_desc, Collectors.toList())); + }).collect(Collectors.groupingBy(PriceSheetVO::getCoatingDesc, Collectors.toList())); // 如果没有任何报价记录 if (coatingDescPriceSheetMap.isEmpty()) { return false; diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml index 0b2a183c0..37d35a0ba 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpDataOemMapper.xml @@ -5,7 +5,10 @@