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 aa8b62af..8006e8e8 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 @@ -364,7 +364,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } /** - * 单个更新(正常更新,记录历史变更) + * 单个更新 */ private Boolean updateBySingle(WmsMaterialCoilBo bo) { // 查询原钢卷 @@ -373,35 +373,35 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { throw new RuntimeException("原钢卷不存在"); } - // 直接更新原记录(不产生新记录,不修改dataType) - WmsMaterialCoil updateCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class); + // 1. 将原钢卷标记为历史数据(dataType = 0) + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WmsMaterialCoil::getCoilId, oldCoil.getCoilId()) + .set(WmsMaterialCoil::getDataType, 0); // 设置为历史数据 + baseMapper.update(null, updateWrapper); + + // 2. 创建新记录 + WmsMaterialCoil newCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class); + newCoil.setCoilId(null); // 清空ID,让数据库自动生成新ID + newCoil.setDataType(1); // 设置为当前数据 + newCoil.setQrcodeRecordId(oldCoil.getQrcodeRecordId()); // 继续使用原二维码 - // 确保关键字段不丢失 - if (updateCoil.getEnterCoilNo() == null) { - updateCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); + // 继承原记录的关键字段 + if (newCoil.getEnterCoilNo() == null) { + newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); } - if (updateCoil.getSupplierCoilNo() == null) { - updateCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); - } - if (updateCoil.getQrcodeRecordId() == null) { - updateCoil.setQrcodeRecordId(oldCoil.getQrcodeRecordId()); - } - if (updateCoil.getWarehouseId() == null) { - updateCoil.setWarehouseId(oldCoil.getWarehouseId()); - } - if (updateCoil.getActualWarehouseId() == null) { - updateCoil.setActualWarehouseId(oldCoil.getActualWarehouseId()); + if (newCoil.getSupplierCoilNo() == null) { + newCoil.setSupplierCoilNo(oldCoil.getSupplierCoilNo()); } - validEntityBeforeSave(updateCoil); + validEntityBeforeSave(newCoil); - // 直接更新记录(coilId不变) - boolean flag = baseMapper.updateById(updateCoil) > 0; + // 插入新记录 + boolean flag = baseMapper.insert(newCoil) > 0; if (flag) { - // 更新二维码内容(添加新的step) + // 3. 更新二维码内容(添加更新步骤并更新current_coil_id) if (oldCoil.getQrcodeRecordId() != null) { - updateQrcodeContentForNormalUpdate(oldCoil, bo); + updateQrcodeContentForNormalUpdate(oldCoil, bo, newCoil.getCoilId()); } } @@ -843,8 +843,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { /** * 更新二维码内容(正常更新,添加step) + * @param oldCoil 旧钢卷记录 + * @param bo 更新数据 + * @param newCoilId 新钢卷ID(如果创建了新记录) */ - private void updateQrcodeContentForNormalUpdate(WmsMaterialCoil oldCoil, WmsMaterialCoilBo bo) { + private void updateQrcodeContentForNormalUpdate(WmsMaterialCoil oldCoil, WmsMaterialCoilBo bo, Long newCoilId) { try { // 获取原二维码记录 WmsGenerateRecordVo oldRecord = generateRecordService.queryById(oldCoil.getQrcodeRecordId()); @@ -872,6 +875,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { newStep.put("old_current_coil_no", oldCoil.getCurrentCoilNo()); newStep.put("new_current_coil_no", bo.getCurrentCoilNo()); newStep.put("old_coil_id", String.valueOf(oldCoil.getCoilId())); + newStep.put("new_coil_id", String.valueOf(newCoilId)); newStep.put("operator", LoginHelper.getUsername()); // 记录具体的变更字段 @@ -909,7 +913,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { contentMap.put("current_coil_no", bo.getCurrentCoilNo()); } - // current_coil_id保持不变(因为coilId没有变化) + // 更新 current_coil_id 为新记录的ID + if (newCoilId != null) { + contentMap.put("current_coil_id", String.valueOf(newCoilId)); + } // 更新二维码记录 String newContentJson = objectMapper.writeValueAsString(contentMap);