diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index 0f99c2f7..8399381f 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -618,6 +618,13 @@ public class WmsMaterialCoilController extends BaseController { return iWmsMaterialCoilService.queryMaterialMismatchCoils(pageQuery); } + @Log(title = "修复材质异常钢卷", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/fixMaterialMismatch") + public R fixMaterialMismatchCoils(@NotNull(message = "钢卷ID不能为空") @RequestParam Long coilId) { + return toAjax(iWmsMaterialCoilService.fixMaterialMismatchCoils(coilId)); + } + } diff --git a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java index a0d68e46..c7c009fa 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsMaterialCoilService.java @@ -284,5 +284,17 @@ public interface IWmsMaterialCoilService { * @return 材质异常的钢卷列表(分页) */ TableDataInfo queryMaterialMismatchCoils(PageQuery pageQuery); + + /** + * 修复材质异常的钢卷 + * 1. 根据coilId查询钢卷的入场钢卷号(enterCoilNo) + * 2. 查询该入场钢卷号下的所有钢卷作为一组 + * 3. 找到packing_status为该入场钢卷号且itemName LIKE '%热轧卷板%'的itemId + * 4. 用该itemId对应的material更新整组的packing_status + * + * @param coilId 钢卷ID + * @return 修复结果 + */ + Boolean fixMaterialMismatchCoils(Long coilId); } 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 fddae326..85500f53 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 @@ -5186,5 +5186,73 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { return TableDataInfo.build(voPage); } + @Override + public Boolean fixMaterialMismatchCoils(Long coilId) { + WmsMaterialCoil coil = baseMapper.selectById(coilId); + if (coil == null) { + throw new RuntimeException("钢卷不存在"); + } + + String enterCoilNo = coil.getEnterCoilNo(); + if (StringUtils.isBlank(enterCoilNo)) { + throw new RuntimeException("入场钢卷号为空"); + } + + List sameEnterCoilNoCoils = baseMapper.selectList( + Wrappers.lambdaQuery(WmsMaterialCoil.class) + .eq(WmsMaterialCoil::getEnterCoilNo, enterCoilNo) + .eq(WmsMaterialCoil::getDelFlag, 0) + ); + + if (CollectionUtils.isEmpty(sameEnterCoilNoCoils)) { + throw new RuntimeException("未找到相同入场钢卷号的钢卷"); + } + + String targetMaterial = null; + + for (WmsMaterialCoil c : sameEnterCoilNoCoils) { + if (StringUtils.isNotBlank(c.getItemType()) && c.getItemId() != null) { + String itemType = c.getItemType(); + Long itemId = c.getItemId(); + + if ("raw_material".equals(itemType)) { + WmsRawMaterial rawMaterial = rawMaterialMapper.selectById(itemId); + if (rawMaterial != null && StringUtils.isNotBlank(rawMaterial.getRawMaterialName()) + && rawMaterial.getRawMaterialName().contains("热轧卷板")) { + targetMaterial = rawMaterial.getMaterial(); + break; + } + } else if ("product".equals(itemType)) { + WmsProduct product = productMapper.selectById(itemId); + if (product != null && StringUtils.isNotBlank(product.getProductName()) + && product.getProductName().contains("热轧卷板")) { + targetMaterial = product.getMaterial(); + break; + } + } + } + } + + if (StringUtils.isBlank(targetMaterial)) { + throw new RuntimeException("未找到热轧卷板对应的材质"); + } + + if (!sameEnterCoilNoCoils.isEmpty()) { + List coilIds = sameEnterCoilNoCoils.stream() + .map(WmsMaterialCoil::getCoilId) + .collect(Collectors.toList()); + + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(); + updateWrapper.in(WmsMaterialCoil::getCoilId, coilIds); + updateWrapper.set(WmsMaterialCoil::getPackingStatus, targetMaterial); + + WmsMaterialCoil updateEntity = new WmsMaterialCoil(); + updateEntity.setPackingStatus(targetMaterial); + return baseMapper.update(updateEntity, updateWrapper) > 0; + } + + return false; + } + } diff --git a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml index 37aa503d..c448931a 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml @@ -951,6 +951,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" OR (mc.item_type = 'product' AND wp.material IS NOT NULL AND mc.packing_status != wp.material) ) + ORDER BY mc.coil_id ASC