From 3866c75b855da9c535cfec72ba365aa6aa0e3fd4 Mon Sep 17 00:00:00 2001 From: lihao Date: Tue, 18 Nov 2025 16:16:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E5=8E=8B=E7=94=9F=E4=BA=A7=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E5=AE=A1=E6=A0=B8=E5=90=8E=E8=87=AA=E5=8A=A8=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=BD=AC=E8=BF=90=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nc/bs/mmpac/wr/bp/WrApproveBP.java | 49 ++ .../nc/bs/mmpac/wr/flowbiz/HandOverRule.java | 463 ++++++++++++++++++ 2 files changed, 512 insertions(+) create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/bp/WrApproveBP.java create mode 100644 mmpac/src/private/nc/bs/mmpac/wr/flowbiz/HandOverRule.java diff --git a/mmpac/src/private/nc/bs/mmpac/wr/bp/WrApproveBP.java b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrApproveBP.java new file mode 100644 index 00000000..9c3d26d4 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/bp/WrApproveBP.java @@ -0,0 +1,49 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.wr.bp; + +import nc.bs.mmpac.wr.flowbiz.HandOverRule; +import nc.bs.mmpac.wr.plugin.WrPluginPoint; +import nc.bs.mmpac.wr.rule.audit.WrAuditSetValueRule; +import nc.bs.mmpac.wr.rule.audit.WrAuditValidateForFlowRule; +import nc.bs.mmpac.wr.rule.createpick.WrQueryBackFlushFlagRule; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.util.mmf.framework.gc.GCUpdateBPTemplate; +import nc.vo.mmpac.wr.entity.AggWrVO; + +public class WrApproveBP { + public WrApproveBP() { + } + + public AggWrVO[] audit(AggWrVO[] fullBills, AggWrVO[] originBills) { + GCUpdateBPTemplate bp = new GCUpdateBPTemplate(WrPluginPoint.AUDITEUPDATE); + this.addBeforeRule(bp.getAroundProcesser()); + this.addAfterRule(bp.getAroundProcesser()); + return (AggWrVO[])bp.update(fullBills, originBills); + } + + private void addBeforeRule(CompareAroundProcesser processor) { + ICompareRule wrAuditValidateForFlowRule = new WrAuditValidateForFlowRule(); + processor.addBeforeRule(wrAuditValidateForFlowRule); + IRule wrAuditSetValueRule = new WrAuditSetValueRule(true, 0); + processor.addBeforeRule(wrAuditSetValueRule); + processor.addBeforeRule(new WrQueryBackFlushFlagRule()); + } + + /** @deprecated */ + @Deprecated + private void addAfterRule(CompareAroundProcesser processor) { + processor.addAfterRule(new HandOverRule()); + } + + /** @deprecated */ + @Deprecated + protected IRule getWrAuditAutoBackflushRule() { + return null; + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/wr/flowbiz/HandOverRule.java b/mmpac/src/private/nc/bs/mmpac/wr/flowbiz/HandOverRule.java new file mode 100644 index 00000000..2e7ad397 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/wr/flowbiz/HandOverRule.java @@ -0,0 +1,463 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.bs.mmpac.wr.flowbiz; + +import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.NCLocator; +import nc.bs.uapbd.util.MyHelper; +import nc.bs.uif2.validation.ValidationException; +import nc.bs.uif2.validation.ValidationFailure; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.itf.mmpac.handtake.IHandTakeMaintainService; +import nc.itf.mmpac.handtake.dhandtake.IDHandTakeBusinessService; +import nc.itf.mmpac.handtake.phandtake.IPHandTakeBusinessService; +import nc.itf.mmpac.wr.IWrTranstypeQueryService; +import nc.itf.uap.pf.IPFWorkflowQry; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.md.data.access.NCObject; +import nc.md.model.MetaDataException; +import nc.md.persist.framework.IMDPersistenceQueryService; +import nc.pubitf.mmpac.mo.wr.IMoPubService4Wr; +import nc.pubitf.uapbd.IMaterialPubService_C; +import nc.util.mmf.framework.base.MMNumberUtil; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.util.mmpac.wr.WrTransTypeUtil; +import nc.util.mmpac.wr.WrVOCommonUtil; +import nc.util.mmpac.wr.vochange.WrBusiVOToChangeVO; +import nc.vo.bd.material.prod.MaterialProdVO; +import nc.vo.bd.material.stock.MaterialStockVO; +import nc.vo.ml.NCLangRes4VoTransl; +import nc.vo.mmpac.handtake.consts.CMMLangConstHandTake; +import nc.vo.mmpac.handtake.entity.AggHandTakeVO; +import nc.vo.mmpac.handtake.entity.HandTakeBVO; +import nc.vo.mmpac.handtake.entity.HandTakeHVO; +import nc.vo.mmpac.mo.param.MoQueryParam4Wr; +import nc.vo.mmpac.wr.consts.WrptLangConst; +import nc.vo.mmpac.wr.entity.*; +import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum; +import nc.vo.mmpac.wr.enumeration.WrQualityProcessMethodEnum; +import nc.vo.org.OrgVO; +import nc.vo.org.OrgVOQueryFacade; +import nc.vo.pub.BusinessException; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.pub.lang.UFDouble; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.MapList; +import nccloud.framework.service.ServiceLocator; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; + +public class HandOverRule implements IRule { + private Map configParams; + + + public HandOverRule() { + } + + public void process(AggWrVO[] vos) { + try { + configParams = MyHelper.getConfigParams("gy-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("高压的接口缺少配置"); + } + + IWrTranstypeQueryService queryService= (IWrTranstypeQueryService)NCLocator.getInstance().lookup(IWrTranstypeQueryService.class); + IHandTakeMaintainService handTakeMaintainService= (IHandTakeMaintainService)NCLocator.getInstance().lookup(IHandTakeMaintainService.class); + List list = new ArrayList<>(); + for(AggWrVO vo : vos) { + String pkOrg = vo.getParentVO().getPk_org(); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + if (checkIfOrg(orgCode, configParams)) { + continue; + } + if(!vo.getParentVO().getFbillstatus().equals(WrBillStatusEnum.COMMITE.toInteger())){ + continue; + } + if(queryService.isAuditToProdInBPTransType(new String[]{vo.getParentVO().getVtrantypeid()}).get(vo.getParentVO().getVtrantypeid())){ + throw new BusinessException("交易类型不能是审批即入库"); + + } + WrItemVO[] itemVOS= vo.getChildrenVO(); + List itemlist = new ArrayList(); + for (WrItemVO itemVO : itemVOS) { + IMaterialPubService_C serv = (IMaterialPubService_C)NCLocator.getInstance().lookup(IMaterialPubService_C.class); + Map map = serv.queryMaterialProduceInfoByPks(new String[]{itemVO.getCbmaterialvid()},pkOrg + ,new String[]{"wghxcl","iscreatesonprodorder"}); + if(map.isEmpty()) { + throw new BusinessException("请检查工位半产品是否维护配套子件和完工后续处理生产页签参数"); + // continue; + }else{ + MaterialProdVO materialProdVO=map.get(itemVO.getCbmaterialvid()); + if(materialProdVO == null) { + throw new BusinessException("请检查工位半产品是否维护配套子件和完工后续处理生产页签参数"); + // continue; + } + if(materialProdVO.getWghxcl().equals(1)&& materialProdVO.getIscreatesonprodorder().booleanValue()) { + AggWrVO vo1 = new AggWrVO(); + vo1.setParentVO(vo.getParentVO()); + vo1.setChildrenVO(new WrItemVO[]{itemVO}); + list.add(vo1); + }else{ + throw new BusinessException("请检查工位半产品是否维护配套子件和完工后续处理生产页签参数"); + } + } + } + } + List aggHandTakeVOS= new ArrayList<>(); + for (AggWrVO vo : list) { + try { + this.loadWrQualityVO(vo); + } catch (MetaDataException var18) { + ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0034")); + } + + this.validate(vo); + this.validateSerialManage(new AggWrVO[]{vo}); + + moCloseProcess(new AggWrVO[]{vo}); + WrTransTypeUtil.changeTransTypeCodeDefault(vo.getParentVO()); + AggWrChangeVO[] aggChangeVOs = WrBusiVOToChangeVO.changeOnlyQualityVO(new AggWrVO[]{vo}); + IPHandTakeBusinessService serv = (IPHandTakeBusinessService)NCLocator.getInstance().lookup(IPHandTakeBusinessService.class); + + IDHandTakeBusinessService idHandTakeBusinessService= (IDHandTakeBusinessService)NCLocator.getInstance().lookup(IDHandTakeBusinessService.class); + + + int fprodmode = vo.getParentVO().getFprodmode(); + AggHandTakeVO takeVO =new AggHandTakeVO(); + try { + if (fprodmode == 1) { + takeVO = serv.getPHandOverVO(aggChangeVOs[0]); + } else { + takeVO = idHandTakeBusinessService.getDHandOverVO(aggChangeVOs[0]); + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + takeVO.getParentVO().setAttributeValue("ncanhandnum",takeVO.getParentVO().getNhandovernum()); + + takeVO.getParentVO().setAttributeValue("ncanhandastnum",takeVO.getParentVO().getNhandoverastnum()); + // AggHandTakeVO takeVO = serv.getPHandOverVO(aggChangeVOs[0]); + for (HandTakeBVO handTakeBVO:(HandTakeBVO[])takeVO.getChildrenVO()){ + + if(handTakeBVO.getVrcvmocode().isEmpty() || handTakeBVO.getVrcvpickmcode().isEmpty()){ + throw new BusinessException("没有接受备料计划单号和接受生产订单号,请检查工位半产品是否维护配套子件和完工后续处理生产页签参数"); + } + if(takeVO.getParentVO().getNhandoverastnum().compareTo(UFDouble.ZERO_DBL) ==0){ + throw new BusinessException("完工数量不能为0"); + } + + + handTakeBVO.setNrcvastnum(takeVO.getParentVO().getNhandoverastnum()); + handTakeBVO.setNrcvnum(takeVO.getParentVO().getNhandovernum()); + + handTakeBVO.setNrcvdnum(takeVO.getParentVO().getNhandovernum()); + handTakeBVO.setNrcvdastnum(takeVO.getParentVO().getNhandovernum()); + + String cvwcode=""; + cvwcode=configParams.get("cvwcode"); + String sql = "SELECT pk_stordoc FROM bd_stordoc WHERE code = '"+cvwcode+"' AND dr = 0"; + ArrayList> saleMap = (ArrayList>)new BaseDAO().executeQuery(sql, new MapListProcessor()); + if(saleMap.isEmpty()) { + throw new BusinessException("未配置移送虚拟仓库"); + } + handTakeBVO.setCrcvwhid(saleMap.get(0).get("pk_stordoc").toString()); + handTakeBVO.setFrcvstatus(2); + + if (StringUtils.isEmpty(handTakeBVO.getCrcvfactoryvid()) && StringUtils.isNotEmpty(handTakeBVO.getCrcvfactoryid())) { + for(OrgVO orgVO : OrgVOQueryFacade.getInstance().queryOrgVOByPks(new String[]{handTakeBVO.getCrcvfactoryid()})) { + handTakeBVO.setCrcvfactoryvid(orgVO.getPk_vid()); + } + } + } + aggHandTakeVOS.add(takeVO); + } + + // handTakeMaintainService.insert(aggHandTakeVOS.toArray(new AggHandTakeVO[aggHandTakeVOS.size()])); + try { + this.validate(aggHandTakeVOS.get(0)); + } catch (ValidationException e) { + ExceptionUtils.wrappException(e); + } + try { + this.process(aggHandTakeVOS.get(0)); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } catch (BusinessException e) { + throw new RuntimeException(e); + } + + } + private boolean checkIfOrg(String code, Map configParams) throws BusinessException { + String targetCode = configParams.get("gyOrg"); + if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置组织参数"); + } + String[] orgItem = targetCode.split(","); + for (String orgCode : orgItem) { + if (!orgCode.isEmpty() && orgCode.equals(code)) { + return false; + } + } + return true; + } + + private IPFWorkflowQry getService() { + return (IPFWorkflowQry)NCLocator.getInstance().lookup(IPFWorkflowQry.class); + } + private void loadWrQualityVO(AggWrVO aggWrVO) throws MetaDataException { + WrItemVO[] wrItemVOs = aggWrVO.getChildrenVO(); + + for(WrItemVO wrItemVO : wrItemVOs) { + IMDPersistenceQueryService queryService = (IMDPersistenceQueryService)NCLocator.getInstance().lookup(IMDPersistenceQueryService.class); + String whereSql = " pk_wr_product_q = '" + wrItemVO.getPk_wr_product() + "' and dr = 0"; + NCObject[] qualityNCVOs = queryService.queryBillOfNCObjectByCond(WrQualityVO.class, whereSql, false); + ArrayList qualityVoList = new ArrayList(); + if (qualityNCVOs != null && qualityNCVOs.length > 0) { + if (qualityNCVOs.length > 1) { + ExceptionUtils.wrappBusinessException(NCLangRes4VoTransl.getNCLangRes().getStrByID("5008100_0", "05008100-0035")); + } + + for(NCObject qualityNCVO : qualityNCVOs) { + if (qualityNCVO.getContainmentObject() instanceof WrQualityVO) { + ((WrQualityVO)qualityNCVO.getContainmentObject()).setPk_wr_product(wrItemVO.getPk_wr_product()); + qualityVoList.add((WrQualityVO)qualityNCVO.getContainmentObject()); + } + } + + wrItemVO.setQualityvos((WrQualityVO[])qualityVoList.toArray(new WrQualityVO[0])); + } else { + wrItemVO.setQualityvos((WrQualityVO[])null); + } + } + + } + + private void validate(AggWrVO aggWrVO) { + if (MMValueCheck.isEmpty(aggWrVO)) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getProdinHIT_NOPRODINDATAS()); + } + + WrItemVO[] wrItemVOs = aggWrVO.getChildrenVO(); + if (MMValueCheck.isEmpty(wrItemVOs)) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getProdinHIT_NOPRODINDATAS()); + } + + if (wrItemVOs.length != 1) { + ExceptionUtils.wrappBusinessException(WrptLangConst.ERR_MultyHandOver()); + } + + WrQualityVO[] wrQualityVOs = wrItemVOs[0].getQualityvos(); + if (MMValueCheck.isEmpty(wrQualityVOs)) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getProdinHIT_NOPRODINDATAS()); + } + + if (wrQualityVOs.length != 1) { + ExceptionUtils.wrappBusinessException(WrptLangConst.ERR_MultyHandOver()); + } + + if (!WrQualityProcessMethodEnum.PRODIN.equalsValue(wrQualityVOs[0].getFgprocessmethod())) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getHandtakeHIT_ONLYPRODINCANHANDTAKE()); + } + Map serialFlagMap =isSerialManage(WrVOCommonUtil.groupMaterialByOrg(new AggWrVO[]{aggWrVO})); + WrVO var10001 = aggWrVO.getParentVO(); + if (WrVOCommonUtil.isMapTure(serialFlagMap, var10001 + wrItemVOs[0].getCbmaterialvid())) { + String erroMsg = WrptLangConst.WR__SERIL_NOTSURPORTMSG(new String[]{aggWrVO.getParentVO().getVbillcode(), wrItemVOs[0].getVbrowno()}); + ExceptionUtils.wrappBusinessException(erroMsg); + } + + } + + private void validateSerialManage(AggWrVO[] aggWrVOs) { + Map isSerialMana = isSerialManage(WrVOCommonUtil.groupMaterialByOrg(aggWrVOs)); + AggWrVO aggWrVO = aggWrVOs[0]; + WrItemVO itemvo = aggWrVO.getChildrenVO()[0]; + String pk_org = aggWrVO.getParentVO().getPk_org(); + String matvid = itemvo.getCbmaterialvid(); + if (null != isSerialMana && isSerialMana.keySet().contains(pk_org + matvid) && UFBoolean.TRUE.equals(isSerialMana.get(pk_org + matvid))) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getSERIALMANAGENOTHANDOVER(new String[]{aggWrVO.getParentVO().getVbillcode(), itemvo.getVbrowno()})); + } + + } + + public void moCloseProcess(AggWrVO[] aggWrVOs) { + if (aggWrVOs.length == 1) { + WrItemVO[] itemVOs = (WrItemVO[])aggWrVOs[0].getChildren(WrItemVO.class); + if (null != itemVOs && itemVOs.length == 1) { + Map mapResult = this.isMoCloseMap(aggWrVOs); + if (null != mapResult) { + if (Integer.valueOf(1).equals(aggWrVOs[0].getParentVO().getFprodmode())) { + if (UFBoolean.TRUE.equals(mapResult.get(itemVOs[0].getCbmobid()))) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getMOClose_Msg(new String[]{itemVOs[0].getVbmobillcode(), itemVOs[0].getVbmorowno()})); + } + } else if (Integer.valueOf(2).equals(aggWrVOs[0].getParentVO().getFprodmode()) && UFBoolean.TRUE.equals(mapResult.get(itemVOs[0].getCbmoid()))) { + ExceptionUtils.wrappBusinessException(WrptLangConst.getDMOClose_Msg(new String[]{itemVOs[0].getVbmobillcode()})); + } + } + } + } + + } + public Map isMoCloseMap(AggWrVO[] aggWrVOs) { + Map mapResult = new HashMap(); + if (MMValueCheck.isEmpty(aggWrVOs)) { + return mapResult; + } else { + MapList moidByProdMode = new MapList(); + + for(AggWrVO aggWrVO : aggWrVOs) { + WrItemVO[] itemVOs = (WrItemVO[])aggWrVO.getChildren(WrItemVO.class); + if (!MMValueCheck.isEmpty(itemVOs)) { + for(WrItemVO itemVO : itemVOs) { + if (!MMValueCheck.isEmpty(itemVO.getCbmoid())) { + if (Integer.valueOf(1).equals(aggWrVO.getParentVO().getFprodmode())) { + moidByProdMode.put(1, itemVO.getCbmobid()); + } else if (Integer.valueOf(2).equals(aggWrVO.getParentVO().getFprodmode())) { + moidByProdMode.put(2, itemVO.getCbmoid()); + } + } + } + } + } + + Set>> entrySet = moidByProdMode.entrySet(); + if (MMValueCheck.isEmpty(entrySet)) { + return mapResult; + } else { + List queryParams = new ArrayList(); + MoQueryParam4Wr queryParam = null; + + for(Map.Entry> entry : entrySet) { + if (!MMValueCheck.isEmpty((Integer)entry.getKey()) && !MMValueCheck.isEmpty((Collection)entry.getValue())) { + queryParam = new MoQueryParam4Wr(); + queryParam.setProdMode((Integer)entry.getKey()); + queryParam.setIds((String[])((List)entry.getValue()).toArray(new String[0])); + queryParams.add(queryParam); + } + } + + try { + mapResult = NCLocator.getInstance().lookup(IMoPubService4Wr.class).checkMoClose((MoQueryParam4Wr)queryParams.get(0)); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + return mapResult; + } + } + } + + + + + public Map isSerialManage(MapList matAndOrgMap) { + Set>> entrySet = matAndOrgMap.entrySet(); + Map serialFlagMap = new HashMap(); + + for(Map.Entry> entry : entrySet) { + String org = (String)entry.getKey(); + List matVids = (List)entry.getValue(); + if (!MMValueCheck.isEmpty(org) && !MMValueCheck.isEmpty(matVids)) { + List needLoadMats = new ArrayList(); + + for(String mat : matVids) { + if (!serialFlagMap.keySet().contains(org + mat)) { + needLoadMats.add(mat); + } + } + + Map mrlStockVOArray = queryMaterialStockInfo(needLoadMats, org); + + for(String pk_material : matVids) { + if (null != mrlStockVOArray && mrlStockVOArray.size() >= 0 && null != mrlStockVOArray.get(pk_material)) { + serialFlagMap.put(org + pk_material, ((MaterialStockVO)mrlStockVOArray.get(pk_material)).getSerialmanaflag()); + } else { + serialFlagMap.put(org + pk_material, UFBoolean.FALSE); + } + } + } + } + + return serialFlagMap; + } + + public static Map queryMaterialStockInfo(List matVids, String org) { + Map mrlStockVOArray = null; + if (!MMValueCheck.isEmpty(matVids) && !MMValueCheck.isEmpty(org)) { + try { + mrlStockVOArray = ((IMaterialPubService_C) NCLocator.getInstance().lookup(IMaterialPubService_C.class)).queryMaterialStockInfoByPks((String[])matVids.toArray(new String[0]), org, new String[]{"serialmanaflag", "issinglcheck", "stockbycheck", "sernumunit"}); + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + + return mrlStockVOArray; + } else { + return mrlStockVOArray; + } + } + + + private void validate(AggHandTakeVO aggHandTakeVO) throws ValidationException { + List failure = new ArrayList(); + HandTakeHVO htHead = aggHandTakeVO.getParentVO(); + HandTakeBVO[] htBodys = (HandTakeBVO[])aggHandTakeVO.getChildren(HandTakeBVO.class); + if (!MMValueCheck.isEmpty(htHead) && !MMValueCheck.isEmpty(htBodys)) { + UFDouble canHandOverNum = aggHandTakeVO.getParent().getAttributeValue("ncanhandnum") != null ? new UFDouble(aggHandTakeVO.getParent().getAttributeValue("ncanhandnum").toString()) : null; + UFDouble canHandOverAstNum = aggHandTakeVO.getParent().getAttributeValue("ncanhandastnum") != null ? new UFDouble(aggHandTakeVO.getParent().getAttributeValue("ncanhandastnum").toString()) : null; + UFDouble inNum = UFDouble.ZERO_DBL; + UFDouble inAstNum = UFDouble.ZERO_DBL; + + for(HandTakeBVO htBody : htBodys) { + String[] billNo = new String[]{htBody.getVrowno()}; + if (MMValueCheck.isEmpty(htBody.getCrcvfactoryid())) { + failure.add(new ValidationFailure(CMMLangConstHandTake.getHandoverFactoryEmpty(billNo))); + } + + if (!MMNumberUtil.isGtZero(htBody.getNrcvastnum())) { + failure.add(new ValidationFailure(CMMLangConstHandTake.getHandoverNumZero(billNo))); + } + + if (!MMNumberUtil.isGtZero(htBody.getNrcvnum())) { + failure.add(new ValidationFailure(CMMLangConstHandTake.getHandoverNNumZero(billNo))); + } + + inAstNum = MMNumberUtil.add(new UFDouble[]{inAstNum, htBody.getNrcvastnum()}); + inNum = MMNumberUtil.add(new UFDouble[]{inNum, htBody.getNrcvnum()}); + if (MMNumberUtil.isEqual(inAstNum, canHandOverAstNum) && !MMNumberUtil.isEqual(inNum, canHandOverNum)) { + htBody.setNrcvnum(htBody.getNrcvnum().add(canHandOverNum.sub(inNum))); + inNum = canHandOverNum; + } else if (!MMNumberUtil.isEqual(inAstNum, canHandOverAstNum) && MMNumberUtil.isEqual(inNum, canHandOverNum)) { + htBody.setNrcvastnum(MMNumberUtil.add(new UFDouble[]{htBody.getNrcvastnum(), canHandOverAstNum.sub(inAstNum)})); + inAstNum = canHandOverAstNum; + } + } + + if (MMNumberUtil.isLs(canHandOverNum, inNum)) { + failure.add(new ValidationFailure(CMMLangConstHandTake.getHandoverNumError())); + } + + if (failure.size() > 0) { + throw new ValidationException(failure); + } + } else { + failure.add(new ValidationFailure(CMMLangConstHandTake.getHIT_NOBUSDATA())); + throw new ValidationException(failure); + } + } + + private boolean process(AggHandTakeVO aggHandTakeVO) throws BusinessException { + HandTakeBVO[] htBodys = (HandTakeBVO[])aggHandTakeVO.getChildren(HandTakeBVO.class); + IPHandTakeBusinessService serv = (IPHandTakeBusinessService)NCLocator.getInstance().lookup(IPHandTakeBusinessService.class); + + if (MMValueCheck.isEmpty(htBodys)) { + return false; + } else { + serv.phandover(aggHandTakeVO); + return true; + } + } +}