|
|
|
@ -47,6 +47,15 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
|
List<ReportLabelList> processedElements = new ArrayList<>(); |
|
|
|
for (ReportLabelList element : elements) { |
|
|
|
ReportLabelList processedElement = processElementData(element, dataMap); |
|
|
|
|
|
|
|
// 如果是图片元素且被设置为不显示,则跳过该元素 |
|
|
|
if (("image".equals(element.getType()) || "picture".equals(element.getType())) |
|
|
|
&& processedElement.getData().isEmpty() |
|
|
|
&& BigDecimal.ZERO.equals(processedElement.getWidth())) { |
|
|
|
log.debug("跳过不显示的图片元素: type={}, showPic={}", element.getType(), element.getShowPic()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
processedElements.add(processedElement); |
|
|
|
} |
|
|
|
|
|
|
|
@ -65,6 +74,18 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
|
String originalData = element.getData(); |
|
|
|
log.debug("处理元素数据: type={}, originalData={}", element.getType(), originalData); |
|
|
|
|
|
|
|
// 处理图片元素的显示控制 |
|
|
|
if ("pic".equals(element.getType())) { |
|
|
|
if (!shouldShowPicture(element, dataMap)) { |
|
|
|
log.debug("根据showPic设置,隐藏图片元素: showPic={}", element.getShowPic()); |
|
|
|
// 返回null或设置特殊标记表示不显示该元素 |
|
|
|
processedElement.setData(""); |
|
|
|
processedElement.setWidth(BigDecimal.ZERO); |
|
|
|
processedElement.setHeight(0); |
|
|
|
return processedElement; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 处理不同类型的元素 |
|
|
|
switch (element.getType()) { |
|
|
|
case "text": |
|
|
|
@ -77,6 +98,11 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
|
case "serialNumber": |
|
|
|
// 流水号元素通常不需要数据替换,保持原样 |
|
|
|
break; |
|
|
|
case "image": |
|
|
|
case "picture": |
|
|
|
// 图片元素,替换数据源字段(如果有的话) |
|
|
|
processedElement.setData(replaceDataSourceFields(originalData, dataMap)); |
|
|
|
break; |
|
|
|
default: |
|
|
|
processedElement.setData(replaceDataSourceFields(originalData, dataMap)); |
|
|
|
break; |
|
|
|
@ -532,6 +558,65 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService |
|
|
|
return value.replace(from, to); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 判断是否应该显示图片 |
|
|
|
* 根据showPic设置和数据源中的字段值进行判断 |
|
|
|
* showPic格式: "fieldName=value",如果数据源中fieldName的值等于value,则不显示图片 |
|
|
|
* |
|
|
|
* @param element 图片元素 |
|
|
|
* @param dataMap 数据源映射 |
|
|
|
* @return true表示显示图片,false表示不显示图片 |
|
|
|
*/ |
|
|
|
private boolean shouldShowPicture(ReportLabelList element, Map<String, Object> dataMap) { |
|
|
|
String showPic = element.getShowPic(); |
|
|
|
|
|
|
|
// 如果showPic为空或null,默认显示图片 |
|
|
|
if (showPic == null || showPic.trim().isEmpty()) { |
|
|
|
log.debug("showPic为空,默认显示图片"); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果showPic是"true"或"Y",显示图片 |
|
|
|
if ("true".equalsIgnoreCase(showPic.trim()) || "Y".equalsIgnoreCase(showPic.trim())) { |
|
|
|
log.debug("showPic设置为显示: {}", showPic); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
// 如果showPic是"false"或"N",不显示图片 |
|
|
|
if ("false".equalsIgnoreCase(showPic.trim()) || "N".equalsIgnoreCase(showPic.trim())) { |
|
|
|
log.debug("showPic设置为不显示: {}", showPic); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// 解析showPic格式: "fieldName=value" |
|
|
|
if (showPic.contains("=")) { |
|
|
|
String[] parts = showPic.split("=", 2); |
|
|
|
if (parts.length == 2) { |
|
|
|
String fieldName = parts[0].trim(); |
|
|
|
String expectedValue = parts[1].trim(); |
|
|
|
|
|
|
|
// 从数据源中获取字段值 |
|
|
|
Object actualValue = dataMap.get(fieldName); |
|
|
|
String actualValueStr = actualValue != null ? actualValue.toString().trim() : ""; |
|
|
|
|
|
|
|
log.debug("检查图片显示条件: 字段名={}, 期望值={}, 实际值={}", fieldName, expectedValue, actualValueStr); |
|
|
|
|
|
|
|
// 如果实际值等于期望值,则不显示图片 |
|
|
|
if (expectedValue.equals(actualValueStr)) { |
|
|
|
log.debug("字段值匹配期望值,不显示图片: {}={}", fieldName, expectedValue); |
|
|
|
return false; |
|
|
|
} else { |
|
|
|
log.debug("字段值不匹配期望值,显示图片: {}!={}", actualValueStr, expectedValue); |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 其他情况默认显示图片 |
|
|
|
log.debug("showPic格式无法识别,默认显示图片: {}", showPic); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 复制元素对象 |
|
|
|
*/ |
|
|
|
|