Browse Source

预览生成流水号不记录到数据库

master
han\hanst 10 months ago
parent
commit
568dbc0ef5
  1. 2
      src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java
  2. 45
      src/main/java/com/gaotao/modules/base/service/Impl/LabelDataProcessorServiceImpl.java
  3. 10
      src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java
  4. 9
      src/main/java/com/gaotao/modules/base/service/LabelDataProcessorService.java
  5. 4
      src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java

2
src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java

@ -872,7 +872,7 @@ public class LabelSettingController extends AbstractController {
return R.error("标签ID不能为空"); return R.error("标签ID不能为空");
} }
// 使用真实数据生成ZPL代码预览 // 使用真实数据生成ZPL代码预览
String zplCode = reportLabelListService.previewLabelWithRealData(reportId);
String zplCode = reportLabelListService.previewLabelWithRealData(reportId,false);
log.info("使用真实数据的ZPL代码生成成功,长度: {}", zplCode != null ? zplCode.length() : 0); log.info("使用真实数据的ZPL代码生成成功,长度: {}", zplCode != null ? zplCode.length() : 0);
return R.ok() return R.ok()
.put("code", 200) .put("code", 200)

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

@ -6,6 +6,7 @@ import com.gaotao.modules.base.service.LabelDataProcessorService;
import com.gaotao.modules.base.utils.CoordinateTransformer; import com.gaotao.modules.base.utils.CoordinateTransformer;
import com.gaotao.modules.base.utils.ZplGenerator; import com.gaotao.modules.base.utils.ZplGenerator;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -40,7 +41,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
private com.gaotao.modules.base.service.FontService fontService; private com.gaotao.modules.base.service.FontService fontService;
@Override @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()) { if (elements == null || elements.isEmpty()) {
return elements; return elements;
} }
@ -50,13 +51,13 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
// 第一轮处理处理基本数据替换不包含元素组合 // 第一轮处理处理基本数据替换不包含元素组合
List<ReportLabelList> firstPassElements = new ArrayList<>(); List<ReportLabelList> firstPassElements = new ArrayList<>();
for (ReportLabelList element : elements) { for (ReportLabelList element : elements) {
ReportLabelList processedElement = processElementData(element, dataMap,true);
ReportLabelList processedElement = processElementData(element, dataMap,true, printFlag);
firstPassElements.add(processedElement); firstPassElements.add(processedElement);
} }
// 第二轮处理处理元素组合引用 // 第二轮处理处理元素组合引用
for (ReportLabelList element : firstPassElements) { 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()) 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, 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()) { if (element == null || element.getData() == null || element.getData().isEmpty()) {
return element; return element;
} }
@ -86,7 +87,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
// 检查是否包含元素引用 // 检查是否包含元素引用
if (containsElementReferences(originalData)) { if (containsElementReferences(originalData)) {
ReportLabelList processedElement = copyElement(element); ReportLabelList processedElement = copyElement(element);
String combinedData = processElementCombination(originalData, dataMap, allElements, element);
String combinedData = processElementCombination(originalData, dataMap, allElements, element, printFlag);
processedElement.setData(combinedData); processedElement.setData(combinedData);
log.debug("处理元素组合: 原始数据={}, 组合后数据={}", originalData, combinedData); log.debug("处理元素组合: 原始数据={}, 组合后数据={}", originalData, combinedData);
return processedElement; return processedElement;
@ -109,7 +110,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
} }
@Override @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()) { if (element == null || element.getData() == null || element.getData().isEmpty()) {
return element; return element;
} }
@ -151,7 +152,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
break; break;
case "serialNumber": case "serialNumber":
// 处理流水号元素生成真实的流水号 // 处理流水号元素生成真实的流水号
processedElement.setData(processSerialNumberElement(element, dataMap,nextSeqNotExist));
processedElement.setData(processSerialNumberElement(element, dataMap,nextSeqNotExist, printFlag));
break; break;
case "pic": case "pic":
break; break;
@ -165,10 +166,10 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
} }
@Override @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 { try {
// 1. 处理数据替换和格式化 // 1. 处理数据替换和格式化
List<ReportLabelList> processedElements = processLabelData(elements, dataMap);
List<ReportLabelList> processedElements = processLabelData(elements, dataMap, printFlag);
// 2. 创建画布尺寸 // 2. 创建画布尺寸
CoordinateTransformer.CanvasSize canvasSize = createCanvasSize(labelSetting); CoordinateTransformer.CanvasSize canvasSize = createCanvasSize(labelSetting);
@ -211,7 +212,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
* 支持将多个元素的内容按特定格式组合 * 支持将多个元素的内容按特定格式组合
*/ */
private String processElementCombination(String originalData, Map<String, Object> dataMap, 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()) { if (originalData == null || originalData.isEmpty()) {
return originalData; return originalData;
} }
@ -252,7 +253,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
ReportLabelList referencedElement = findElementByReference(reference, elementMap); ReportLabelList referencedElement = findElementByReference(reference, elementMap);
if (referencedElement != null) { if (referencedElement != null) {
// 递归处理引用的元素数据 // 递归处理引用的元素数据
replacement = processElementData(referencedElement, dataMap,false).getData();
replacement = processElementData(referencedElement, dataMap,false, printFlag).getData();
if (replacement == null) { if (replacement == null) {
replacement = ""; replacement = "";
} }
@ -968,11 +969,11 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
* @param dataMap 数据源映射 * @param dataMap 数据源映射
* @return 生成的流水号字符串 * @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 { try {
log.debug("开始处理流水号元素: itemNo={}, data={}", element.getItemNo(), element.getData()); 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()); ReportLabelList parentElement = baseService.getReportLabelListByLabelNo(element.getParentSerialLabelNo());
if (parentElement==null) { if (parentElement==null) {
throw new RuntimeException("父标签流水号已发生修改,请重新选择"); throw new RuntimeException("父标签流水号已发生修改,请重新选择");
@ -1003,7 +1004,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
log.debug("生成的KeyInfo: {}", keyInfo); log.debug("生成的KeyInfo: {}", keyInfo);
// 3. 获取或生成下一个流水号 // 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); log.debug("获取的下一个流水号: {}", nextSeqNo);
// 4. 格式化流水号 // 4. 格式化流水号
@ -1084,9 +1085,11 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
* @param itemNo 项目编号 * @param itemNo 项目编号
* @param keyInfo 关键信息 * @param keyInfo 关键信息
* @param intervalValue 步长 * @param intervalValue 步长
* @param nextSeqNotExist 如果不存在则新增
* @param printFlag 是否是打印操作打印才修改流水号预览不会修改数据库
* @return 下一个流水号 * @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 { try {
// 查询现有的流水号信息 // 查询现有的流水号信息
com.gaotao.modules.base.entity.LabelContentData query = new com.gaotao.modules.base.entity.LabelContentData(); com.gaotao.modules.base.entity.LabelContentData query = new com.gaotao.modules.base.entity.LabelContentData();
@ -1109,7 +1112,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
if (matchingInfo != null) { if (matchingInfo != null) {
// 存在记录递增流水号 // 存在记录递增流水号
nextSeqNo = matchingInfo.getLastSeqNo() + intervalValue; nextSeqNo = matchingInfo.getLastSeqNo() + intervalValue;
if (printFlag) {
// 更新数据库记录 // 更新数据库记录
com.gaotao.modules.base.entity.LabelContentSerialInfoData updateInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); com.gaotao.modules.base.entity.LabelContentSerialInfoData updateInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData();
updateInfo.setLabelNo(reportId); updateInfo.setLabelNo(reportId);
@ -1117,24 +1120,24 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
updateInfo.setKeyInfo(keyInfo); updateInfo.setKeyInfo(keyInfo);
updateInfo.setLastSeqNo(nextSeqNo); updateInfo.setLastSeqNo(nextSeqNo);
updateInfo.setOriKeyInfo(keyInfo); // 用于WHERE条件 updateInfo.setOriKeyInfo(keyInfo); // 用于WHERE条件
baseService.updateLabelSerialInfo(updateInfo); baseService.updateLabelSerialInfo(updateInfo);
log.debug("更新流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", log.debug("更新流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}",
reportId, itemNo, keyInfo, nextSeqNo); reportId, itemNo, keyInfo, nextSeqNo);
}
} else { } else {
// 不存在记录创建新记录 // 不存在记录创建新记录
nextSeqNo = intervalValue; // 从步长开始 nextSeqNo = intervalValue; // 从步长开始
if (printFlag) {
com.gaotao.modules.base.entity.LabelContentSerialInfoData newInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData(); com.gaotao.modules.base.entity.LabelContentSerialInfoData newInfo = new com.gaotao.modules.base.entity.LabelContentSerialInfoData();
newInfo.setLabelNo(reportId); newInfo.setLabelNo(reportId);
newInfo.setItemNo(itemNo); newInfo.setItemNo(itemNo);
newInfo.setKeyInfo(keyInfo); newInfo.setKeyInfo(keyInfo);
newInfo.setLastSeqNo(nextSeqNo); newInfo.setLastSeqNo(nextSeqNo);
baseService.insertLabelSerialInfo(newInfo); baseService.insertLabelSerialInfo(newInfo);
log.debug("创建流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}", log.debug("创建流水号记录: reportId={}, itemNo={}, keyInfo={}, lastSeqNo={}",
reportId, itemNo, keyInfo, nextSeqNo); reportId, itemNo, keyInfo, nextSeqNo);
} }
}
} else { } else {
nextSeqNo = matchingInfo!=null?matchingInfo.getLastSeqNo(): intervalValue; // 如果不存在记录则使用步长作为初始值 nextSeqNo = matchingInfo!=null?matchingInfo.getLastSeqNo(): intervalValue; // 如果不存在记录则使用步长作为初始值
} }
@ -1218,7 +1221,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
} }
@Override @Override
public String generateZplWithRealData(String reportId, List<ReportLabelList> elements, LabelSettingData labelSetting) {
public String generateZplWithRealData(String reportId, List<ReportLabelList> elements, LabelSettingData labelSetting,Boolean printFlag) {
try { try {
log.info("开始根据ReportId获取真实数据并生成ZPL: reportId={}", reportId); log.info("开始根据ReportId获取真实数据并生成ZPL: reportId={}", reportId);
@ -1277,7 +1280,7 @@ public class LabelDataProcessorServiceImpl implements LabelDataProcessorService
log.info("合并后的真实数据,总字段数: {}", realDataMap.size()); log.info("合并后的真实数据,总字段数: {}", realDataMap.size());
// 4. 使用真实数据生成ZPL // 4. 使用真实数据生成ZPL
return generateZplWithData(elements, realDataMap, labelSetting);
return generateZplWithData(elements, realDataMap, labelSetting, printFlag);
} catch (Exception e) { } catch (Exception e) {
log.error("根据ReportId获取真实数据并生成ZPL失败: reportId={}, error={}", reportId, e.getMessage(), e); log.error("根据ReportId获取真实数据并生成ZPL失败: reportId={}, error={}", reportId, e.getMessage(), e);

10
src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java

@ -171,7 +171,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
} }
try { try {
// 1. 生成带真实数据的ZPL代码 // 1. 生成带真实数据的ZPL代码
String zplCode = previewLabelWithRealData(printRequest.getReportId());
String zplCode = previewLabelWithRealData(printRequest.getReportId(),true);
printRequest.setZplCode(zplCode); printRequest.setZplCode(zplCode);
// 2. 验证ZPL代码 // 2. 验证ZPL代码
@ -471,7 +471,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
} }
@Override @Override
public List<ReportLabelList> getProcessedElements(String reportId, Map<String, Object> dataMap) {
public List<ReportLabelList> getProcessedElements(String reportId, Map<String, Object> dataMap,Boolean printFlag) {
try { try {
// 获取标签元素 // 获取标签元素
List<ReportLabelList> elements = getZplElements(reportId); List<ReportLabelList> elements = getZplElements(reportId);
@ -480,7 +480,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
} }
// 处理数据替换和格式化 // 处理数据替换和格式化
List<ReportLabelList> processedElements = labelDataProcessorService.processLabelData(elements, dataMap);
List<ReportLabelList> processedElements = labelDataProcessorService.processLabelData(elements, dataMap, printFlag);
log.info("标签元素处理成功,reportId: {}, 元素数: {}, 数据字段数: {}", log.info("标签元素处理成功,reportId: {}, 元素数: {}, 数据字段数: {}",
reportId, processedElements.size(), dataMap.size()); reportId, processedElements.size(), dataMap.size());
@ -494,7 +494,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
} }
@Override @Override
public String previewLabelWithRealData(String reportId) {
public String previewLabelWithRealData(String reportId,Boolean printFlag) {
try { try {
log.info("开始使用真实数据预览标签: reportId={}", reportId); log.info("开始使用真实数据预览标签: reportId={}", reportId);
@ -516,7 +516,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
LabelSettingData labelSetting = labelSettingDataList.get(0); LabelSettingData labelSetting = labelSettingDataList.get(0);
// 使用真实数据生成ZPL代码 // 使用真实数据生成ZPL代码
String zplCode = labelDataProcessorService.generateZplWithRealData(reportId, elements, labelSetting);
String zplCode = labelDataProcessorService.generateZplWithRealData(reportId, elements, labelSetting,printFlag);
log.info("使用真实数据的标签预览生成成功,reportId: {}", reportId); log.info("使用真实数据的标签预览生成成功,reportId: {}", reportId);
return zplCode; return zplCode;

9
src/main/java/com/gaotao/modules/base/service/LabelDataProcessorService.java

@ -17,7 +17,7 @@ public interface LabelDataProcessorService {
* @param dataMap 数据源映射key为字段名value为实际值 * @param dataMap 数据源映射key为字段名value为实际值
* @return 处理后的标签元素列表 * @return 处理后的标签元素列表
*/ */
List<ReportLabelList> processLabelData(List<ReportLabelList> elements, Map<String, Object> dataMap);
List<ReportLabelList> processLabelData(List<ReportLabelList> elements, Map<String, Object> dataMap,Boolean printFlag);
/** /**
* 处理单个标签元素的数据 * 处理单个标签元素的数据
@ -26,7 +26,7 @@ public interface LabelDataProcessorService {
* @param nextSeqNotExist 是否存在下一个序列号 * @param nextSeqNotExist 是否存在下一个序列号
* @return 处理后的标签元素 * @return 处理后的标签元素
*/ */
ReportLabelList processElementData(ReportLabelList element, Map<String, Object> dataMap,Boolean nextSeqNotExist);
ReportLabelList processElementData(ReportLabelList element, Map<String, Object> dataMap,Boolean nextSeqNotExist,Boolean printFlag);
/** /**
* 生成带真实数据的ZPL代码 * 生成带真实数据的ZPL代码
@ -35,7 +35,7 @@ public interface LabelDataProcessorService {
* @param labelSetting 标签设置 * @param labelSetting 标签设置
* @return ZPL代码 * @return ZPL代码
*/ */
String generateZplWithData(List<ReportLabelList> elements, Map<String, Object> dataMap, LabelSettingData labelSetting);
String generateZplWithData(List<ReportLabelList> elements, Map<String, Object> dataMap, LabelSettingData labelSetting,Boolean printFlag);
/** /**
* 格式化数字数据 * 格式化数字数据
@ -60,7 +60,8 @@ public interface LabelDataProcessorService {
* @param reportId 报告ID * @param reportId 报告ID
* @param elements 标签元素列表 * @param elements 标签元素列表
* @param labelSetting 标签设置 * @param labelSetting 标签设置
* @param printFlag 打印标志
* @return 处理后的ZPL代码 * @return 处理后的ZPL代码
*/ */
String generateZplWithRealData(String reportId, List<ReportLabelList> elements, LabelSettingData labelSetting);
String generateZplWithRealData(String reportId, List<ReportLabelList> elements, LabelSettingData labelSetting,Boolean printFlag);
} }

4
src/main/java/com/gaotao/modules/base/service/ReportLabelListService.java

@ -22,13 +22,13 @@ public interface ReportLabelListService extends IService<ReportLabelList> {
* @param dataMap 数据源映射 * @param dataMap 数据源映射
* @return 处理后的标签元素列表 * @return 处理后的标签元素列表
*/ */
List<ReportLabelList> getProcessedElements(String reportId, Map<String, Object> dataMap);
List<ReportLabelList> getProcessedElements(String reportId, Map<String, Object> dataMap,Boolean printFlag);
/** /**
* 使用真实数据预览标签从数据库视图获取数据 * 使用真实数据预览标签从数据库视图获取数据
* @param reportId 标签ID * @param reportId 标签ID
* @return 预览用的ZPL代码 * @return 预览用的ZPL代码
*/ */
String previewLabelWithRealData(String reportId);
String previewLabelWithRealData(String reportId,Boolean printFlag);
} }
Loading…
Cancel
Save