From cbeb3380b2e97571e16bc28df912b3a812e2b726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=AD=A3=40=E7=94=A8=E5=8F=8B?= Date: Tue, 22 Apr 2025 08:45:08 +0800 Subject: [PATCH] =?UTF-8?q?uapbd=5Fbom=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BC=98=E5=8C=96=5F=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=96=B0=E4=BA=8B=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bom0202/BomBillMaintainServiceImpl.java | 730 ++++++++++++++++++ .../mmbd/bom/APIBomBusinessServiceImpl.java | 32 +- .../bom/bom0202/IBomBillMaintainService.java | 205 +++++ 3 files changed, 965 insertions(+), 2 deletions(-) create mode 100644 uapbd/src/private/nc/impl/bd/bom/bom0202/BomBillMaintainServiceImpl.java create mode 100644 uapbd/src/public/nc/itf/bd/bom/bom0202/IBomBillMaintainService.java diff --git a/uapbd/src/private/nc/impl/bd/bom/bom0202/BomBillMaintainServiceImpl.java b/uapbd/src/private/nc/impl/bd/bom/bom0202/BomBillMaintainServiceImpl.java new file mode 100644 index 0000000..ef29bc6 --- /dev/null +++ b/uapbd/src/private/nc/impl/bd/bom/bom0202/BomBillMaintainServiceImpl.java @@ -0,0 +1,730 @@ +package nc.impl.bd.bom.bom0202; + +import nc.bs.bd.bom.bom0202.bp.BomDataValidatorBP; +import nc.bs.bd.bom.bom0202.bp.BomDeleteBP; +import nc.bs.bd.bom.bom0202.bp.BomInsertBP; +import nc.bs.bd.bom.bom0202.bp.BomInsertCommitBP; +import nc.bs.bd.bom.bom0202.bp.BomPubBP; +import nc.bs.bd.bom.bom0202.bp.BomUpdateBP; +import nc.bs.bd.bom.bom0202.bp.BomUpdateCommitBP; +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.bs.framework.common.NCLocator; +import nc.bs.ml.NCLangResOnserver; +import nc.bs.pubapp.AppBsContext; +import nc.bs.uap.lock.PKLock; +import nc.impl.pubapp.pattern.data.bill.BillUpdate; +import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; +import nc.impl.pubapp.pattern.data.vo.VOQuery; +import nc.itf.bd.bom.bom0202.IBomBillMaintainService; +import nc.itf.bd.bom.bom0202.IBomBillQueryService; +import nc.mmbd.utils.factoryparam.MMBDFactoryParameter; +import nc.util.mmf.framework.base.MMArrayUtil; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.util.mmf.framework.db.MMSqlBuilder; +import nc.util.mmf.framework.gc.GCBillTransferTool; +import nc.vo.bd.bom.bom0202.entity.AggBomVO; +import nc.vo.bd.bom.bom0202.entity.BomActivityVO; +import nc.vo.bd.bom.bom0202.entity.BomItemVO; +import nc.vo.bd.bom.bom0202.entity.BomOutputsVO; +import nc.vo.bd.bom.bom0202.entity.BomUseOrgVO; +import nc.vo.bd.bom.bom0202.entity.BomVO; +import nc.vo.bd.bom.bom0202.enumeration.BomCategoryEnum; +import nc.vo.bd.bom.bom0202.enumeration.BomTypeEnum; +import nc.vo.bd.bom.bom0202.enumeration.FBomBillstatusEnum; +import nc.vo.bd.bom.bom0202.enumeration.VersionTypeEnum; +import nc.vo.bd.bom.bom0202.message.MMBDLangConstBom0202; +import nc.vo.pub.BusinessException; +import nc.vo.pub.VOStatus; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 生产BOM维护的持久化类 + *

+ * 提供了基本的增删改操作 + *

