From c512d25422ccbbf134ac98a138661a5755c41c53 Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Thu, 30 Oct 2025 12:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=AF=8F=E4=B8=80=E6=AD=A5=E7=9A=84?= =?UTF-8?q?=E9=92=A2=E5=8D=B7=E4=BA=8C=E7=BB=B4=E7=A0=81=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=EF=BC=8C=E6=96=B0=E6=AD=A5=E9=AA=A4=E9=87=87?= =?UTF-8?q?=E7=94=A8=E6=96=B0=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 4 +- .../impl/WmsMaterialCoilServiceImpl.java | 99 +++++++++++++++++-- 2 files changed, 94 insertions(+), 9 deletions(-) diff --git a/klp-admin/src/main/resources/application-dev.yml b/klp-admin/src/main/resources/application-dev.yml index f6047a62..67cf4b7e 100644 --- a/klp-admin/src/main/resources/application-dev.yml +++ b/klp-admin/src/main/resources/application-dev.yml @@ -64,9 +64,9 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://140.143.206.120:3306/klp-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://140.143.206.120:13306/klp-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true username: klp - password: KeLunPu123@ + password: KeLunPu@123 # 从库数据源 slave: lazy: true diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 6e1de40b..0516f87d 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -252,6 +252,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { recordBo.setQrcodeType(0L); recordBo.setIsEnabled(0L); recordBo.setSize(200L); + recordBo.setStatus(1); // 1=当前有效码 WmsGenerateRecordVo record = generateRecordService.insertByBo(recordBo); return record.getRecordId(); @@ -354,8 +355,19 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("原钢卷不存在"); } - // 1. 更新二维码,添加操作记录 - updateQrcodeContent(oldCoil.getQrcodeRecordId(), bo); + // 判断warehouseId是否发生变化 + boolean warehouseChanged = bo.getWarehouseId() != null && + !bo.getWarehouseId().equals(oldCoil.getWarehouseId()); + + Long qrcodeRecordId; + if (warehouseChanged) { + // 如果库区发生变化,生成新的二维码 + qrcodeRecordId = generateQrcodeForUpdate(oldCoil, bo); + } else { + // 如果库区未变化,更新原二维码内容 + updateQrcodeContent(oldCoil.getQrcodeRecordId(), bo); + qrcodeRecordId = oldCoil.getQrcodeRecordId(); + } // 2. 将原数据更新为历史数据(data_type=0) LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -367,12 +379,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { WmsMaterialCoil newCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class); newCoil.setCoilId(null); // 清空ID,让数据库自动生成新的ID newCoil.setDataType(1); // 设置为当前数据 - newCoil.setQrcodeRecordId(oldCoil.getQrcodeRecordId()); // 继承二维码ID + newCoil.setQrcodeRecordId(qrcodeRecordId); // 使用新的或原有的二维码ID - // 确保关键字段不丢失 - if (newCoil.getEnterCoilNo() == null) { - newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); - } + // 确保关键字段不丢失(入场钢卷号始终不变) + newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); // 入场钢卷号始终不变 if (newCoil.getSupplierCoilNo() == null) { newCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); // 保留厂家原料卷号 } @@ -387,10 +397,83 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { boolean flag = baseMapper.insert(newCoil) > 0; if (flag) { bo.setCoilId(newCoil.getCoilId()); + // 如果生成了新二维码,更新二维码中的coilId + if (warehouseChanged) { + updateQrcodeCoilId(qrcodeRecordId, newCoil.getCoilId()); + } } return flag; } + /** + * 生成二维码(更新时库区变化) + */ + private Long generateQrcodeForUpdate(WmsMaterialCoil oldCoil, WmsMaterialCoilBo bo) { + try { + // 1. 将原二维码标记为历史码(status = 0) + if (oldCoil.getQrcodeRecordId() != null) { + WmsGenerateRecordBo oldQrBo = new WmsGenerateRecordBo(); + oldQrBo.setRecordId(oldCoil.getQrcodeRecordId()); + oldQrBo.setStatus(0); // 0=历史码 + generateRecordService.updateByBo(oldQrBo); + } + + Map contentMap = new HashMap<>(); + String currentCoilNo = bo.getCurrentCoilNo() != null ? bo.getCurrentCoilNo() : oldCoil.getCurrentCoilNo(); + + contentMap.put("enter_coil_no", oldCoil.getEnterCoilNo()); // 入场钢卷号(始终不变) + contentMap.put("current_coil_no", currentCoilNo); // 当前钢卷号 + contentMap.put("coil_id", "null"); // 钢卷ID(更新时暂时为null,插入后更新) + + // 复制原钢卷的历史steps + List> steps = new ArrayList<>(); + if (oldCoil.getQrcodeRecordId() != null) { + WmsGenerateRecordVo oldRecord = generateRecordService.queryById(oldCoil.getQrcodeRecordId()); + if (oldRecord != null) { + ObjectMapper objectMapper = new ObjectMapper(); + @SuppressWarnings("unchecked") + Map oldContentMap = objectMapper.readValue(oldRecord.getContent(), Map.class); + @SuppressWarnings("unchecked") + List> oldSteps = (List>) oldContentMap.get("steps"); + if (oldSteps != null) { + steps.addAll(oldSteps); + } + } + } + + // 添加更新步骤(库区变化) + Map updateStep = new HashMap<>(); + updateStep.put("step", steps.size() + 1); + updateStep.put("action", "更新"); + updateStep.put("operation", "库区变更"); + updateStep.put("old_warehouse_id", String.valueOf(oldCoil.getWarehouseId())); + updateStep.put("new_warehouse_id", String.valueOf(bo.getWarehouseId())); + updateStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId())); + updateStep.put("current_coil_no", currentCoilNo); + updateStep.put("operator", LoginHelper.getUsername()); // 操作者 + steps.add(updateStep); + + contentMap.put("steps", steps); + + ObjectMapper objectMapper = new ObjectMapper(); + String contentJson = objectMapper.writeValueAsString(contentMap); + + // 2. 生成新的二维码(status = 1) + WmsGenerateRecordBo recordBo = new WmsGenerateRecordBo(); + recordBo.setContent(contentJson); + recordBo.setSerialNumber(oldCoil.getEnterCoilNo() + "-W" + bo.getWarehouseId()); // 使用入场钢卷号+库区ID作为编号 + recordBo.setQrcodeType(0L); + recordBo.setIsEnabled(0L); + recordBo.setSize(200L); + recordBo.setStatus(1); // 1=当前有效码 + + WmsGenerateRecordVo record = generateRecordService.insertByBo(recordBo); + return record.getRecordId(); + } catch (Exception e) { + throw new RuntimeException("生成更新二维码失败: " + e.getMessage()); + } + } + /** * 批量更新(分卷/合卷) */ @@ -578,6 +661,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { recordBo.setQrcodeType(0L); recordBo.setIsEnabled(0L); recordBo.setSize(200L); + recordBo.setStatus(1); // 1=当前有效码 WmsGenerateRecordVo record = generateRecordService.insertByBo(recordBo); return record.getRecordId(); @@ -672,6 +756,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { recordBo.setQrcodeType(0L); recordBo.setIsEnabled(0L); recordBo.setSize(200L); + recordBo.setStatus(1); // 1=当前有效码 WmsGenerateRecordVo record = generateRecordService.insertByBo(recordBo); return record.getRecordId();