From b6e24f66fa60af012f567979fa5a077a94513f1b Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Mon, 25 Aug 2025 10:38:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LabelSettingController.java | 27 +++ .../modules/base/service/BaseService.java | 8 + .../base/service/Impl/BaseServiceImpl.java | 174 ++++++++++++++++++ src/main/resources/mapper/base/BaseMapper.xml | 6 +- 4 files changed, 212 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java b/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java index c7e2445..3dd5761 100644 --- a/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java +++ b/src/main/java/com/gaotao/modules/base/controller/LabelSettingController.java @@ -830,6 +830,33 @@ public class LabelSettingController extends AbstractController { } } + /** + * @description: 复制标签(包括基本信息和绘制内容) + * @author Kiro + * @date 2025/01/25 + * @version 1.0 + */ + @RequestMapping(value = "/copyLabelSetting") + public R copyLabelSetting(@RequestBody java.util.Map params) { + try { + String site = params.get("site").toString(); + String username = params.get("username").toString(); + String originalLabelNo = params.get("originalLabelNo").toString(); + + // 调用服务层方法复制标签 + String newLabelNo = baseService.copyLabelSetting(site, username, originalLabelNo); + + return R.ok() + .put("code", 200) + .put("msg", "标签复制成功") + .put("data", new java.util.HashMap() {{ + put("newLabelNo", newLabelNo); + }}); + } catch (Exception e) { + return R.error("复制标签失败: " + e.getMessage()); + } + } + /** * @description: 使用真实数据预览标签(从数据库视图获取数据) * @author Kiro diff --git a/src/main/java/com/gaotao/modules/base/service/BaseService.java b/src/main/java/com/gaotao/modules/base/service/BaseService.java index 09b23e7..6613c70 100644 --- a/src/main/java/com/gaotao/modules/base/service/BaseService.java +++ b/src/main/java/com/gaotao/modules/base/service/BaseService.java @@ -358,4 +358,12 @@ public interface BaseService { ReportLabelList getReportLabelListByLabelNo(String labelNo); + /** + * @description: 复制标签(包括基本信息和绘制内容) + * @author Kiro + * @date 2025/01/25 + * @version 1.0 + */ + String copyLabelSetting(String site, String username, String originalLabelNo); + } diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java index c6ccd09..a98de5c 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java +++ b/src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java @@ -6,6 +6,7 @@ import com.gaotao.modules.base.dao.BaseMapper; import com.gaotao.modules.base.dao.ProcedureMapper; import com.gaotao.modules.base.entity.*; import com.gaotao.modules.base.service.BaseService; +import com.gaotao.modules.base.dao.ReportLabelListMapper; import com.gaotao.modules.sys.service.SysMsgService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -15,6 +16,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @Service @@ -25,6 +27,8 @@ public class BaseServiceImpl implements BaseService { private ProcedureMapper procedureMapper; @Autowired private SysMsgService sysMsgService; + @Autowired + private ReportLabelListMapper reportLabelListMapper; @Override public List getLabelSettingList(LabelSettingData inData) { @@ -900,6 +904,176 @@ public class BaseServiceImpl implements BaseService { return baseMapper.getReportLabelListByLabelNo(labelNo); } + + + @Override + @Transactional + public String copyLabelSetting(String site, String username, String originalLabelNo) { + // 1. 检查原标签是否存在 + LabelSettingData originalLabel = baseMapper.getLabelSettingByLabelNo(originalLabelNo); + if (originalLabel == null) { + throw new XJException("原标签不存在: " + originalLabelNo); + } + + // 2. 生成新的标签编号 + String newLabelNo = this.getLabelSettingLabelNo(); + + // 3. 复制标签基本信息 + LabelSettingData newLabelData = new LabelSettingData(); + newLabelData.setLabelNo(newLabelNo); + newLabelData.setLabelType(originalLabel.getLabelType()); + newLabelData.setLabelName(originalLabel.getLabelName()); + newLabelData.setLabelClass(originalLabel.getLabelClass()); + newLabelData.setRemark("复制("+originalLabel.getLabelType()+originalLabelNo+")"); + newLabelData.setPrintDirection(originalLabel.getPrintDirection()); + newLabelData.setRfidFlag(originalLabel.getRfidFlag()); + newLabelData.setPaperSize(originalLabel.getPaperSize()); + newLabelData.setZplCode(originalLabel.getZplCode()); + newLabelData.setPaperOrientation(originalLabel.getPaperOrientation()); + newLabelData.setDpi(originalLabel.getDpi()); + newLabelData.setCanvasWidth(originalLabel.getCanvasWidth()); + newLabelData.setCanvasHeight(originalLabel.getCanvasHeight()); + newLabelData.setPhysicalWidthMm(originalLabel.getPhysicalWidthMm()); + newLabelData.setPhysicalHeightMm(originalLabel.getPhysicalHeightMm()); + // 插入新标签基本信息 + baseMapper.insertLabelSetting(newLabelData); + + // 4. 复制标签绘制内容(ZPL元素) + this.copyLabelElements(originalLabelNo, newLabelNo); + return newLabelNo; + } + + /** + * @description: 复制标签绘制元素 + * @author Kiro + * @date 2025/01/25 + * @version 1.0 + */ + private void copyLabelElements(String originalLabelNo, String newLabelNo) { + try { + // 直接使用 Mapper 获取原标签的所有绘制元素 + List originalElements = reportLabelListMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper() + .eq("report_id", originalLabelNo) + ); + + if (originalElements != null && !originalElements.isEmpty()) { + // 复制每个元素并直接保存 + java.util.concurrent.atomic.AtomicInteger counter = new java.util.concurrent.atomic.AtomicInteger(1); + + for (ReportLabelList originalElement : originalElements) { + ReportLabelList newElement = new ReportLabelList(); + + // 复制所有属性 + newElement.setReportId(newLabelNo); // 设置新的标签编号 + newElement.setLabelNo(newLabelNo + "-" + counter.getAndIncrement()); + newElement.setType(originalElement.getType()); + newElement.setX(originalElement.getX()); + newElement.setY(originalElement.getY()); + newElement.setData(originalElement.getData()); + newElement.setFontSize(originalElement.getFontSize()); + newElement.setHeight(originalElement.getHeight()); + newElement.setWidth(originalElement.getWidth()); + newElement.setBold(originalElement.getBold()); + newElement.setNewline(originalElement.getNewline()); + newElement.setLineRows(originalElement.getLineRows()); + newElement.setLineWidth(originalElement.getLineWidth()); + newElement.setItemNo(originalElement.getItemNo()); + newElement.setBarcodeType(originalElement.getBarcodeType()); + newElement.setShowContent(originalElement.getShowContent()); + newElement.setShowElement(originalElement.getShowElement()); + newElement.setShowMainSeq(originalElement.getShowMainSeq()); + newElement.setSeqName(originalElement.getSeqName()); + newElement.setIsChecked(originalElement.getIsChecked()); + newElement.setDecimalPlaces(originalElement.getDecimalPlaces()); + newElement.setShowDecimalPlaces(originalElement.getShowDecimalPlaces()); + newElement.setThousandsSeparator(originalElement.getThousandsSeparator()); + newElement.setDigits(originalElement.getDigits()); + newElement.setStep(originalElement.getStep()); + + // 复制新增的数据类型相关字段 + newElement.setDataType(originalElement.getDataType()); + newElement.setDateExtractType(originalElement.getDateExtractType()); + newElement.setFirstWeekDate(originalElement.getFirstWeekDate()); + newElement.setFirstDayOfWeek(originalElement.getFirstDayOfWeek()); + newElement.setDateFormat(originalElement.getDateFormat()); + newElement.setDateSeparator(originalElement.getDateSeparator()); + newElement.setYearDigits(originalElement.getYearDigits()); + newElement.setMonthDayDigits(originalElement.getMonthDayDigits()); + newElement.setStringProcessType(originalElement.getStringProcessType()); + newElement.setSubstringStartLength(originalElement.getSubstringStartLength()); + newElement.setSubstringEndLength(originalElement.getSubstringEndLength()); + newElement.setSplitCharacter(originalElement.getSplitCharacter()); + newElement.setSplitIndex(originalElement.getSplitIndex()); + newElement.setReplaceFrom(originalElement.getReplaceFrom()); + newElement.setReplaceTo(originalElement.getReplaceTo()); + + newElement.setFontFamily(originalElement.getFontFamily()); + newElement.setFontStyle(originalElement.getFontStyle()); + newElement.setFontWeight(originalElement.getFontWeight()); + newElement.setTextAlign(originalElement.getTextAlign()); + newElement.setLetterSpacing(originalElement.getLetterSpacing()); + newElement.setLineHeight(originalElement.getLineHeight()); + newElement.setFontItalic(originalElement.getFontItalic()); + newElement.setFontUnderline(originalElement.getFontUnderline()); + + newElement.setParentSerialLabelNo(originalElement.getParentSerialLabelNo()); + + // 处理流水号元素的标签内容定义 + if ("serialNumber".equals(originalElement.getType())) { + this.copySerialNumberContent(originalLabelNo, newLabelNo, originalElement, newElement); + } + + // 直接插入新元素 + reportLabelListMapper.insert(newElement); + } + } + } catch (Exception e) { + throw new XJException("复制标签绘制内容失败: " + e.getMessage()); + } + } + + /** + * @description: 复制流水号元素的内容定义 + * @author Kiro + * @date 2025/01/25 + * @version 1.0 + */ + private void copySerialNumberContent(String originalLabelNo, String newLabelNo, + ReportLabelList originalElement, ReportLabelList newElement) { + try { + // 创建流水号的标签内容定义 + LabelContentData inData = new LabelContentData(); + inData.setLabelNo(newLabelNo); + inData.setDbFieldName("流水号"); + inData.setItemDesc("流水号"); + inData.setObjectGroup("流水号"); + inData.setObjectName("流水号"); + inData.setSequenceBits(originalElement.getDigits() != null ? originalElement.getDigits() : 0); + inData.setIntervalValue(originalElement.getStep() != null ? originalElement.getStep() : 1); + + // 获取序号 + Integer itemNo = this.getLabelContentItemNo(inData.getLabelNo()); + inData.setItemNo(itemNo); + baseMapper.insertLabelContent(inData); + + // 复制序列规则 + if (originalElement.getData() != null && !originalElement.getData().isEmpty()) { + int seqNo = 1; + for (String seqRule : originalElement.getData().split("\\+")) { + inData.setObjectName(seqRule); + inData.setSeqNo(seqNo); + baseMapper.insertLabelContentRule(inData); + seqNo++; + } + } + newElement.setItemNo(itemNo); + } catch (Exception e) { + // 流水号内容定义复制失败不影响主流程 + System.err.println("复制流水号内容定义失败: " + e.getMessage()); + } + } + @Override public Map getParentLabelInfo(String labelNo) { return baseMapper.getParentLabelInfo(labelNo); diff --git a/src/main/resources/mapper/base/BaseMapper.xml b/src/main/resources/mapper/base/BaseMapper.xml index 38262e1..b105e2e 100644 --- a/src/main/resources/mapper/base/BaseMapper.xml +++ b/src/main/resources/mapper/base/BaseMapper.xml @@ -27,7 +27,7 @@