From 03f3891905dbf22201b6fe7c2d7de24dd875a240 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Tue, 14 Apr 2026 11:10:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=AB=AF=E4=BC=A0=E4=BA=86cu?= =?UTF-8?q?stomerId=E6=97=B6,=E6=A0=B9=E6=8D=AE=E5=AE=A2=E6=88=B7=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E8=A7=A3=E6=9E=90=E6=A0=87=E7=AD=BE=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/entity/PrintLabelRequest.java | 1 + .../Impl/LabelDataProcessorServiceImpl.java | 21 +++++ .../Impl/ReportLabelListServiceImpl.java | 88 ++++++++++++++++++- 3 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gaotao/modules/base/entity/PrintLabelRequest.java b/src/main/java/com/gaotao/modules/base/entity/PrintLabelRequest.java index a78d342..e2a8560 100644 --- a/src/main/java/com/gaotao/modules/base/entity/PrintLabelRequest.java +++ b/src/main/java/com/gaotao/modules/base/entity/PrintLabelRequest.java @@ -18,6 +18,7 @@ public class PrintLabelRequest { private String userId; // 用户ID private String username; // 用户名 private String site; // 站点 + private String customerId; // 客户编码 private String receiptNo; // 采购接收单号 private String unitId; // HandlingUnit ID private List unitIds; diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java index ca762ed..25ba63a 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java +++ b/src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java @@ -40,6 +40,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService // 数据源字段的正则表达式,匹配 #{field_name} 格式 private static final Pattern DATA_SOURCE_PATTERN = Pattern.compile("#\\{([^}]+)\\}"); private static final String CUSTOM_FIELDS_CONTEXT_KEY = "__CUSTOM_FIELDS_CONTEXT__"; + private static final String RESOLVED_LABEL_DATA_LIST_KEY = "__RESOLVED_LABEL_DATA_LIST__"; /** * 从数据映射中取值:保持原有精确匹配逻辑,未命中时再从前端补充字段中按大小写不敏感匹配 @@ -1765,6 +1766,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService log.info("总共需要生成 {} 张标签", recordCount); // 4. 为每条记录生成ZPL代码 + List> resolvedLabelDataList = new ArrayList<>(); for (int i = 0; i < recordCount; i++) { java.util.Map realDataMap = new java.util.HashMap<>(); if (!customFields.isEmpty()) { @@ -1804,10 +1806,16 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService // 4.4 使用当前记录的数据生成ZPL String zplCode = generateZplWithData(elements, realDataMap, labelSetting, printFlag); zplCodeList.add(zplCode); + resolvedLabelDataList.add(buildLabelDataForReuse(realDataMap)); log.debug("第 {} 条记录生成ZPL成功,数据字段数: {}", i + 1, realDataMap.size()); } + // 将已解析的标签数据写回queryParams,供调用方复用,避免重复查询IFS + if (queryParams != null) { + queryParams.put(RESOLVED_LABEL_DATA_LIST_KEY, resolvedLabelDataList); + } + log.info("成功生成 {} 个ZPL代码", zplCodeList.size()); return zplCodeList; @@ -1817,6 +1825,19 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService } } + /** + * 构建可复用的标签数据(移除内部上下文字段) + */ + private Map buildLabelDataForReuse(Map realDataMap) { + Map reusableData = new HashMap<>(); + if (realDataMap == null || realDataMap.isEmpty()) { + return reusableData; + } + reusableData.putAll(realDataMap); + reusableData.remove(CUSTOM_FIELDS_CONTEXT_KEY); + return reusableData; + } + /** * 从查询参数中提取前端补充字段 */ diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java index 6362892..c8d5e09 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java +++ b/src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java @@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicInteger; @Slf4j @Service public class ReportLabelListServiceImpl extends ServiceImpl implements ReportLabelListService { + private static final String RESOLVED_LABEL_DATA_LIST_KEY = "__RESOLVED_LABEL_DATA_LIST__"; @Autowired private BaseService baseService; @@ -331,6 +332,33 @@ public class ReportLabelListServiceImpl extends ServiceImpl> getLabelDataForPrint(String labelNo, Map queryParams) { + if (queryParams != null) { + Object resolvedDataObj = queryParams.get(RESOLVED_LABEL_DATA_LIST_KEY); + if (resolvedDataObj instanceof List resolvedList && !resolvedList.isEmpty()) { + List> resolvedLabelDataList = new ArrayList<>(); + for (Object item : resolvedList) { + if (item instanceof Map dataMap) { + java.util.Map row = new HashMap<>(); + for (Map.Entry entry : dataMap.entrySet()) { + if (entry.getKey() != null) { + row.put(entry.getKey().toString(), entry.getValue()); + } + } + resolvedLabelDataList.add(row); + } + } + if (!resolvedLabelDataList.isEmpty()) { + return resolvedLabelDataList; + } + } + } + return getLabelDataForSaving(labelNo, queryParams); + } + /** * 从Map中安全地获取字符串值 */ @@ -659,8 +687,10 @@ public class ReportLabelListServiceImpl extends ServiceImpl labelSettingDataList = baseService.getLabelSettingList(labelSettingData); LabelSettingData labelSetting; @@ -708,7 +738,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl zplCodeList = previewLabelWithRealData(labelSetting.getLabelNo(), true, queryParams); // 同时获取原始数据用于保存WMS标签记录 - List> labelDataList = getLabelDataForSaving(labelSetting.getLabelNo(), queryParams); + List> labelDataList = getLabelDataForPrint(labelSetting.getLabelNo(), queryParams); // 2. 验证ZPL代码 if (zplCodeList == null || zplCodeList.isEmpty()) { throw new RuntimeException("ZPL代码获取失败"); @@ -766,4 +796,58 @@ public class ReportLabelListServiceImpl extends ServiceImpl customerLabelList = baseService.getCustomerLabelSettingList(query); + if (customerLabelList == null || customerLabelList.isEmpty()) { + log.warn("客户标签映射未找到,回退前端reportId。customerId={}, labelType={}, reportId={}", + customerId, printRequest.getLabelType(), fallbackReportId); + return fallbackReportId; + } + + CustomerLabelSettingData matchedLabel = null; + for (CustomerLabelSettingData item : customerLabelList) { + if (item == null || StringUtils.isBlank(item.getLabelNo())) { + continue; + } + if (StringUtils.isNotBlank(printRequest.getSite()) + && !StringUtils.equalsIgnoreCase(printRequest.getSite(), item.getSite())) { + continue; + } + // 优先主标签(SubReportFlag=N) + if ("N".equalsIgnoreCase(item.getSubLabelFlag())) { + matchedLabel = item; + break; + } + if (matchedLabel == null) { + matchedLabel = item; + } + } + + if (matchedLabel != null && StringUtils.isNotBlank(matchedLabel.getLabelNo())) { + log.info("按客户标签映射解析reportId成功。customerId={}, labelType={}, resolvedReportId={}", + customerId, printRequest.getLabelType(), matchedLabel.getLabelNo()); + return matchedLabel.getLabelNo(); + } + } catch (Exception e) { + log.warn("按客户编码解析标签编号失败,回退前端reportId。customerId={}, labelType={}, error={}", + customerId, printRequest.getLabelType(), e.getMessage()); + } + + return fallbackReportId; + } }