From 11ad425098e81c586d1e28c7cd1cd4887f6d05a4 Mon Sep 17 00:00:00 2001 From: yinq <1345442242@qq.com> Date: Mon, 16 Oct 2023 15:16:16 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E8=AE=A2=E5=8D=95BOM=E7=88=B6?= =?UTF-8?q?=E5=AD=90=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/aucma/base/domain/OrderBomInfo.java | 15 +++++ .../aucma/base/mapper/OrderBomInfoMapper.java | 27 +++++++++ .../service/impl/OrderBomInfoServiceImpl.java | 55 ++++++++++++++++++- .../mapper/base/OrderBomInfoMapper.xml | 32 ++++++++++- .../impl/ProductPlanInfoServiceImpl.java | 5 +- 5 files changed, 129 insertions(+), 5 deletions(-) diff --git a/aucma-base/src/main/java/com/aucma/base/domain/OrderBomInfo.java b/aucma-base/src/main/java/com/aucma/base/domain/OrderBomInfo.java index 1d658ca..8d0a882 100644 --- a/aucma-base/src/main/java/com/aucma/base/domain/OrderBomInfo.java +++ b/aucma-base/src/main/java/com/aucma/base/domain/OrderBomInfo.java @@ -110,6 +110,21 @@ public class OrderBomInfo extends TreeStringEntity { @Excel(name = "销售单据项目") private String vbpos; + /** + * 祖级列表 + */ + private String ancestors; + + @Override + public String getAncestors() { + return ancestors; + } + + @Override + public void setAncestors(String ancestors) { + this.ancestors = ancestors; + } + public void setObjId(Long objId) { this.objId = objId; } diff --git a/aucma-base/src/main/java/com/aucma/base/mapper/OrderBomInfoMapper.java b/aucma-base/src/main/java/com/aucma/base/mapper/OrderBomInfoMapper.java index 62d30a3..1b9cd77 100644 --- a/aucma-base/src/main/java/com/aucma/base/mapper/OrderBomInfoMapper.java +++ b/aucma-base/src/main/java/com/aucma/base/mapper/OrderBomInfoMapper.java @@ -2,6 +2,7 @@ package com.aucma.base.mapper; import java.util.List; import com.aucma.base.domain.OrderBomInfo; +import org.apache.ibatis.annotations.Param; /** * 订单BOMMapper接口 @@ -58,4 +59,30 @@ public interface OrderBomInfoMapper * @return 结果 */ public int deleteOrderBomInfoByObjIds(Long[] objIds); + + + + /** + * 根据ID查询所有子Bom + * @param materialCode + * @return + */ + List selectChildrenBomById(String materialCode); + + /** + * 修改子元素关系 + * + * @param children 子元素 + * @return 结果 + */ + void updateBomChildren(@Param("depts") List children); + + + /** + * 根据BOM编号查询订单BOM + * + * @param materialCode 生产BOM主键 + * @return 订单BOM + */ + public OrderBomInfo selectOrderBomInfoByMaterialCode(@Param("materialCode") String materialCode); } diff --git a/aucma-base/src/main/java/com/aucma/base/service/impl/OrderBomInfoServiceImpl.java b/aucma-base/src/main/java/com/aucma/base/service/impl/OrderBomInfoServiceImpl.java index 416539a..63d3bbb 100644 --- a/aucma-base/src/main/java/com/aucma/base/service/impl/OrderBomInfoServiceImpl.java +++ b/aucma-base/src/main/java/com/aucma/base/service/impl/OrderBomInfoServiceImpl.java @@ -2,7 +2,9 @@ package com.aucma.base.service.impl; import java.util.List; +import com.aucma.common.exception.base.BaseException; import com.aucma.common.utils.DateUtils; +import com.aucma.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aucma.base.mapper.OrderBomInfoMapper; @@ -54,6 +56,16 @@ public class OrderBomInfoServiceImpl implements IOrderBomInfoService @Override public int insertOrderBomInfo(OrderBomInfo orderBomInfo) { + OrderBomInfo bomInfo = orderBomInfoMapper.selectOrderBomInfoByMaterialCode(orderBomInfo.getMaterialCode()); + if (StringUtils.isNotNull(bomInfo)){ + throw new BaseException("该物料编号:" + orderBomInfo.getMaterialCode() + "已存在!"); + } + if (StringUtils.isNotNull(orderBomInfo.getParentId())){ + OrderBomInfo info = orderBomInfoMapper.selectOrderBomInfoByMaterialCode(orderBomInfo.getParentId()); + orderBomInfo.setAncestors(info.getAncestors() + "," + orderBomInfo.getMaterialCode()); + }else { + orderBomInfo.setAncestors(orderBomInfo.getMaterialCode()); + } orderBomInfo.setCreatedTime(DateUtils.getNowDate()); return orderBomInfoMapper.insertOrderBomInfo(orderBomInfo); } @@ -65,9 +77,48 @@ public class OrderBomInfoServiceImpl implements IOrderBomInfoService * @return 结果 */ @Override - public int updateOrderBomInfo(OrderBomInfo orderBomInfo) + public int updateOrderBomInfo(OrderBomInfo orderBomInfoa) { - return orderBomInfoMapper.updateOrderBomInfo(orderBomInfo); + List orderBomInfos = orderBomInfoMapper.selectOrderBomInfoList(new OrderBomInfo()); + for (OrderBomInfo orderBomInfo : orderBomInfos) { + + String parentId = orderBomInfo.getParentId(); + if (StringUtils.isNull(parentId)){ + orderBomInfo.setAncestors(orderBomInfo.getMaterialCode()); + }else { + OrderBomInfo newParentBomInfo = orderBomInfoMapper.selectOrderBomInfoByMaterialCode(parentId); + OrderBomInfo oldBomInfo = orderBomInfoMapper.selectOrderBomInfoByMaterialCode(orderBomInfo.getMaterialCode()); + if (StringUtils.isNotNull(newParentBomInfo) && StringUtils.isNotNull(oldBomInfo)) + { + String newAncestors = newParentBomInfo.getAncestors() + "," + orderBomInfo.getMaterialCode(); + String oldAncestors = oldBomInfo.getAncestors(); + orderBomInfo.setAncestors(newAncestors); + updateBomChildren(orderBomInfo.getMaterialCode(), newAncestors, oldAncestors); + } + } + orderBomInfo.setUpdatedTime(DateUtils.getNowDate()); + orderBomInfoMapper.updateOrderBomInfo(orderBomInfo); + } + return orderBomInfoMapper.updateOrderBomInfo(orderBomInfoa); + } + + /** + * 修改子元素关系 + * + * @param materialCode 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + private void updateBomChildren(String materialCode, String newAncestors, String oldAncestors) { + List children = orderBomInfoMapper.selectChildrenBomById(materialCode); + for (OrderBomInfo child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + orderBomInfoMapper.updateBomChildren(children); + } } /** diff --git a/aucma-base/src/main/resources/mapper/base/OrderBomInfoMapper.xml b/aucma-base/src/main/resources/mapper/base/OrderBomInfoMapper.xml index 0ac25ff..eb586a6 100644 --- a/aucma-base/src/main/resources/mapper/base/OrderBomInfoMapper.xml +++ b/aucma-base/src/main/resources/mapper/base/OrderBomInfoMapper.xml @@ -21,6 +21,7 @@ + @@ -28,7 +29,7 @@ ob.bom_code, ob.material_code, bm.material_name, - ob.material_type, + bm.material_type, ob.standard_amount, ob.parent_id, ob.is_flag, @@ -38,6 +39,7 @@ ob.updated_time, ob.factory_code, ob.sort, + ob.ancestors, ob.vbeln, ob.vbpos from order_bominfo ob @@ -49,7 +51,7 @@ and ob.bom_code = #{bomCode} and ob.material_code = #{materialCode} - and ob.material_name like concat(concat('%', + and bm.material_name like concat(concat('%', #{materialName}), '%') and ob.material_type = #{materialType} @@ -64,6 +66,7 @@ and ob.sort = #{sort} and ob.vbeln = #{vbeln} and ob.vbpos = #{vbpos} + and ob.ancestors like concat(concat('%', #{ancestors}), '%') order by ob.parent_id, ob.sort @@ -73,6 +76,11 @@ where ob.obj_id = #{objId} + + SELECT seq_order_bominfo.NEXTVAL as objId FROM DUAL @@ -95,6 +103,7 @@ sort, vbeln, vbpos, + ancestors, #{objId}, @@ -113,6 +122,7 @@ #{sort}, #{vbeln}, #{vbpos}, + #{ancestors}, @@ -134,6 +144,7 @@ sort = #{sort}, vbeln = #{vbeln}, vbpos = #{vbpos}, + ancestors = #{ancestors}, where obj_id = #{objId} @@ -150,4 +161,21 @@ #{objId} + + + + + update order_bominfo set ancestors = + + when #{item.materialCode} then #{item.ancestors} + + where material_code in + + #{item.materialCode} + + \ No newline at end of file diff --git a/aucma-production/src/main/java/com/aucma/production/service/impl/ProductPlanInfoServiceImpl.java b/aucma-production/src/main/java/com/aucma/production/service/impl/ProductPlanInfoServiceImpl.java index 1a5cfd0..7ad3dbf 100644 --- a/aucma-production/src/main/java/com/aucma/production/service/impl/ProductPlanInfoServiceImpl.java +++ b/aucma-production/src/main/java/com/aucma/production/service/impl/ProductPlanInfoServiceImpl.java @@ -133,7 +133,10 @@ public class ProductPlanInfoServiceImpl implements IProductPlanInfoService BaseBomInfo bomInfo = new BaseBomInfo(); bomInfo.setParentId(baseOrderInfo.getMaterialCode()); List baseBomInfoList = baseBomInfoService.selectBaseBomInfoList(bomInfo); - //若一个工单可下达多计划:则需要根据工单编号和物料编号去重 + if (baseBomInfoList.size() == 0){ + throw new BaseException("请先维护生产BOM信息!"); + } + //-- 若一个工单可下达多计划:则需要根据工单编号和物料编号去重 //检查生产BOM是否满足下计划条件 baseBomInfoService.checkBomInfo(baseBomInfoList);