diff --git a/mmpps/src/public/nc/rule/mmpps/plo/PloProdDeptRule.java b/mmpps/src/public/nc/rule/mmpps/plo/PloProdDeptRule.java new file mode 100644 index 0000000..a41460f --- /dev/null +++ b/mmpps/src/public/nc/rule/mmpps/plo/PloProdDeptRule.java @@ -0,0 +1,152 @@ +package nc.rule.mmpps.plo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import nc.bs.framework.common.NCLocator; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.pubitf.org.IDeptPubService; +import nc.util.mmf.busi.service.MaterialPubService; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.bd.material.prod.MaterialProdVO; +import nc.vo.mmpps.mps0202.AggregatedPoVO; +import nc.vo.mmpps.mps0202.PoSourceEnum; +import nc.vo.mmpps.mps0202.PoVO; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmItemVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.pubitf.mmpac.pickm.pub.IPickmPubQueryService; + + +/** + * 适配2312MPR运算时把合同编号合同销售订单号标前项目号带到计划订单 + * zhangxinah + */ + +public class PloProdDeptRule extends Object implements IRule { + public void process(AggregatedPoVO[] vos) { + if (null == vos) { + return; + } + + ArrayList vsrcbidList = new ArrayList<>(); + Map> map = new HashMap>(); + for (AggregatedPoVO agg : vos) { + PoVO plo = agg.getParentVO(); + String vid = plo.getCmaterialvid(); + String stockorgid = plo.getCstockorgid(); + String stockorgvid = plo.getCstockorgvid(); + String prodDeptid = plo.getCproddeptid(); + String prodDeptvid = plo.getCproddeptvid(); + Integer posource = plo.getFposource(); + if (PoSourceEnum.COMPUT == posource && MMValueCheck.isEmpty(prodDeptid) && MMValueCheck.isEmpty(prodDeptvid) + && MMValueCheck.isNotEmpty(stockorgid) && MMValueCheck.isNotEmpty(stockorgvid)) { + List vids = (List) map.get(stockorgid); + if (null == vids) { + List list = new ArrayList(); + list.add(vid); + map.put(stockorgid, list); + } else { + + vids.add(vid); + } + } + String vsrcbid = plo.getVsrcbid();// 来源单据表体主键 + int fdemandbill = plo.getFdemandbill();// 需求来源 + if (PoSourceEnum.COMPUT == posource && fdemandbill == 1) { + vsrcbidList.add(vsrcbid); + } + } + if (vsrcbidList != null && vsrcbidList.size() > 0) { + String[] vsrcbids = vsrcbidList.toArray(new String[vsrcbidList.size()]); + Map pickmVOMap; + try { + pickmVOMap = NCLocator.getInstance().lookup(IPickmPubQueryService.class).queryPickm4Issue(vsrcbids); + } catch (BusinessException e) { + throw new RuntimeException(e); + } + pickmVOMap.getClass(); + for (AggregatedPoVO agg : vos) { + PoVO plo = agg.getParentVO(); + String vsrcbid = plo.getVsrcbid();// 来源单据表体主键 + AggPickmVO aggPickmVOData = pickmVOMap.get(vsrcbid); + if (aggPickmVOData != null) { + PickmItemVO[] children = (PickmItemVO[]) aggPickmVOData.getChildren(PickmItemVO.class); + String vbdef5 = "";// 合同编号 + String vbdef6 = "";// 合同销售订单号 + String vbdef7 = "";// 标前项目号 + for (PickmItemVO pickmItemVO : children) { + if (pickmItemVO.getCpickm_bid().equals(vsrcbid)) { + vbdef5 = pickmItemVO.getVbdef5();// 合同编号 + vbdef6 = pickmItemVO.getVbdef6();// 合同销售订单号 + vbdef7 = pickmItemVO.getVbdef7();// 标前项目号 + } + } + plo.setVdef2(vbdef5);// 合同编号 + plo.setVdef3(vbdef6);// 合同销售订单号 + plo.setVdef4(vbdef7);// 标前项目号 + } + } + } + + Set stockorgids = map.keySet(); + Iterator i = stockorgids.iterator(); + while (i.hasNext()) { + String key = (String) i.next(); + List vids = (List) map.get(key); + Map results = MaterialPubService.queryMaterialProduceInfoByPks( + (String[]) vids.toArray(new String[0]), key, new String[] { "pk_prodeptdoc" }); + + for (AggregatedPoVO agg : vos) { + PoVO plo = agg.getParentVO(); + String vid = plo.getCmaterialvid(); + String stockorgid = plo.getCstockorgid(); + String stockorgvid = plo.getCstockorgvid(); + Integer posource = plo.getFposource(); + if (PoSourceEnum.COMPUT == posource && MMValueCheck.isNotEmpty(stockorgid) + && MMValueCheck.isNotEmpty(stockorgvid) && null != results) { + MaterialProdVO prodvo = (MaterialProdVO) results.get(vid); + if (null != prodvo) { + plo.setCproddeptid(prodvo.getPk_prodeptdoc()); + } + } + } + } + + List proddeptids = new ArrayList(); + for (AggregatedPoVO agg : vos) { + PoVO plo = agg.getParentVO(); + String prodDeptid = plo.getCproddeptid(); + Integer posource = plo.getFposource(); + if (PoSourceEnum.COMPUT == posource && MMValueCheck.isNotEmpty(prodDeptid)) { + proddeptids.add(prodDeptid); + } + } + IDeptPubService deptPubService = getDeptPubService(); + try { + HashMap results = deptPubService + .getLastVIDSByDeptIDS((String[]) proddeptids.toArray(new String[0])); + if (null != results) { + for (AggregatedPoVO agg : vos) { + PoVO plo = agg.getParentVO(); + String prodDeptid = plo.getCproddeptid(); + Integer posource = plo.getFposource(); + if (PoSourceEnum.COMPUT == posource && MMValueCheck.isNotEmpty(prodDeptid)) { + plo.setCproddeptvid((String) results.get(prodDeptid)); + } + } + + } + } catch (BusinessException e) { + ExceptionUtils.wrappException(e); + } + } + + private IDeptPubService getDeptPubService() { + return (IDeptPubService) NCLocator.getInstance().lookup(IDeptPubService.class); + } +}