Browse Source

图片不显示规则

master
han\hanst 5 months ago
parent
commit
9fdf77d7fd
  1. 85
      src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java

85
src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java

@ -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;
}
/**
* 复制元素对象
*/

Loading…
Cancel
Save