流程生产订单回写齐套率、物料的总行数、满足齐套的物料的行数
This commit is contained in:
		
							parent
							
								
									b991f9a692
								
							
						
					
					
						commit
						0eb0cd5c3c
					
				|  | @ -0,0 +1,332 @@ | ||||||
|  | // | ||||||
|  | // Source code recreated from a .class file by IntelliJ IDEA | ||||||
|  | // (powered by FernFlower decompiler) | ||||||
|  | // | ||||||
|  | 
 | ||||||
|  | package nc.bs.mmpub.setanalysis.bp.multistorey; | ||||||
|  | 
 | ||||||
|  | import nc.bs.dao.BaseDAO; | ||||||
|  | import nc.bs.dao.DAOException; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.SaMonolayerBP; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.demand.SaDemandInsertBP; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.demand.SaDemandQueryBP; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.log.SaLogInsertBP; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.utils.SaArrayUtil; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.utils.SaBooleanUtils; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.utils.SaLogger; | ||||||
|  | import nc.bs.mmpub.setanalysis.bp.utils.SaVOUtils; | ||||||
|  | import nc.impl.pubapp.pattern.data.vo.VOUpdate; | ||||||
|  | import nc.impl.pubapp.pattern.data.vo.VOUpdateTS; | ||||||
|  | import nc.util.mmf.framework.base.MMValueCheck; | ||||||
|  | import nc.vo.mmpub.setanalysis.entity.*; | ||||||
|  | import nc.vo.mmpub.setanalysis.enumeration.SaDemandType; | ||||||
|  | import nc.vo.mmpub.setanalysis.enumeration.SaMatchType; | ||||||
|  | import nc.vo.mmpub.setanalysis.utils.SaValidateUtil; | ||||||
|  | import nc.vo.pub.lang.UFDouble; | ||||||
|  | import nc.vo.pubapp.pattern.pub.MapList; | ||||||
|  | import nc.vo.pubapp.pattern.pub.MathTool; | ||||||
|  | import nccloud.baseapp.core.log.NCCForUAPLogger; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.HashMap; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | 
 | ||||||
