|
|
|
@ -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<ReportLabelList> processLabelData(List<ReportLabelList> elements, Map<String, Object> dataMap) { |
|
|
|
public List<ReportLabelList> processLabelData(List<ReportLabelList> elements, Map<String, Object> dataMap,Boolean printFlag) { |
|
|
|
if (elements == null || elements.isEmpty()) { |
|
|
|
return elements; |
|
|
|
} |
|
|
|
@ -50,13 +51,13 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
|
// 第一轮处理:处理基本数据替换(不包含元素组合) |
|
|
|
List<ReportLabelList> 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<String, Object> dataMap, |
|
|
|
List<ReportLabelList> allElements) { |
|
|
|
List<ReportLabelList> 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<String, Object> dataMap,Boolean nextSeqNotExist) { |
|
|
|
public ReportLabelList processElementData(ReportLabelList element, Map<String, Object> 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<ReportLabelList> elements, Map<String, Object> dataMap, LabelSettingData labelSetting) { |
|
|
|
public String generateZplWithData(List<ReportLabelList> elements, Map<String, Object> dataMap, LabelSettingData labelSetting,Boolean printFlag) { |
|
|
|
try { |
|
|
|
// 1. 处理数据替换和格式化 |
|
|
|
List<ReportLabelList> processedElements = processLabelData(elements, dataMap); |
|
|
|
List<ReportLabelList> 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<String, Object> dataMap, |
|
|
|
List<ReportLabelList> allElements, ReportLabelList currentElement) { |
|
|
|
List<ReportLabelList> 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<String, Object> dataMap,Boolean nextSeqNotExist) { |
|
|
|
private String processSerialNumberElement(ReportLabelList element, Map<String, Object> 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<ReportLabelList> elements, LabelSettingData labelSetting) { |
|
|
|
public String generateZplWithRealData(String reportId, List<ReportLabelList> 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); |
|
|
|
|