From 568dbc0ef5b37e9dff3677c54f532411288a4a6b Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Wed, 27 Aug 2025 14:24:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E8=A7=88=E7=94=9F=E6=88=90=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E5=8F=B7=E4=B8=8D=E8=AE=B0=E5=BD=95=E5=88=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LabelSettingController.java | 6 +- .../Impl/LabelDataProcessorServiceImpl.java | 81 ++++++++++--------- .../Impl/ReportLabelListServiceImpl.java | 10 +-- .../service/LabelDataProcessorService.java | 9 ++- .../base/service/ReportLabelListService.java | 4 +- 5 files changed, 57 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java b/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java index 3dd5761..734716b 100644 --- a/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java +++ b/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java @@ -842,10 +842,10 @@ public class LabelSettingController extends AbstractController { String site = params.get("site").toString(); String username = params.get("username").toString(); String originalLabelNo = params.get("originalLabelNo").toString(); - + // 调用服务层方法复制标签 String newLabelNo = baseService.copyLabelSetting(site, username, originalLabelNo); - + return R.ok() .put("code", 200) .put("msg", "标签复制成功") @@ -872,7 +872,7 @@ public class LabelSettingController extends AbstractController { return R.error("标签ID不能为空"); } // 使用真实数据生成ZPL代码预览 - String zplCode = reportLabelListService.previewLabelWithRealData(reportId); + String zplCode = reportLabelListService.previewLabelWithRealData(reportId,false); log.info("使用真实数据的ZPL代码生成成功,长度: {}", zplCode != null ? zplCode.length() : 0); return R.ok() .put("code", 200) 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 3a29fee..6619161 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 @@ -6,6 +6,7 @@ import com.gaotao.modules.base.service.LabelDataProcessorService; import com.gaotao.modules.base.utils.CoordinateTransformer; import com.gaotao.modules.base.utils.ZplGenerator; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -40,7 +41,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService private com.gaotao.modules.base.service.FontService fontService; @Override - public List processLabelData(List elements, Map dataMap) { + public List processLabelData(List elements, Map dataMap,Boolean printFlag) { if (elements == null || elements.isEmpty()) { return elements; } @@ -50,13 +51,13 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService // 第一轮处理:处理基本数据替换(不包含元素组合) List firstPassElements = new ArrayList<>(); for (ReportLabelList element : elements) { - ReportLabelList processedElement = processElementData(element, dataMap,true); + ReportLabelList processedElement = processElementData(element, dataMap,true, printFlag); firstPassElements.add(processedElement); } // 第二轮处理:处理元素组合引用 for (ReportLabelList element : firstPassElements) { - ReportLabelList finalElement = processElementCombinations(element, dataMap, firstPassElements); + ReportLabelList finalElement = processElementCombinations(element, dataMap, firstPassElements, printFlag); // 如果元素被设置为不显示,则跳过该元素 if (("onecode".equals(element.getType()) || "qrcode".equals(element.getType()) @@ -76,7 +77,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService * 处理元素组合引用 */ private ReportLabelList processElementCombinations(ReportLabelList element, Map dataMap, - List allElements) { + List allElements,Boolean printFlag) { if (element == null || element.getData() == null || element.getData().isEmpty()) { return element; } @@ -86,7 +87,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService // 检查是否包含元素引用 if (containsElementReferences(originalData)) { ReportLabelList processedElement = copyElement(element); - String combinedData = processElementCombination(originalData, dataMap, allElements, element); + String combinedData = processElementCombination(originalData, dataMap, allElements, element, printFlag); processedElement.setData(combinedData); log.debug("处理元素组合: 原始数据={}, 组合后数据={}", originalData, combinedData); return processedElement; @@ -109,7 +110,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService } @Override - public ReportLabelList processElementData(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist) { + public ReportLabelList processElementData(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist,Boolean printFlag) { if (element == null || element.getData() == null || element.getData().isEmpty()) { return element; } @@ -151,7 +152,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService break; case "serialNumber": // 处理流水号元素,生成真实的流水号 - processedElement.setData(processSerialNumberElement(element, dataMap,nextSeqNotExist)); + processedElement.setData(processSerialNumberElement(element, dataMap,nextSeqNotExist, printFlag)); break; case "pic": break; @@ -165,10 +166,10 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService } @Override - public String generateZplWithData(List elements, Map dataMap, LabelSettingData labelSetting) { + public String generateZplWithData(List elements, Map dataMap, LabelSettingData labelSetting,Boolean printFlag) { try { // 1. 处理数据替换和格式化 - List processedElements = processLabelData(elements, dataMap); + List processedElements = processLabelData(elements, dataMap, printFlag); // 2. 创建画布尺寸 CoordinateTransformer.CanvasSize canvasSize = createCanvasSize(labelSetting); @@ -211,7 +212,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService * 支持将多个元素的内容按特定格式组合 */ private String processElementCombination(String originalData, Map dataMap, - List allElements, ReportLabelList currentElement) { + List allElements, ReportLabelList currentElement,Boolean printFlag) { if (originalData == null || originalData.isEmpty()) { return originalData; } @@ -252,7 +253,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService ReportLabelList referencedElement = findElementByReference(reference, elementMap); if (referencedElement != null) { // 递归处理引用的元素数据 - replacement = processElementData(referencedElement, dataMap,false).getData(); + replacement = processElementData(referencedElement, dataMap,false, printFlag).getData(); if (replacement == null) { replacement = ""; } @@ -968,11 +969,11 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService * @param dataMap 数据源映射 * @return 生成的流水号字符串 */ - private String processSerialNumberElement(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist) { + private String processSerialNumberElement(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist,Boolean printFlag) { try { log.debug("开始处理流水号元素: itemNo={}, data={}", element.getItemNo(), element.getData()); - if (element.getParentSerialLabelNo() != null) { + if (element.getParentSerialLabelNo() != null && StringUtils.isNotBlank(element.getParentSerialLabelNo())) { ReportLabelList parentElement = baseService.getReportLabelListByLabelNo(element.getParentSerialLabelNo()); if (parentElement==null) { throw new RuntimeException("父标签流水号已发生修改,请重新选择"); @@ -1003,7 +1004,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService log.debug("生成的KeyInfo: {}", keyInfo); // 3. 获取或生成下一个流水号 - int nextSeqNo = getNextSerialNumber(element.getReportId(), element.getItemNo(), keyInfo, intervalValue,nextSeqNotExist); + int nextSeqNo = getNextSerialNumber(element.getReportId(), element.getItemNo(), keyInfo, intervalValue,nextSeqNotExist, printFlag); log.debug("获取的下一个流水号: {}", nextSeqNo); // 4. 格式化流水号 @@ -1084,9 +1085,11 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService * @param itemNo 项目编号 * @param keyInfo 关键信息 * @param intervalValue 步长 + * @param nextSeqNotExist 如果不存在则新增 + * @param printFlag 是否是打印操作,打印才修改流水号,预览不会修改数据库 * @return 下一个流水号 */ - private int getNextSerialNumber(String reportId, Integer itemNo, String keyInfo, int intervalValue,Boolean nextSeqNotExist) { + private int getNextSerialNumber(String reportId, Integer itemNo, String keyInfo, int intervalValue,Boolean nextSeqNotExist,Boolean printFlag) { try { // 查询现有的流水号信息 com.gaotao.modules.base.entity.LabelContentData query = new com.gaotao.modules.base.entity.LabelContentData(); @@ -1109,31 +1112,31 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService if (matchingInfo != null) { // 存在记录,递增流水号 nextSeqNo = matchingInfo.getLastSeqNo() + intervalValue; - - // 更新数据库记录 - com.gaotao.modules.base.entity.LabelContentSerialInfoData updateInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); - updateInfo.setLabelNo(reportId); - updateInfo.setItemNo(itemNo); - updateInfo.setKeyInfo(keyInfo); - updateInfo.setLastSeqNo(nextSeqNo); - updateInfo.setOriKeyInfo(keyInfo); // 用于WHERE条件 - - baseService.updateLabelSerialInfo(updateInfo); - log.debug("更新流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", - reportId, itemNo, keyInfo, nextSeqNo); + if (printFlag) { + // 更新数据库记录 + com.gaotao.modules.base.entity.LabelContentSerialInfoData updateInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); + updateInfo.setLabelNo(reportId); + updateInfo.setItemNo(itemNo); + updateInfo.setKeyInfo(keyInfo); + updateInfo.setLastSeqNo(nextSeqNo); + updateInfo.setOriKeyInfo(keyInfo); // 用于WHERE条件 + baseService.updateLabelSerialInfo(updateInfo); + log.debug("更新流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", + reportId, itemNo, keyInfo, nextSeqNo); + } } else { // 不存在记录,创建新记录 nextSeqNo = intervalValue; // 从步长开始 - - com.gaotao.modules.base.entity.LabelContentSerialInfoData newInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); - newInfo.setLabelNo(reportId); - newInfo.setItemNo(itemNo); - newInfo.setKeyInfo(keyInfo); - newInfo.setLastSeqNo(nextSeqNo); - - baseService.insertLabelSerialInfo(newInfo); - log.debug("创建流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", - reportId, itemNo, keyInfo, nextSeqNo); + if (printFlag) { + com.gaotao.modules.base.entity.LabelContentSerialInfoData newInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); + newInfo.setLabelNo(reportId); + newInfo.setItemNo(itemNo); + newInfo.setKeyInfo(keyInfo); + newInfo.setLastSeqNo(nextSeqNo); + baseService.insertLabelSerialInfo(newInfo); + log.debug("创建流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", + reportId, itemNo, keyInfo, nextSeqNo); + } } } else { nextSeqNo = matchingInfo!=null?matchingInfo.getLastSeqNo(): intervalValue; // 如果不存在记录,则使用步长作为初始值 @@ -1218,7 +1221,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService } @Override - public String generateZplWithRealData(String reportId, List elements, LabelSettingData labelSetting) { + public String generateZplWithRealData(String reportId, List elements, LabelSettingData labelSetting,Boolean printFlag) { try { log.info("开始根据ReportId获取真实数据并生成ZPL: reportId={}", reportId); @@ -1277,7 +1280,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService log.info("合并后的真实数据,总字段数: {}", realDataMap.size()); // 4. 使用真实数据生成ZPL - return generateZplWithData(elements, realDataMap, labelSetting); + return generateZplWithData(elements, realDataMap, labelSetting, printFlag); } catch (Exception e) { log.error("根据ReportId获取真实数据并生成ZPL失败: reportId={}, error={}", reportId, e.getMessage(), e); 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 c8a0a05..1845e1a 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 @@ -171,7 +171,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl getProcessedElements(String reportId, Map dataMap) { + public List getProcessedElements(String reportId, Map dataMap,Boolean printFlag) { try { // 获取标签元素 List elements = getZplElements(reportId); @@ -480,7 +480,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl processedElements = labelDataProcessorService.processLabelData(elements, dataMap); + List processedElements = labelDataProcessorService.processLabelData(elements, dataMap, printFlag); log.info("标签元素处理成功,reportId: {}, 元素数: {}, 数据字段数: {}", reportId, processedElements.size(), dataMap.size()); @@ -494,7 +494,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl processLabelData(List elements, Map dataMap); + List processLabelData(List elements, Map dataMap,Boolean printFlag); /** * 处理单个标签元素的数据 @@ -26,7 +26,7 @@ public interface LabelDataProcessorService { * @param nextSeqNotExist 是否存在下一个序列号 * @return 处理后的标签元素 */ - ReportLabelList processElementData(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist); + ReportLabelList processElementData(ReportLabelList element, Map dataMap,Boolean nextSeqNotExist,Boolean printFlag); /** * 生成带真实数据的ZPL代码 @@ -35,7 +35,7 @@ public interface LabelDataProcessorService { * @param labelSetting 标签设置 * @return ZPL代码 */ - String generateZplWithData(List elements, Map dataMap, LabelSettingData labelSetting); + String generateZplWithData(List elements, Map dataMap, LabelSettingData labelSetting,Boolean printFlag); /** * 格式化数字数据 @@ -60,7 +60,8 @@ public interface LabelDataProcessorService { * @param reportId 报告ID * @param elements 标签元素列表 * @param labelSetting 标签设置 + * @param printFlag 打印标志 * @return 处理后的ZPL代码 */ - String generateZplWithRealData(String reportId, List elements, LabelSettingData labelSetting); + String generateZplWithRealData(String reportId, List elements, LabelSettingData labelSetting,Boolean printFlag); } diff --git a/src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java b/src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java index 504b3c2..e07be09 100644 --- a/src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java +++ b/src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java @@ -22,13 +22,13 @@ public interface ReportLabelListService extends IService { * @param dataMap 数据源映射 * @return 处理后的标签元素列表 */ - List getProcessedElements(String reportId, Map dataMap); + List getProcessedElements(String reportId, Map dataMap,Boolean printFlag); /** * 使用真实数据预览标签(从数据库视图获取数据) * @param reportId 标签ID * @return 预览用的ZPL代码 */ - String previewLabelWithRealData(String reportId); + String previewLabelWithRealData(String reportId,Boolean printFlag); }