|  | public class SaMultiStoreyBP { | ||||||
|  |     private SaContext sc; | ||||||
|  |     private List<SaMatchVO> smVO; | ||||||
|  |     private MapList<String, SaDemandVO> demand; | ||||||
|  |     private Map<String, SaDemandVO> demandPkMap; | ||||||
|  |     private Map<String, AggAnalysisVO> aggPkMap; | ||||||
|  |     private int maxLevel = 0; | ||||||
|  |     private SaAlgorithmBP algorithm; | ||||||
|  | 
 | ||||||
|  |     public SaMultiStoreyBP(SaContext sc) { | ||||||
|  |         SaLogger.debug("3.1.反算齐套初始化开始"); | ||||||
|  |         this.algorithm = new SaAlgorithmBP(); | ||||||
|  |         this.setSc(sc); | ||||||
|  |         List<SaDemandVO> sdList = SaVOUtils.getDemandList(sc.getSdVO()); | ||||||
|  |         this.maxLevel = SaDemandQueryBP.getMaxLevelCode(sdList); | ||||||
|  |         this.setDemand(SaVOUtils.getSortMapList(sdList, "levelcode")); | ||||||
|  |         if (!MMValueCheck.isEmpty(sc.getSdVO())) { | ||||||
|  |             sc.getSdVO().toMap().clear(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.smVO = new ArrayList(); | ||||||
|  |         this.demandPkMap = new HashMap(); | ||||||
|  |         this.demandPkMap = this.algorithm.demandGroupForPk(sdList); | ||||||
|  |         this.aggPkMap = new HashMap(); | ||||||
|  |         this.aggPkMap = this.algorithm.aggGroupForPk(this.sc.getAggs()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void doMultiStorey() { | ||||||
|  |         SaLogger.debug("3.2.反算齐套开始计算"); | ||||||
|  |         if (!MMValueCheck.isEmpty(this.demand)) { | ||||||
|  |             for (int curLevel = this.maxLevel; curLevel > 0; --curLevel) { | ||||||
|  |                 List<SaDemandVO> sdList = this.demand.get(Integer.toString(curLevel)); | ||||||
|  |                 if (!MMValueCheck.isEmpty(sdList)) { | ||||||
|  |                     for (SaDemandVO sa : sdList) { | ||||||
|  |                         this.algorithm.setNum(sa); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     this.setDemandForAnalysis(sdList, Integer.toString(curLevel)); | ||||||
|  |                     SaLogger.debug("3.3.反算齐套层码" + Integer.toString(curLevel)); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         this.insert(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void setDemandForAnalysis(List<SaDemandVO> sdList, String key) { | ||||||
|  |         if (!MMValueCheck.isEmpty(sdList)) { | ||||||
|  |             MapList<String, SaDemandVO> demandMap = SaVOUtils.getSortMapList(sdList, "pk_analysis"); | ||||||
|  |             if (!MMValueCheck.isEmpty(demandMap)) { | ||||||
|  |                 for (Map.Entry<String, List<SaDemandVO>> entry : demandMap.toMap().entrySet()) { | ||||||
|  |                     List<SaDemandVO> demandList = (List) entry.getValue(); | ||||||
|  |                     this.setDemandForFatherid(demandList, key); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void setDemandForFatherid(List<SaDemandVO> sdList, String key) { | ||||||
|  |         if (!MMValueCheck.isEmpty(sdList)) { | ||||||
|  |             MapList<String, SaDemandVO> demandMap = SaVOUtils.getSortMapList(sdList, "vfatherid"); | ||||||
|  |             if (!MMValueCheck.isEmpty(demandMap)) { | ||||||
|  |                 for (Map.Entry<String, List<SaDemandVO>> entry : demandMap.toMap().entrySet()) { | ||||||
|  |                     List<SaDemandVO> demandList = SaArrayUtil.getMultiDemandSort((List) entry.getValue()); | ||||||
|  |                     SaDemandVO nsetsnum = new SaDemandVO(); | ||||||
|  |                     if (!MMValueCheck.isEmpty(demandList)) { | ||||||
|  |                         if (SaBooleanUtils.isReplace(demandList)) { | ||||||
|  |                             SaRaplaceItemBP raplaceBP = new SaRaplaceItemBP(demandList); | ||||||
|  |                             List<SaDemandVO> raplaceList = raplaceBP.getRaplaceItem(); | ||||||
|  |                             List<SaDemandVO> materialList = raplaceBP.getMaterialItem(); | ||||||
|  |                             if (!MMValueCheck.isEmpty(raplaceList)) { | ||||||
|  |                                 nsetsnum = this.algorithm.getReplaceNum(raplaceList); | ||||||
|  |                             } | ||||||
|  | 
 | ||||||
|  |                             new SaDemandVO(); | ||||||
|  |                             if (!MMValueCheck.isEmpty(raplaceList)) { | ||||||
|  |                                 SaDemandVO material = this.setMatchFatherid(materialList, key); | ||||||
|  |                                 if (!MMValueCheck.isEmpty(material)) { | ||||||
|  |                                     nsetsnum.setNsetsnum(nsetsnum.getNsetsnum().add(material.getNsetsnum())); | ||||||
|  |                                 } | ||||||
|  |                             } | ||||||
|  |                         } else { | ||||||
|  |                             nsetsnum = this.setMatchFatherid(demandList, key); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|  |                     if (!MMValueCheck.isEmpty(nsetsnum.getNsetsnum()) && nsetsnum.getNsetsnum().compareTo(UFDouble.ZERO_DBL) > 0) { | ||||||
|  |                         this.setRewriteNmaterialnum(key, nsetsnum, false); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private SaDemandVO setMatchFatherid(List<SaDemandVO> sdList, String key) { | ||||||
|  |         if (MMValueCheck.isEmpty(sdList)) { | ||||||
|  |             return null; | ||||||
|  |         } else { | ||||||
|  |             UFDouble nsetsnumsum = new UFDouble(); | ||||||
|  |             SaDemandVO nsetsnum = new SaDemandVO(); | ||||||
|  |             int num = (int) sdList.stream() | ||||||
|  |                     .filter(saDemandVO -> MathTool.compareTo(saDemandVO.getNmaterialnum(), saDemandVO.getNdemandnum()) >= 0) | ||||||
|  |                     .count(); | ||||||
|  |             MapList<String, SaDemandVO> demandMap = SaVOUtils.getSortMapList(sdList, "vmatchfatherid"); | ||||||
|  |             if (!MMValueCheck.isEmpty(demandMap)) { | ||||||
|  |                 for (Map.Entry<String, List<SaDemandVO>> entry : demandMap.toMap().entrySet()) { | ||||||
|  |                     List<SaDemandVO> demandList = (List) entry.getValue(); | ||||||
|  |                     if (((SaDemandVO) demandList.get(0)).getFmatchtype().equals(SaMatchType.PD.toIntValue()) && ((SaDemandVO) demandList.get(0)).getFdemandtype().equals(SaDemandType.NR.toIntValue())) { | ||||||
|  |                         nsetsnum = this.algorithm.minDemand((SaDemandVO[]) demandList.toArray(new SaDemandVO[0])); | ||||||
|  |                         // 设置物料的总行数、满足齐套的物料的行数 | ||||||
|  |                         nsetsnum.setGoodsnum(new UFDouble(sdList.size())); | ||||||
|  |                         nsetsnum.setPass_goodsnum(new UFDouble(num)); | ||||||
|  |                         this.setRewriteNmaterialnum(key, nsetsnum, false); | ||||||
|  |                         this.setRewriteNmaterialnum(key, nsetsnum, true); | ||||||
|  |                         nsetsnumsum = nsetsnumsum.add(nsetsnum.getNsetsnum()); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 for (Map.Entry<String, List<SaDemandVO>> entry : demandMap.toMap().entrySet()) { | ||||||
|  |                     List<SaDemandVO> demandList = (List) entry.getValue(); | ||||||
|  |                     if (!((SaDemandVO) demandList.get(0)).getFdemandtype().equals(SaDemandType.NR.toIntValue()) && demandList.size() > 0) { | ||||||
|  |                         nsetsnum = this.algorithm.minDemand((SaDemandVO[]) demandList.toArray(new SaDemandVO[0])); | ||||||
|  |                         // 设置物料的总行数、满足齐套的物料的行数 | ||||||
|  |                         nsetsnum.setGoodsnum(new UFDouble(sdList.size())); | ||||||
|  |                         nsetsnum.setPass_goodsnum(new UFDouble(num)); | ||||||
|  |                         this.setRewriteNmaterialnum(key, nsetsnum, true); | ||||||
|  |                         nsetsnumsum = SaValidateUtil.add(nsetsnumsum, nsetsnum.getNsetsnum()); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!MMValueCheck.isEmpty(nsetsnumsum)) { | ||||||
|  |                 nsetsnum.setNsetsnum(nsetsnumsum); | ||||||
|  |             } | ||||||
|  |             return nsetsnum; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void setRewriteNmaterialnum(String key, SaDemandVO nsetsnum, boolean isUpdateMatch) { | ||||||
|  |         if (!MMValueCheck.isEmpty(nsetsnum)) { | ||||||
|  |             int level = this.getLevel(key); | ||||||
|  |             if (level == 0) { | ||||||
|  |                 if (this.aggPkMap != null) { | ||||||
|  |                     AggAnalysisVO agg = (AggAnalysisVO) this.aggPkMap.get(nsetsnum.getVfatherid()); | ||||||
|  |                     if (agg != null) { | ||||||
|  |                         SaAnalysisVO analysis = agg.getParentVO(); | ||||||
|  |                         analysis.setNsetsnum(nsetsnum.getNsetsnum()); | ||||||
|  |                         // 流程生产订单表体主键 | ||||||
|  |                         String cdemandbillbid = analysis.getCdemandbillbid(); | ||||||
|  |                         // 物料的总行数 | ||||||
|  |                         UFDouble goodsnum = nsetsnum.getGoodsnum().setScale(2, UFDouble.ROUND_HALF_UP); | ||||||
|  |                         // 满足齐套的物料的行数 | ||||||
|  |                         UFDouble pass_goodsnum = nsetsnum.getPass_goodsnum().setScale(2, UFDouble.ROUND_HALF_UP); | ||||||
|  |                         // 齐套率计算=满足的/总数量 | ||||||
|  |                         UFDouble rate = pass_goodsnum.div(goodsnum, 4, UFDouble.ROUND_HALF_UP); | ||||||
|  |                         // 修改流程生产订单的齐套率、物料的总行数、满足齐套的物料的行数 | ||||||
|  |                         String sql = String.format("update mm_mo set vdef12 = '%s',vdef11 = '%s',vdef4 = '%s' where cmoid = '%s'", | ||||||
|  |                                 goodsnum, pass_goodsnum, rate, cdemandbillbid); | ||||||
|  |                         try { | ||||||
|  |                             NCCForUAPLogger.debug("sql = " + sql); | ||||||
|  |                             BaseDAO bd = new BaseDAO(); | ||||||
|  |                             bd.executeUpdate(sql); | ||||||
|  |                         } catch (DAOException e) { | ||||||
|  |                             NCCForUAPLogger.debug("setRewriteNmaterialnum-exp:" + e.getMessage()); | ||||||
|  |                             throw new RuntimeException(e); | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } else if (this.demandPkMap != null) { | ||||||
|  |                 new SaDemandVO(); | ||||||
|  |                 SaDemandVO var7 = (SaDemandVO) this.demandPkMap.get(nsetsnum.getVfatherid()); | ||||||
|  |                 if (!isUpdateMatch) { | ||||||
|  |                     UFDouble nmatch = var7.getNmatchnum().add(nsetsnum.getNsetsnum()); | ||||||
|  |                     var7.setNmaterialnum(nmatch); | ||||||
|  |                 } else { | ||||||
|  |                     this.updateNmaterialnum(nsetsnum, var7); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private int getLevel(String key) { | ||||||
|  |         return key.length() == 0 ? 0 : Integer.parseInt(key) - 1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void insert() { | ||||||
|  |         (new SaLogInsertBP(this.sc)).insertLog(); | ||||||
|  |         SaDemandInsertBP sdi = new SaDemandInsertBP(); | ||||||
|  |         List<SaDemandVO> sdList = SaVOUtils.getDemandList(this.demand); | ||||||
|  |         if (!MMValueCheck.isEmpty(sdList)) { | ||||||
|  |             SaLogger.debug("3.4.反算持久化(相关需求,分析对象)" + sdList.size()); | ||||||
|  |             sdi.insertDemand((SaDemandVO[]) sdList.toArray(new SaDemandVO[0]), this.sc); | ||||||
|  |             SaAnalysisVO[] sas = SaVOUtils.construcVOs(this.getSc().getAggs()); | ||||||
|  |             this.updateNremainnum(sas); | ||||||
|  |             VOUpdate<SaAnalysisVO> voup = new VOUpdate(); | ||||||
|  |             voup.update(sas, new String[]{"nsetsnum", "nremainnum"}); | ||||||
|  |             this.updateMatch(); | ||||||
|  |             SaLogger.debug("3.5.反算持久化结束"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void updateNremainnum(SaAnalysisVO[] sas) { | ||||||
|  |         for (SaAnalysisVO sa : sas) { | ||||||
|  |             if (MMValueCheck.isEmpty(sa.getNsetsnum())) { | ||||||
|  |                 sa.setNsetsnum(UFDouble.ZERO_DBL); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!MMValueCheck.isEmpty(sa.getNsetsnum()) && !MMValueCheck.isEmpty(sa.getNdemandnum())) { | ||||||
|  |                 sa.setNremainnum(sa.getNdemandnum().sub(sa.getNsetsnum())); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void updateNmaterialnum(SaDemandVO saDemand, SaDemandVO hDemand) { | ||||||
|  |         if (!saDemand.getVfatherid().equals(saDemand.getVmatchfatherid()) && (saDemand.getFmatchtype().equals(SaMatchType.PICK.value()) || saDemand.getFmatchtype().equals(SaMatchType.PD.value()) || saDemand.getFmatchtype().equals(SaMatchType.MREQ.value()))) { | ||||||
|  |             SaMatchVO sm = new SaMatchVO(); | ||||||
|  |             sm.setPk_match(saDemand.getVmatchfatherid()); | ||||||
|  |             sm.setNmaterialnum(saDemand.getNsetsnum()); | ||||||
|  |             UFDouble nsetsnum = SaMonolayerBP.getNsetsnum(hDemand, saDemand.getNsetsnum(), (UFDouble) null); | ||||||
|  |             sm.setNsetsnum(nsetsnum); | ||||||
|  |             this.getSmVO().add(sm); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void updateMatch() { | ||||||
|  |         SaMatchVO[] sms = (SaMatchVO[]) this.getSmVO().toArray(new SaMatchVO[0]); | ||||||
|  |         if (!MMValueCheck.isEmpty(sms)) { | ||||||
|  |             VOUpdateTS<SaMatchVO> voQuery = new VOUpdateTS(); | ||||||
|  |             voQuery.update(sms); | ||||||
|  |             VOUpdate<SaMatchVO> voup = new VOUpdate(); | ||||||
|  |             voup.update(sms, new String[]{"nmaterialnum", "nsetsnum"}); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public int getMaxLevel() { | ||||||
|  |         return this.maxLevel; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setMaxLevel(int maxLevel) { | ||||||
|  |         this.maxLevel = maxLevel; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public MapList<String, SaDemandVO> getDemand() { | ||||||
|  |         return this.demand; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDemand(MapList<String, SaDemandVO> demand) { | ||||||
|  |         this.demand = demand; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public SaContext getSc() { | ||||||
|  |         return this.sc; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSc(SaContext sc) { | ||||||
|  |         this.sc = sc; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<SaMatchVO> getSmVO() { | ||||||
|  |         return this.smVO; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSmVO(List<SaMatchVO> smVO) { | ||||||
|  |         this.smVO = smVO; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public SaAlgorithmBP getAlgorithm() { | ||||||
|  |         return this.algorithm; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAlgorithm(SaAlgorithmBP algorithm) { | ||||||
|  |         this.algorithm = algorithm; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Map<String, SaDemandVO> getDemandPkMap() { | ||||||
|  |         return this.demandPkMap; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDemandPkMap(Map<String, SaDemandVO> demandPkMap) { | ||||||
|  |         this.demandPkMap = demandPkMap; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Map<String, AggAnalysisVO> getAggPkMap() { | ||||||
|  |         return this.aggPkMap; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAggPkMap(Map<String, AggAnalysisVO> aggPkMap) { | ||||||
|  |         this.aggPkMap = aggPkMap; | ||||||
|  |     } | ||||||
|  | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue