diff --git a/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java b/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java index 52dfd14b..25c118ce 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java +++ b/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java @@ -118,6 +118,12 @@ public interface CoDelMapper { void deleteHsCode(EcssHsCodeData inData); + /** + * 按工厂+BU+品名+品牌查询已绑定该HS品名的物料编码。 + * 删除品名前必须先拦截,避免物料上的品名引用悬空。 + */ + List listPartNosBoundByHsCode(EcssHsCodeData inData); + List searchPropertiesItemList(@Param("site") String site, @Param("itemNo")String itemNo, @Param("buNo") String buNo, diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index a0be3b3d..67c65436 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java @@ -407,6 +407,29 @@ public class CoDelServiceImpl implements CoDelService { @Override @Transactional public void deleteHsCode(EcssHsCodeData data) { + if (StringUtils.isBlank(data.getHsCodeDesc()) || StringUtils.isBlank(data.getBuNo())) { + throw new RuntimeException("品名或BU不能为空。"); + } + if (StringUtils.isBlank(data.getSite())) { + data.setSite(coDelMapper.getSiteByBu(data.getBuNo())); + } + if (StringUtils.isBlank(data.getBrand())) { + data.setBrand("无"); + } + // 删除前按工厂+BU+品名+品牌校验物料绑定;有引用则禁止删除,避免物料 HS 品名悬空 + List boundPartNos = coDelMapper.listPartNosBoundByHsCode(data); + if (boundPartNos != null && !boundPartNos.isEmpty()) { + int total = boundPartNos.size(); + int displayLimit = 30; + List displayList = total > displayLimit ? boundPartNos.subList(0, displayLimit) : boundPartNos; + String partNoText = String.join("、", displayList); + String suffix = total > displayLimit ? " 等,共" + total + "个" : ""; + log.warn("删除HS品名失败,存在物料绑定. site={}, buNo={}, hsCodeDesc={}, brand={}, partCount={}", + data.getSite(), data.getBuNo(), data.getHsCodeDesc(), data.getBrand(), total); + throw new RuntimeException("品名【" + data.getHsCodeDesc() + "】品牌【" + data.getBrand() + + "】已被物料(" + partNoText + suffix+")绑定,不能删除。"); + } + PartSubPropertiesValueData propertiesData = new PartSubPropertiesValueData(); propertiesData.setSite(data.getSite()); propertiesData.setBuNo(data.getBuNo()); diff --git a/src/main/resources/mapper/ecss/CoDelMapper.xml b/src/main/resources/mapper/ecss/CoDelMapper.xml index 929c2dc6..f1c0aa16 100644 --- a/src/main/resources/mapper/ecss/CoDelMapper.xml +++ b/src/main/resources/mapper/ecss/CoDelMapper.xml @@ -420,6 +420,17 @@ delete from ecss_hsCode where site=#{site} and buNo=#{buNo} and hsCodeDesc=#{hsCodeDesc} and ISNULL(brand,'无') = ISNULL(#{brand},'无') + + +