package cn.iocoder.yudao.module.mes.framework.qrcode;
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.batch.MesProBatchDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.pallet.MesProPalletDO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
import java.util.LinkedHashMap;
|
import java.util.Map;
|
|
/**
|
* MES 二维码标签构建器:统一"二维码编码纯码值 + 图片叠加可读文本"的文本组装规则,
|
* 保证批次、托盘、袋码三种标签的关键信息保留一致
|
*/
|
public final class MesProQrLabelBuilder {
|
|
private MesProQrLabelBuilder() {
|
}
|
|
/**
|
* 批次二维码标签
|
*/
|
public static QrLabelInfo buildBatchLabel(MesProBatchDO batch,
|
Map<Long, MesMdmItemDO> itemMap,
|
Map<Long, AdminUserRespDTO> userMap) {
|
LinkedHashMap<String, String> keyValues = new LinkedHashMap<>();
|
keyValues.put("批次号", batch.getCode());
|
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 (batch.getPlanQuantity() != null) {
|
keyValues.put("计划数量", String.valueOf(batch.getPlanQuantity()));
|
}
|
AdminUserRespDTO user = userMap.get(batch.getOwnerUserId());
|
if (user != null) {
|
keyValues.put("责任人", user.getNickname());
|
}
|
return QrLabelInfo.builder().fileName(batch.getCode()).code(batch.getCode()).keyValues(keyValues).build();
|
}
|
|
/**
|
* 托盘二维码标签
|
*/
|
public static QrLabelInfo buildPalletLabel(MesProPalletDO pallet,
|
MesProBatchDO batch,
|
Map<Long, MesMdmItemDO> itemMap,
|
Map<Long, AdminUserRespDTO> userMap) {
|
LinkedHashMap<String, String> keyValues = new LinkedHashMap<>();
|
keyValues.put("托盘码", pallet.getCode());
|
keyValues.put("托盘序号", pallet.getPalletNo() == null ? "" : String.valueOf(pallet.getPalletNo()));
|
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();
|
}
|
|
/**
|
* 袋码二维码标签
|
*/
|
public static QrLabelInfo buildBagCodeLabel(MesProBagCodeDO bagCode,
|
MesProBatchDO batch,
|
Map<Long, MesMdmItemDO> itemMap,
|
Map<Long, AdminUserRespDTO> userMap) {
|
LinkedHashMap<String, String> keyValues = new LinkedHashMap<>();
|
keyValues.put("袋码", bagCode.getCode());
|
keyValues.put("袋序号", bagCode.getBagNo() == null ? "" : String.valueOf(bagCode.getBagNo()));
|
keyValues.put("批次号", bagCode.getBatchCode());
|
if (StrUtil.isNotEmpty(bagCode.getPalletCode())) {
|
keyValues.put("绑定托盘", bagCode.getPalletCode());
|
}
|
if (batch != null) {
|
fillBatchKeyValues(keyValues, batch, itemMap, userMap);
|
}
|
return QrLabelInfo.builder().fileName(bagCode.getCode()).code(bagCode.getCode()).keyValues(keyValues).build();
|
}
|
|
/**
|
* 填充批次公共可读文本(品种、规格、产线、生产日期、责任人)
|
*/
|
private static void fillBatchKeyValues(LinkedHashMap<String, String> keyValues, MesProBatchDO batch,
|
Map<Long, MesMdmItemDO> itemMap, Map<Long, AdminUserRespDTO> userMap) {
|
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"));
|
AdminUserRespDTO user = userMap.get(batch.getOwnerUserId());
|
if (user != null) {
|
keyValues.put("责任人", user.getNickname());
|
}
|
}
|
|
}
|