+ * 创建日期:2010-1-15 + * + * @author:zhoujuna + */ +public class BomBillMaintainServiceImpl implements IBomBillMaintainService { + /** + * 构造函数 + */ + + @Override + public void deleteBoms(AggBomVO[] objs) throws BusinessException { + + if (objs == null || objs.length == 0) { + return; + } + try { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(objs); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + BomDeleteBP bp = new BomDeleteBP(); + bp.delete(fullBills); + } catch (Exception ex) { + ExceptionUtils.marsh(ex); + } + } + + @Override + public AggBomVO[] insertBom(AggBomVO[] aggVO) throws BusinessException { + return this.insertBomForEcn(aggVO, true); + } + + @Override + public AggBomVO[] insertBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException { + return this.insertBomForEcnAndRepls(aggVO, checkEcn, null); + } + + @Override + public AggBomVO[] insertBomForEcnAndRepls(AggBomVO[] aggVO, boolean checkEcn, String[] orgins) + throws BusinessException { + // TODO Auto-generated method stub + try { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggVO); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + BomInsertBP bp = new BomInsertBP(); + AggBomVO[] returnVOs = bp.insert(fullBills, checkEcn, orgins, false); + for (int i = 0; i < returnVOs.length; i++) { + aggVO[i].setParent(returnVOs[i].getParent()); + aggVO[i].setChildren(BomItemVO.class, returnVOs[i].getChildrenVO()); + aggVO[i].setChildren(BomOutputsVO.class, returnVOs[i].getChildren(BomOutputsVO.class)); + aggVO[i].setChildren(BomUseOrgVO.class, returnVOs[i].getChildren(BomUseOrgVO.class)); + } + return aggVO; + } catch (Exception e) { + ExceptionUtils.marsh(e); + + } + return null; + } + + @Override + public AggBomVO[] updateBom(AggBomVO[] aggVO) throws BusinessException { + return this.updateBomForEcn(aggVO, true); + } + + @Override + public AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException { + return this.updateBomForBomTree(aggVO, checkEcn, false, false); + } + + @Override + public AggBomVO[] updateBomForEcn(AggBomVO[] aggVO,Map rownoMap, boolean checkEcn) throws BusinessException { + return this.updateBomForBomTree(aggVO,rownoMap,checkEcn, false, false); + } + + @Override + public void validateBom(AggBomVO[] aggvos) throws BusinessException { + BomDataValidatorBP bp = new BomDataValidatorBP(); + bp.validate(aggvos); + + } + + @Override + public AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO, boolean isCheckEcn, boolean isFromBom, boolean isEcn) + throws BusinessException { + if (MMArrayUtil.isEmpty(aggVO)) { + return null; + } + try { + // 检查该BOM是否被删除,因为如果BOM树状维护将BOM删除了,不允许修改该条记录 + Set bomids = new HashSet(); + for (AggBomVO vo : aggVO) { + bomids.add(vo.getPrimaryKey()); + } + Set checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {})); + this.fillActivityVO(aggVO); + if (checkResult != null && checkResult.size() < bomids.size()) { + ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED()); + } + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggVO); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + // 获得修改前vo + AggBomVO[] originBills = transTool.getOriginBills(); + BomUpdateBP bp = new BomUpdateBP(); + return bp.update(fullBills, originBills, isCheckEcn, isFromBom, isEcn); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + return null; + } + + @Override + public AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO,Map rownoMap, boolean isCheckEcn, boolean isFromBom, boolean isEcn) + throws BusinessException { + if (MMArrayUtil.isEmpty(aggVO)) { + return null; + } + try { + // 检查该BOM是否被删除,因为如果BOM树状维护将BOM删除了,不允许修改该条记录 + Set bomids = new HashSet(); + for (AggBomVO vo : aggVO) { + bomids.add(vo.getPrimaryKey()); + } + Set checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {})); + this.fillActivityVO(aggVO); + if (checkResult != null && checkResult.size() < bomids.size()) { + ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED()); + } + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggVO); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + // 获得修改前vo + AggBomVO[] originBills = transTool.getOriginBills(); + BomUpdateBP bp = new BomUpdateBP(); + bp.setRownoMap(rownoMap); + return bp.update(fullBills, originBills, isCheckEcn, isFromBom, isEcn); + } catch (Exception e) { + ExceptionUtils.wrappException(e); + } + return null; + } + + private void fillActivityVO(AggBomVO[] aggVO) { + for (AggBomVO aggBomVO : aggVO) { + + if (MMValueCheck.isNotEmpty(aggBomVO.getChildren(BomActivityVO.class))) { + continue; + } + + // 如果没有编辑过物料作业量,那么Model中数据为空,所以要把重查一下数据。 + String pk_group = aggBomVO.getParent().getAttributeValue(BomVO.PK_GROUP).toString(); + String pk_org = aggBomVO.getParent().getAttributeValue(BomVO.PK_ORG).toString(); + BomActivityVO[] actVOs = null; + try { + actVOs = this.getBomBillQueryService().getBomActivityVOsByBomId(pk_group, pk_org, + aggBomVO.getPrimaryKey()); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + List actList = new ArrayList(); + if (MMArrayUtil.isNotEmpty(actVOs)) { + for (BomActivityVO vo : actVOs) { + if (MMValueCheck.isNotEmpty(vo.getNstandardwknum())) { + vo.setStatus(VOStatus.UNCHANGED); + actList.add(vo); + } + } + aggBomVO.setChildren(BomActivityVO.class, actList.toArray(new BomActivityVO[] {})); + } + } + + } + + @Override + public AggBomVO[] commitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException { + try { + + return new BillUpdate().update(clientFullVOs, originBills); + } catch (Exception e) { + ExceptionUtils.marsh(e); + return null; + + } + } + + @Override + public AggBomVO[] uncommitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException { + try { + + return new BillUpdate().update(clientFullVOs, originBills); + } catch (Exception e) { + ExceptionUtils.marsh(e); + return null; + + } + } + + @Override + public AggBomVO[] auditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException { + Map newBomMap = new HashMap<>(); + for (AggBomVO vo: clientFullVOs){ + BomVO headVO = (BomVO) vo.getParent(); + newBomMap.put(vo.getPrimaryKey(), headVO.getFbillstatus()); + } + try { + // 审批默认BOM后需要把已有的有效默认BOM取消默认 + for (AggBomVO aggvo : originBills) { + if (Integer.valueOf(FBomBillstatusEnum.IAPPROVE).equals(newBomMap.get(aggvo.getPrimaryKey()))){ + BomVO head = (BomVO) aggvo.getParent(); + if (!head.getHbdefault().booleanValue()) { + continue; + } + if (BomCategoryEnum.NORMAL_BOM.equalsValue(head.getHfbomcategory())) { + // 根据组织+物料+物料版本+BOM类型+有效无效更新原来的默认BOM为非默认;审批更新有效的 + ArrayList defaultPks = this.isBomOrCfgBomDefaultVersionExist(head.getPk_org(), + head.getHcmaterialid(), head.getHcmaterialvid(), head.getFbomtype(), + VersionTypeEnum.AVAILABLE.toIntValue()); + if (MMValueCheck.isNotEmpty(defaultPks)) { + defaultPks.remove(head.getCbomid());// pk去掉当前审批的这条数据pk + this.CancelBomOrCfgBomDefaultVersion(defaultPks); + } + } else { + List defaultpks = this.isOrderBomDefaultVersionExist(head.getPk_org(), + head.getVsobillcode(), head.getVsobillno(), head.getFbomtype()); + if (MMValueCheck.isNotEmpty(defaultpks)) { + defaultpks.remove(head.getCbomid());// pk去掉当前审批的这条数据pk + this.CancelBomOrCfgBomDefaultVersion(defaultpks); + } + } + } + } + return new BillUpdate().update(clientFullVOs, originBills); + } catch (Exception e) { + ExceptionUtils.marsh(e); + return null; + + } + } + + @Override + public AggBomVO[] unauditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException { + try { + // 取消审批默认BOM后需要把已有的无效默认BOM取消默认 + for (AggBomVO aggvo : originBills) { + BomVO head = (BomVO) aggvo.getParent(); + if (!head.getHbdefault().booleanValue()) { + continue; + } + /** + * delete by qianzhx 取消审批不做任何的取消默认操作 + */ + // 根据组织+物料+物料版本+BOM类型+有效无效更新原来的默认BOM为非默认;取消审批更新无效的 + // ArrayList defaultPks = + // this.isBomOrCfgBomDefaultVersionExist(head.getPk_org(), + // head.getHcmaterialid(), + // head.getHcmaterialvid(), head.getFbomtype(), + // VersionTypeEnum.UNAVAILABLE.toIntValue()); + // if (MMValueCheck.isNotEmpty(defaultPks)) { + // defaultPks.remove(head.getCbomid()); + // this.CancelBomOrCfgBomDefaultVersion(defaultPks); + // } + } + // 取消审批后把bom版本类型变为无效版本 + for (AggBomVO aggvo : clientFullVOs) { + BomVO head = (BomVO) aggvo.getParent(); + // head.setHbdefault(UFBoolean.FALSE); + head.setHfversiontype(VersionTypeEnum.UNAVAILABLE.toIntValue()); + head.setStatus(VOStatus.UPDATED); + // ArrayList cbomids = new ArrayList(); + // cbomids.add(head.getCbomid());3 + + // this.updateVersiontype(cbomids); + } + return new BillUpdate().update(clientFullVOs, originBills); + } catch (Exception e) { + ExceptionUtils.marsh(e); + return null; + + } + } + + @SuppressWarnings("boxing") + @Override + // 停用 + public AggBomVO[] seal(AggBomVO[] object) throws BusinessException { + + BomVO[] headvo = new BomVO[object.length]; + for (int i = 0; i < object.length; i++) { + headvo[i] = (BomVO) object[i].getParentVO(); + + try { + if (headvo == null || headvo.length == 0) { + return null; + } + // 校验是否启用工程变更管理,是否默认版本 || UFBoolean.TRUE.equals(headvo[0].getHbdefault()) + // 如果是标准BOM启用工程变更,那么不支持修改 + String pkorg = headvo[i].getAttributeValue(BomVO.PK_ORG).toString(); + boolean isNormalBom = headvo[i].getHfbomcategory() == BomCategoryEnum.NORMAL_BOM.toIntValue(); + //1130需求变更,定制BOM不走工程变更 + boolean isCustBom=MMValueCheck.isTrue(headvo[i].getHbcustomized()); + // 配置BOM不支持ECN,所以先对BOM类型做判断 + if (!isCustBom&&isNormalBom && !headvo[i].getFbomtype().equals(BomTypeEnum.CONFIGBOM.toIntValue()) + && this.isMMECN001Control(pkorg)) { + ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportUnEditWhenMMDB001Control()); + return null; + } + if (headvo[i].getFbillstatus().intValue() != FBomBillstatusEnum.APPROVE.toIntValue()) { + ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null, + "01014362-0465", null, new String[] { headvo[i].getVbillcode() }) +// .getStrByID("1014362_0","01014362-0465")/* BOM状态不是审批通过,无法启用/停用! */ + ); + } else if (headvo[i].getHfversiontype().intValue() == VersionTypeEnum.UNAVAILABLE.toIntValue()) { + ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null, + "01014362-0466", null, new String[] { headvo[i].getVbillcode() }) +// getStrByID("1014362_0","01014362-0466")/* BOM已经是无效版本,无需停用! */ + ); + } + // else if (UFBoolean.TRUE.equals(headvo[0].getHbdefault())) { + // ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportEditWhenbdefault()); + // return null; + // } + headvo[i].setHbdefault(UFBoolean.FALSE); + headvo[i].setHfversiontype(VersionTypeEnum.UNAVAILABLE.toIntValue()); + headvo[i].setStatus(VOStatus.UPDATED); + + } catch (Exception e) { + ExceptionUtils.marsh(e); + } + } + // 持久化 + BillTransferTool transferTool = new BillTransferTool(object); + AggBomVO[] originBills = transferTool.getOriginBills(); + BillUpdate bo = new BillUpdate(); + bo.update(object, originBills); + PKLock.getInstance().releaseDynamicLocks(); + + return object; + // return null; + + } + + @SuppressWarnings("boxing") + @Override + public AggBomVO[] unSeal(AggBomVO[] object) throws BusinessException { + + BomVO[] headvo = new BomVO[object.length]; + for (int i = 0; i < object.length; i++) { + headvo[i] = (BomVO) object[i].getParentVO(); + try { + if (headvo == null || headvo.length == 0) { + return null; + } + // 校验是否启用工程变更管理 + // 如果是正常非订单BOM,启用工程变更后,不支持修改 + String pkorg = headvo[i].getAttributeValue(BomVO.PK_ORG).toString(); + boolean isNormalBom = headvo[i].getHfbomcategory() == BomCategoryEnum.NORMAL_BOM.toIntValue(); + //1130需求变更,定制BOM不走工程变更 + boolean isCustBom=MMValueCheck.isTrue(headvo[i].getHbcustomized()); + if (!isCustBom&&isNormalBom && !headvo[i].getFbomtype().equals(BomTypeEnum.CONFIGBOM.toIntValue()) + && this.isMMECN001Control(pkorg)) { + ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportUnEditWhenMMDB001Control()); + return null; + } + if (headvo[i].getFbillstatus().intValue() != FBomBillstatusEnum.APPROVE.toIntValue()) { + ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null, + "01014362-0465", null, new String[] { headvo[i].getVbillcode() }) + +// getStrByID("1014362_0","01014362-0465")/* BOM状态不是审批通过,无法启用/停用! */ + ); + } else if (headvo[i].getHfversiontype().intValue() == VersionTypeEnum.AVAILABLE.toIntValue()) { + ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null, + "01014362-0467", null, new String[] { headvo[i].getVbillcode() }) + +// getStrByID("1014362_0","01014362-0467")/* BOM已经是有效版本,无需启用! */ + ); + } + headvo[i].setHfversiontype(VersionTypeEnum.AVAILABLE.toIntValue()); + headvo[i].setStatus(VOStatus.UPDATED); + + } catch (Exception e) { + ExceptionUtils.marsh(e); + } + } + // 持久化 + BillTransferTool transferTool = new BillTransferTool(object); + AggBomVO[] originBills = transferTool.getOriginBills(); + BillUpdate bo = new BillUpdate(); + bo.update(object, originBills); + PKLock.getInstance().releaseDynamicLocks(); + return object; + + } + + private boolean isMMECN001Control(String pk_org) { + boolean isMMECN001_Contrl = false; + isMMECN001_Contrl = MMBDFactoryParameter.isAlterCtrl(pk_org); + return isMMECN001_Contrl; + } + + @Override + public AggBomVO[] insertBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) + throws BusinessException { + try { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggvos); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + BomInsertBP bp = new BomInsertBP(); + AggBomVO[] returnVOs = bp.insert(fullBills, isCheckEcn, isOnApprove); + for (int i = 0; i < returnVOs.length; i++) { + aggvos[i].setParent(returnVOs[i].getParent()); + aggvos[i].setChildren(BomItemVO.class, returnVOs[i].getChildrenVO()); + aggvos[i].setChildren(BomOutputsVO.class, returnVOs[i].getChildren(BomOutputsVO.class)); + aggvos[i].setChildren(BomUseOrgVO.class, returnVOs[i].getChildren(BomUseOrgVO.class)); + } + return aggvos; + } catch (Exception e) { + ExceptionUtils.marsh(e); + + } + return null; + } + + @Override + public AggBomVO[] insertCommitBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException { + BomInsertCommitBP bp = new BomInsertCommitBP(); + AggBomVO[] result = bp.insertCommit(aggvos,isCheckEcn,isOnApprove); + return result; + } + + @Override + public AggBomVO[] insertCommitBomWithParam_RequiresNew(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException { + BomInsertCommitBP bp = new BomInsertCommitBP(); + AggBomVO[] result = bp.insertCommit(aggvos,isCheckEcn,isOnApprove); + return result; + } + @Override + public AggBomVO[] updateBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn, + boolean isOnApprove) throws BusinessException { + if (MMArrayUtil.isEmpty(aggvos)) { + return null; + } + try { + // 检查该BOM是否被删除,因为如果BOM树状维护将BOM删除了,不允许修改该条记录 + Set bomids = new HashSet(); + for (AggBomVO vo : aggvos) { + bomids.add(vo.getPrimaryKey()); + } + Set checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {})); + if (checkResult != null && checkResult.size() < bomids.size()) { + ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED()); + } + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggvos); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + // 获得修改前vo + AggBomVO[] originBills = transTool.getOriginBills(); + BomUpdateBP bp = new BomUpdateBP(); + return bp.update(fullBills, originBills, isCheckEcn, isOnApprove, isFromBom, isecn); + } catch (Exception e) { + ExceptionUtils.marsh(e); + } + return null; + } + + @Override + public AggBomVO[] updateCommitBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn, boolean isOnApprove) throws BusinessException { + BomUpdateCommitBP bp = new BomUpdateCommitBP(); + AggBomVO[] result = bp.updateCommit(aggvos,isFromBom,isecn,isCheckEcn,isOnApprove); + return result; + } + + @Override + public void deleteBomsWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) + throws BusinessException { + + if (aggvos == null || aggvos.length == 0) { + return; + } + try { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggvos); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + BomDeleteBP bp = new BomDeleteBP(); + bp.delete(fullBills, isCheckEcn, isOnApprove); + } catch (Exception ex) { + ExceptionUtils.marsh(ex); + } + } + + /** + * 根据bom主键,更新默认字段为否 + * + * @param cbomid + */ + private void CancelBomOrCfgBomDefaultVersion(List cbomids) { + if (MMValueCheck.isEmpty(cbomids)) { + return; + } + BaseDAO dao = new BaseDAO(); + MMSqlBuilder sql = new MMSqlBuilder(); + sql.append(" update "); + sql.append(BomVO.TABLE_NAME); + sql.set(); + sql.append(BomVO.HBDEFAULT, UFBoolean.FALSE); + sql.where(); + sql.append(BomVO.CBOMID, cbomids); + try { + dao.executeUpdate(sql.toString()); + } catch (DAOException e) { + ExceptionUtils.wrappException(e); + } + } + + /** + * 根据bom主键,更新版本类型为无效版本 + * + * @param cbomid + */ + private void updateVersiontype(ArrayList cbomids) { + if (MMValueCheck.isEmpty(cbomids)) { + return; + } + BaseDAO dao = new BaseDAO(); + MMSqlBuilder sql = new MMSqlBuilder(); + sql.append(" update "); + sql.append(BomVO.TABLE_NAME); + sql.set(); + sql.append(BomVO.HFVERSIONTYPE, VersionTypeEnum.UNAVAILABLE.toIntValue()); + sql.where(); + sql.append(BomVO.CBOMID, cbomids); + try { + dao.executeUpdate(sql.toString()); + } catch (DAOException e) { + ExceptionUtils.wrappException(e); + } + } + + private List isOrderBomDefaultVersionExist(String pk_org, String vsobillcode, String vsobillno, + Integer fbomtype) { + if (fbomtype == 3) { + return null; + } + if (MMValueCheck.isEmpty(vsobillcode) || MMValueCheck.isEmpty(vsobillno)) { + return null; + } + VOQuery queryService = new VOQuery(BomVO.class, new String[] { BomVO.CBOMID }); + MMSqlBuilder sql = new MMSqlBuilder(); + sql.and(); + sql.append(BomVO.PK_GROUP, AppBsContext.getInstance().getPkGroup()); + sql.and(); + sql.append(BomVO.PK_ORG, pk_org); + sql.and(); + sql.append(BomVO.VSOBILLCODE, vsobillcode); + sql.and(); + sql.append(BomVO.VSOBILLNO, vsobillno); + sql.and(); + sql.append(BomVO.FBOMTYPE, fbomtype.intValue()); + sql.and(); + sql.append(BomVO.HFBOMCATEGORY, 2); + sql.and(); + sql.append(BomVO.HBDEFAULT, "Y"); + sql.and(); + sql.append(BomVO.HFVERSIONTYPE, VersionTypeEnum.AVAILABLE.toIntValue());// 查询有效的bom + sql.appendDr(); + + BomVO[] bomVOs = queryService.query(sql.toString(), null); + List result = new ArrayList(); + for (BomVO bomVO : bomVOs) { + result.add(bomVO.getCbomid()); + } + if (MMValueCheck.isNotEmpty(result)) { + return result; + } + return null; + + } + + /** + * 判断指定条件的BOM/配置BOM的无效/有效的默认版本是否存在 + * + * @param pkGroup 集团主键 + * @param pkOrg 组织主键 + * @param materialVid 物料版本主键 + * @param version Bom版本号 + * @return 已存在BOM无效默认版本pk + */ + public ArrayList isBomOrCfgBomDefaultVersionExist(String pkOrg, String cmaterialoid, String materialVid, + Integer bomtype, Integer hfversiontype) { + VOQuery queryService = new VOQuery(BomVO.class, new String[] { BomVO.CBOMID }); + MMSqlBuilder sql = new MMSqlBuilder(); + sql.and(); + sql.append(BomVO.PK_GROUP, AppBsContext.getInstance().getPkGroup()); + sql.and(); + sql.append(BomVO.PK_ORG, pkOrg); + sql.and(); + sql.append(BomVO.HCMATERIALID, cmaterialoid); + if (materialVid == null) { + sql.and(); + sql.append(BomVO.HCMATERIALVID, "~"); + } else { + sql.and(); + sql.append(BomVO.HCMATERIALVID, materialVid); + } + sql.and(); + sql.append(BomVO.FBOMTYPE, bomtype); + sql.and(); + sql.append(BomVO.HFBOMCATEGORY, 1); + sql.and(); + sql.append(BomVO.HBDEFAULT, "Y"); + sql.and(); + sql.append(BomVO.HBCUSTOMIZED, "N");// 是否定制值为否 + sql.and(); + sql.append(BomVO.HFVERSIONTYPE, hfversiontype); + sql.appendDr(); + + BomVO[] bomVOs = queryService.query(sql.toString(), null); + ArrayList cbomids = new ArrayList(); + if (MMValueCheck.isNotEmpty(bomVOs)) { + for (BomVO bomvo : bomVOs) { + if (MMValueCheck.isNotEmpty(bomvo)) { + cbomids.add(bomvo.getCbomid()); + } + } + return cbomids; + } + return null; + + } + + @Override + public void updateBomForBomCopy0214(AggBomVO[] aggvos, AggBomVO[] origins, boolean isCheckEcn) { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggvos); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + // 获得修改前vo + AggBomVO[] originBills = transTool.getOriginBills(); + Set ids = new HashSet(); + for (AggBomVO aggBomVO : originBills) { + ids.add(aggBomVO.getPrimaryKey()); + } + + BomUpdateBP updatebp = new BomUpdateBP(); + updatebp.update(fullBills, origins, false, false, false, ids.toArray(new String[0]), false); + + } + + private IBomBillQueryService getBomBillQueryService() { + return NCLocator.getInstance().lookup(IBomBillQueryService.class); + } + + @Override + public void deleteCustomizedBom(AggBomVO[] aggvos) throws BusinessException { + if (aggvos == null || aggvos.length == 0) { + return; + } + try { + // 加锁 + 检查ts + GCBillTransferTool transTool = new GCBillTransferTool(aggvos); + // 补全前台VO + AggBomVO[] fullBills = transTool.getClientFullInfoBill(); + BomDeleteBP bp = new BomDeleteBP(); + bp.deleteCustomizedBom(fullBills); + } catch (Exception ex) { + ExceptionUtils.marsh(ex); + } + } + +} diff --git a/uapbd/src/private/nccloud/api/impl/mmbd/bom/APIBomBusinessServiceImpl.java b/uapbd/src/private/nccloud/api/impl/mmbd/bom/APIBomBusinessServiceImpl.java index 024f16d..6948466 100644 --- a/uapbd/src/private/nccloud/api/impl/mmbd/bom/APIBomBusinessServiceImpl.java +++ b/uapbd/src/private/nccloud/api/impl/mmbd/bom/APIBomBusinessServiceImpl.java @@ -143,9 +143,37 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService { if (commitAggvoList.isEmpty() && addAggvoList.isEmpty()) { return ResultMessageUtil.exceptionToJSON("BOM保存失败,不存在单据状态不为【空/自由/审批通过】的数据", "999"); } else if (commitAggvoList.isEmpty() && !addAggvoList.isEmpty()) { - result = service.insertBom((AggBomVO[]) list.toArray(new AggBomVO[0])); + result = service.insertBom((AggBomVO[]) addAggvoList.toArray(new AggBomVO[0])); } else if (!commitAggvoList.isEmpty() && addAggvoList.isEmpty()) { - result = service.insertCommitBomWithParam((AggBomVO[]) list.toArray(new AggBomVO[0]), true, true); + List newAggVOList = new ArrayList<>(); + if("plm".equals(userCode)){ + for(AggBomVO aggvo:commitAggvoList){ + result = service.insertCommitBomWithParam(new AggBomVO[]{aggvo}, true, true); + newAggVOList.add(result[0]); + } + return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "BOM保存成功"); + }else if("dlkght".equals(userCode)){ + for(AggBomVO aggvo:commitAggvoList){ + try { + result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[]{aggvo}, true, true); + newAggVOList.add(result[0]); + }catch (Exception e){ + if(e.getMessage()!=null){ + if(e.getMessage().length()>100){ + aggvo.getParent().setAttributeValue("hvdef2",e.getMessage().substring(0,100)); + }else{ + aggvo.getParent().setAttributeValue("hvdef2",e.getMessage().substring(0,e.getMessage().length()-1)); + } + }else{ + Throwable unmarsh = ExceptionUtils.unmarsh(e); + aggvo.getParent().setAttributeValue("hvdef2", "异常"+unmarsh.getMessage()); + } + + newAggVOList.add(aggvo); + } + } + return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "100999","BOM保存提交成功部分成功部分失败",true); + } } else { return ResultMessageUtil.exceptionToJSON("BOM保存失败,新增不允许单据状态自由或者空和审批通过同时存在", "999"); } diff --git a/uapbd/src/public/nc/itf/bd/bom/bom0202/IBomBillMaintainService.java b/uapbd/src/public/nc/itf/bd/bom/bom0202/IBomBillMaintainService.java new file mode 100644 index 0000000..4bc60a9 --- /dev/null +++ b/uapbd/src/public/nc/itf/bd/bom/bom0202/IBomBillMaintainService.java @@ -0,0 +1,205 @@ +package nc.itf.bd.bom.bom0202; + +import nc.vo.bd.bom.bom0202.entity.AggBomVO; +import nc.vo.pub.BusinessException; + +import java.util.Map; + +/** + * 生产bom维护的持久化接口 + *

+ * 继承自默认的IAggMaintainService + *

+ * 创建日期:2010-1-15 有事务的服务 + * + * @author:zhoujuna + */ +public interface IBomBillMaintainService { + /** + * BOM批量删除接口 + * + * @param aggvos + * @throws BusinessException + */ + void deleteBoms(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM新增接口 + * + * @param aggvos 新增BOM数组 + * @return 保存后的BOM + * @throws BusinessException + */ + AggBomVO[] insertBom(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM新增接口(带参数:是否支持ECN,是否支持审批流) + * + * @param aggvos + * @param isCheckEcn + * @param isOnApprove + * @return + * @throws BusinessException + */ + AggBomVO[] insertBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException; + + + AggBomVO[] insertCommitBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException; + AggBomVO[] insertCommitBomWithParam_RequiresNew(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException; + + /** + * BOM修改接口 + * + * @param aggvos 修改BOM数组 + * @return 保存后的BOM数组 + * @throws BusinessException + */ + AggBomVO[] updateBom(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM修改接口 (带参数:是否支持ECN;是否支持审批流) + * + * @param aggvos + * @return + * @throws BusinessException + */ + AggBomVO[] updateBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn, + boolean isOnApprove) throws BusinessException; + + AggBomVO[] updateCommitBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn, + boolean isOnApprove) throws BusinessException; + + /** + * Bom提供给工程变更单的对话框在点击确定后进行数据校验 + * + * @param aggvos + * @throws BusinessException + */ + void validateBom(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM新增接口,是否需要考虑检查启用工程变更 + * + * @param aggvos + * @param checkEcn + * @return + * @throws BusinessException + */ + AggBomVO[] insertBomForEcn(AggBomVO[] aggvos, boolean checkEcn) throws BusinessException; + + /** + * BOM新增接口,是否需要考虑检查启用工程变更,替代方案替代物料是否分配 + * + * @param aggvos + * @param checkEcn + * @return + * @throws BusinessException + */ + AggBomVO[] insertBomForEcnAndRepls(AggBomVO[] aggvos, boolean checkEcn, String[] orgins) throws BusinessException; + + /** + * BOM修改接口,是否需要考虑检查启用工程变更 + * + * @param aggvos 修改BOM数组 + * @return 保存后的BOM数组 + * @throws BusinessException + */ + AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException; + + AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, Map rownoMap, boolean checkEcn) throws BusinessException; + + + /** + * BOM修改接口,是否需要考虑来自bom和bomtree修改保存 + * + * @param aggVO 修改BOM数组 + * @param 保存时是否判断启用工程变更 + * @param 是否来自bom + * @param 界面录入的组织是否启用工程变更 + * @return 保存后的BOM数组 + * @throws BusinessException + */ + AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO, boolean checkEcn, boolean isFromBom, boolean isEcn) + throws BusinessException; + + AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO,Map rownoMap, boolean checkEcn, boolean isFromBom, boolean isEcn) + throws BusinessException; + + /** + * 提交BOM + * + * @param clientFullVOs + * @param originBills + * @return + * @throws BusinessException + */ + public AggBomVO[] commitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException; + + /** + * 收回BOM + * + * @param clientFullVOs + * @param originBills + * @return + * @throws BusinessException + */ + public AggBomVO[] uncommitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException; + + /** + * 审批BOM + * + * @param clientFullVOs + * @param originBills + * @return + * @throws BusinessException + */ + public AggBomVO[] auditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException; + + /** + * 弃审BOM + * + * @param clientFullVOs + * @param originBills + * @return + * @throws BusinessException + */ + public AggBomVO[] unauditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException; + + /** + * BOM的停用 + * + * @param aggvos + * @return + * @throws BusinessException + */ + AggBomVO[] seal(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM的启用 + * + * @param aggvos + * @return + * @throws BusinessException + */ + AggBomVO[] unSeal(AggBomVO[] aggvos) throws BusinessException; + + /** + * BOM批量删除接口(带参数:是否支持ECN,是否支持审批流) + * + * @param aggvos + */ + void deleteBomsWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException; + + /** + * 由于业务日志需要,调整跨组织bom复制覆盖原版本走该接口 + * + * @param aggvos + * @param origins + * @param isCheckEcn + */ + void updateBomForBomCopy0214(AggBomVO[] aggvos, AggBomVO[] origins, boolean isCheckEcn); + /** + * 定制BOM删除 + */ + void deleteCustomizedBom(AggBomVO[] aggvos)throws BusinessException;; +}