流程生产订单回写齐套率、物料的总行数、满足齐套的物料的行数
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