|  | @@ -0,0 +1,121 @@
 | 
	
		
			
				|  |  | +package nc.bs.mmpac.pmo.pac0002.rule;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import java.util.Map;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import nc.bs.framework.common.NCLocator;
 | 
	
		
			
				|  |  | +import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService;
 | 
	
		
			
				|  |  | +import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil;
 | 
	
		
			
				|  |  | +import nc.impl.pubapp.pattern.rule.IRule;
 | 
	
		
			
				|  |  | +import nc.itf.uap.busibean.SysinitAccessor;
 | 
	
		
			
				|  |  | +import nc.itf.uap.pf.IPfExchangeService;
 | 
	
		
			
				|  |  | +import nc.itf.uap.pf.busiflow.PfButtonClickContext;
 | 
	
		
			
				|  |  | +import nc.util.mmf.framework.base.MMArrayUtil;
 | 
	
		
			
				|  |  | +import nc.util.mmf.framework.base.MMCollectionUtil;
 | 
	
		
			
				|  |  | +import nc.util.mmf.framework.base.MMValueCheck;
 | 
	
		
			
				|  |  | +import nc.vo.mmpac.pickm.entity.AggPickmVO;
 | 
	
		
			
				|  |  | +import nc.vo.mmpac.pickm.param.PickmTransParam;
 | 
	
		
			
				|  |  | +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
 | 
	
		
			
				|  |  | +import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
 | 
	
		
			
				|  |  | +import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
 | 
	
		
			
				|  |  | +import nc.vo.pub.BusinessException;
 | 
	
		
			
				|  |  | +import nc.vo.pub.lang.UFBoolean;
 | 
	
		
			
				|  |  | +import nc.vo.pubapp.pattern.exception.ExceptionUtils;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 只在审核时使用,审核时生产备料计划
 | 
	
		
			
				|  |  | + * 
 | 
	
		
			
				|  |  | + * @since 6.5
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +public class PMOInsertPickmRule implements IRule<PMOAggVO> {
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void process(PMOAggVO[] aggvos) {
 | 
	
		
			
				|  |  | +        PMOAggVO[] vos = PMOBPUtil.getApprovedVOs(aggvos);
 | 
	
		
			
				|  |  | +        if (MMValueCheck.isEmpty(vos)) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +    	/************add by ZTH  2022-11-16 外部交换平台生产订单不允许自动生成备料计划**************************/
 | 
	
		
			
				|  |  | +        PMOItemVO  bodyvo=vos[0].getChildrenVO()[0];
 | 
	
		
			
				|  |  | +        String vnote =bodyvo.getVdef10();// Y审批不自动生成备料计划
 | 
	
		
			
				|  |  | +        if("Y".equals(vnote)){
 | 
	
		
			
				|  |  | +        	 return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        /****************************************************************************************************/
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        this.createPickms(vos);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    private void createPickms(PMOAggVO[] vos) {
 | 
	
		
			
				|  |  | +        if (MMArrayUtil.isEmpty(vos)) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<PMOAggVO> aggVOList = new ArrayList<PMOAggVO>();
 | 
	
		
			
				|  |  | +        PMOAggVO newAggVO = null;
 | 
	
		
			
				|  |  | +        // 取备料计划信息
 | 
	
		
			
				|  |  | +        List<PickmTransParam> paraList = new ArrayList<PickmTransParam>();
 | 
	
		
			
				|  |  | +        for (PMOAggVO aggVO : vos) {
 | 
	
		
			
				|  |  | +            PMOItemVO[] itemVOs = (PMOItemVO[]) aggVO.getChildren(PMOItemVO.class);
 | 
	
		
			
				|  |  | +            if (MMArrayUtil.isEmpty(itemVOs)) {
 | 
	
		
			
				|  |  | +                continue;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            for (PMOItemVO itemVO : itemVOs) {
 | 
	
		
			
				|  |  | +                // 组装参数查询是否存在备料计划
 | 
	
		
			
				|  |  | +                PickmTransParam para = new PickmTransParam();
 | 
	
		
			
				|  |  | +                // para.setSourceBillID(head.getCpmohid());
 | 
	
		
			
				|  |  | +                para.setSourceBillRowID(itemVO.getCmoid());
 | 
	
		
			
				|  |  | +                paraList.add(para);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (paraList.size() == 0) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            // 查询是否存在备料计划
 | 
	
		
			
				|  |  | +            Map<String, UFBoolean> havepickmMap =
 | 
	
		
			
				|  |  | +                    PMOBPService.getIPpickmQueryServiceForPmo().queryHavePickmByMO(
 | 
	
		
			
				|  |  | +                            paraList.toArray(new PickmTransParam[paraList.size()]));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            for (PMOAggVO aggVO : vos) {
 | 
	
		
			
				|  |  | +                PMOItemVO[] itemVOs = (PMOItemVO[]) aggVO.getChildren(PMOItemVO.class);
 | 
	
		
			
				|  |  | +                if (MMArrayUtil.isEmpty(itemVOs)) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                for (PMOItemVO itemVO : itemVOs) {
 | 
	
		
			
				|  |  | +                    // 取出不存在备料计划的产品行进行进行生成
 | 
	
		
			
				|  |  | +                    if (havepickmMap.containsKey(itemVO.getCmoid())
 | 
	
		
			
				|  |  | +                            && UFBoolean.FALSE.equals(havepickmMap.get(itemVO.getCmoid()))) {
 | 
	
		
			
				|  |  | +                        newAggVO = new PMOAggVO();
 | 
	
		
			
				|  |  | +                        newAggVO.setParent(aggVO.getParent());
 | 
	
		
			
				|  |  | +                        newAggVO.setChildren(PMOItemVO.class, new PMOItemVO[] {
 | 
	
		
			
				|  |  | +                            itemVO
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                        aggVOList.add(newAggVO);
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        catch (BusinessException e1) {
 | 
	
		
			
				|  |  | +            ExceptionUtils.wrappException(e1);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (MMCollectionUtil.isEmpty(aggVOList)) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        nc.itf.uap.pf.IPfExchangeService ef = NCLocator.getInstance().lookup(IPfExchangeService.class);
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            AggPickmVO[] pickms =
 | 
	
		
			
				|  |  | +                    (AggPickmVO[]) ef.runChangeDataAryNeedClassify("55A2", "55A3", aggVOList.toArray(new PMOAggVO[0]),
 | 
	
		
			
				|  |  | +                            null, PfButtonClickContext.ClassifyByItfdef);
 | 
	
		
			
				|  |  | +            PMOBPService.getIPpickmBusinessServiceForPmo().insertPickmForMO(pickms);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        catch (BusinessException e) {
 | 
	
		
			
				|  |  | +            ExceptionUtils.wrappException(e);
 | 
	
		
			
				|  |  | +            // ExceptionUtils.wrappBusinessException(PMOConstLang.getMSG_RULE_INSERTPICKM_ERROR() + e.getMessage());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |