From 6d910029b6c81db0a2b66caa66952781397b153a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 29 八月 2026 13:45:52 +0800
Subject: [PATCH] feat(mes): 实现H5溯源页面与二维码内容集成
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/MesProQrLabelBuilder.java | 60 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 49 insertions(+), 11 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/MesProQrLabelBuilder.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/MesProQrLabelBuilder.java
index d22a870..80b198d 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/MesProQrLabelBuilder.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/qrcode/MesProQrLabelBuilder.java
@@ -8,16 +8,39 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.pallet.MesProPalletDO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
+import java.nio.charset.StandardCharsets;
+import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
/**
- * MES 浜岀淮鐮佹爣绛炬瀯寤哄櫒锛氱粺涓�"浜岀淮鐮佺紪鐮佺函鐮佸�� + 鍥剧墖鍙犲姞鍙鏂囨湰"鐨勬枃鏈粍瑁呰鍒欙紝
- * 淇濊瘉鎵规銆佹墭鐩樸�佽鐮佷笁绉嶆爣绛剧殑鍏抽敭淇℃伅淇濈暀涓�鑷�
+ * MES 浜岀淮鐮佹爣绛炬瀯寤哄櫒锛氱粺涓�"浜岀淮鐮佺紪鐮佸唴瀹� + 鍥剧墖鍙犲姞鍙鏂囨湰"鐨勬枃鏈粍瑁呰鍒欙紝
+ * 淇濊瘉鎵规銆佹墭鐩樸�佽鐮佷笁绉嶆爣绛剧殑鍏抽敭淇℃伅淇濈暀涓�鑷淬��
+ * <p>
+ * 閰嶇疆浜� {@code mes.trace-base-url} 鏃讹紝浜岀淮鐮佸唴瀹逛负 H5 婧簮鍦板潃锛堝甫 code 鍙傛暟锛夛紝鍚﹀垯鍥為��涓虹函鐮佸�硷紙鍏煎鏃х爜锛�
*/
public final class MesProQrLabelBuilder {
private MesProQrLabelBuilder() {
+ }
+
+ /**
+ * H5 婧簮椤甸潰鍩虹鍦板潃锛岀敱 {@code MesQrCodeConfig} 鍚姩鏃舵敞鍏ワ紱涓虹┖鏃朵簩缁寸爜缂栫爜绾爜鍊�
+ */
+ private static volatile String traceBaseUrl = "";
+
+ public static void setTraceBaseUrl(String traceBaseUrl) {
+ MesProQrLabelBuilder.traceBaseUrl = StrUtil.blankToDefault(traceBaseUrl, "");
+ }
+
+ /**
+ * 缁勮浜岀淮鐮佸唴瀹癸細閰嶇疆浜嗘函婧愬湴鍧�鍒欐嫾 URL锛屽惁鍒欒繑鍥炵函鐮佸��
+ */
+ private static String buildQrCodeContent(String code) {
+ if (StrUtil.isEmpty(traceBaseUrl)) {
+ return code;
+ }
+ return traceBaseUrl + "?code=" + URLEncoder.encode(code, StandardCharsets.UTF_8);
}
/**
@@ -26,16 +49,24 @@
public static QrLabelInfo buildBatchLabel(MesProBatchDO batch,
Map<Long, MesMdmItemDO> itemMap,
Map<Long, AdminUserRespDTO> userMap) {
+ // 鏈ˉ褰曚笟鍔′俊鎭椂鐢ㄤ复鏃舵壒娆$爜浣滀负浜岀淮鐮佸唴瀹癸紝骞舵槑纭彁绀虹姸鎬侊紱鍝佺/浜х嚎绛変俊鎭己澶辨椂涓嶆嫾鎺ョ┖鏂囨湰
+ String code = StrUtil.blankToDefault(batch.getCode(), batch.getTempCode());
LinkedHashMap<String, String> keyValues = new LinkedHashMap<>();
- keyValues.put("鎵规鍙�", batch.getCode());
+ keyValues.put("鎵规鍙�", code);
+ if (StrUtil.isEmpty(batch.getCode())) {
+ keyValues.put("鐘舵��", "寰呰ˉ褰�");
+ }
MesMdmItemDO item = itemMap.get(batch.getItemId());
if (item != null) {
keyValues.put("鍝佺", item.getName());
keyValues.put("瑙勬牸", item.getSpecification());
}
- keyValues.put("浜х嚎", StrUtil.join(" / ", batch.getLineName(), batch.getLineCode()));
- keyValues.put("鐢熶骇鏃ユ湡", batch.getProduceDate() == null ? ""
- : LocalDateTimeUtil.format(batch.getProduceDate(), "yyyy-MM-dd HH:mm"));
+ if (StrUtil.isNotEmpty(batch.getLineName()) || StrUtil.isNotEmpty(batch.getLineCode())) {
+ keyValues.put("浜х嚎", StrUtil.join(" / ", batch.getLineName(), batch.getLineCode()));
+ }
+ if (batch.getProduceDate() != null) {
+ keyValues.put("鐢熶骇鏃ユ湡", LocalDateTimeUtil.format(batch.getProduceDate(), "yyyy-MM-dd HH:mm"));
+ }
if (batch.getPlanQuantity() != null) {
keyValues.put("璁″垝鏁伴噺", String.valueOf(batch.getPlanQuantity()));
}
@@ -43,7 +74,7 @@
if (user != null) {
keyValues.put("璐d换浜�", user.getNickname());
}
- return QrLabelInfo.builder().fileName(batch.getCode()).code(batch.getCode()).keyValues(keyValues).build();
+ return QrLabelInfo.builder().fileName(code).code(buildQrCodeContent(code)).keyValues(keyValues).build();
}
/**
@@ -53,17 +84,24 @@
MesProBatchDO batch,
Map<Long, MesMdmItemDO> itemMap,
Map<Long, AdminUserRespDTO> userMap) {
+ // 鏈粦瀹氭壒娆★紙涓存椂鎵樼洏鐮侊級鏃剁敤涓存椂鐮佷綔涓轰簩缁寸爜鍐呭骞舵槑纭彁绀虹姸鎬�
+ String code = StrUtil.blankToDefault(pallet.getCode(), pallet.getTempCode());
LinkedHashMap<String, String> keyValues = new LinkedHashMap<>();
- keyValues.put("鎵樼洏鐮�", pallet.getCode());
+ keyValues.put("鎵樼洏鐮�", code);
+ if (StrUtil.isEmpty(pallet.getCode())) {
+ keyValues.put("鐘舵��", "鏈粦瀹氭壒娆�");
+ }
keyValues.put("鎵樼洏搴忓彿", pallet.getPalletNo() == null ? "" : String.valueOf(pallet.getPalletNo()));
- keyValues.put("鎵规鍙�", pallet.getBatchCode());
+ if (StrUtil.isNotEmpty(pallet.getBatchCode())) {
+ keyValues.put("鎵规鍙�", pallet.getBatchCode());
+ }
if (pallet.getBagCount() != null) {
keyValues.put("宸茶琚嬫暟", String.valueOf(pallet.getBagCount()));
}
if (batch != null) {
fillBatchKeyValues(keyValues, batch, itemMap, userMap);
}
- return QrLabelInfo.builder().fileName(pallet.getCode()).code(pallet.getCode()).keyValues(keyValues).build();
+ return QrLabelInfo.builder().fileName(code).code(buildQrCodeContent(code)).keyValues(keyValues).build();
}
/**
@@ -83,7 +121,7 @@
if (batch != null) {
fillBatchKeyValues(keyValues, batch, itemMap, userMap);
}
- return QrLabelInfo.builder().fileName(bagCode.getCode()).code(bagCode.getCode()).keyValues(keyValues).build();
+ return QrLabelInfo.builder().fileName(bagCode.getCode()).code(buildQrCodeContent(bagCode.getCode())).keyValues(keyValues).build();
}
/**
--
Gitblit v1.9.3