feat(pmo): 精密流程生产订单关闭或取消关闭同步启源
This commit is contained in:
parent
2e19ac4c34
commit
8b0c7939da
|
|
@ -0,0 +1,111 @@
|
||||||
|
package nc.bs.mmpac.pmo.pac0002.bp;
|
||||||
|
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.*;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillCloseValueRule;
|
||||||
|
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
|
||||||
|
import nc.impl.pubapp.pattern.rule.IRule;
|
||||||
|
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
|
||||||
|
import nc.util.mmf.framework.gc.GCBillTransferTool;
|
||||||
|
import nc.util.mmf.framework.gc.GCBillUpdate;
|
||||||
|
import nc.util.mmf.framework.gc.GCUpdateBPTemplate;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.CircularlyAccessibleValueObject;
|
||||||
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PMORowCloseBP {
|
||||||
|
public PMORowCloseBP() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public PMOAggVO[] rowclose(PMOAggVO[] vos) {
|
||||||
|
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWCLOSE);
|
||||||
|
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
|
||||||
|
this.addRowCloseBeforeRule(processer);
|
||||||
|
this.addRowCloseAfterRule(processer);
|
||||||
|
PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos);
|
||||||
|
PmoSagaUtil.frozenAndAddSaga(returnvos);
|
||||||
|
List<PMOItemVO> upditemList = new ArrayList();
|
||||||
|
Map<String, PMOItemVO> upditemMap = new HashMap();
|
||||||
|
|
||||||
|
for (PMOAggVO aggvo : returnvos) {
|
||||||
|
PMOItemVO[] items = aggvo.getChildrenVO();
|
||||||
|
|
||||||
|
for (PMOItemVO item : items) {
|
||||||
|
upditemList.add(item);
|
||||||
|
upditemMap.put(item.getCmoid(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
|
||||||
|
PMOItemVO[] olditems = aggvo.getChildrenVO();
|
||||||
|
List<PMOItemVO> tempitems = new ArrayList();
|
||||||
|
|
||||||
|
for (PMOItemVO item : olditems) {
|
||||||
|
if (!upditemMap.containsKey(item.getCmoid())) {
|
||||||
|
tempitems.add(item);
|
||||||
|
} else {
|
||||||
|
((PMOItemVO) upditemMap.get(item.getCmoid())).setStatus(1);
|
||||||
|
PMOBPUtil.setGrandVOStatusUpdate((PMOItemVO) upditemMap.get(item.getCmoid()));
|
||||||
|
tempitems.add((PMOItemVO) upditemMap.get(item.getCmoid()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aggvo.setChildrenVO((CircularlyAccessibleValueObject[]) tempitems.toArray(new PMOItemVO[tempitems.size()]));
|
||||||
|
PMOAggVO[] aggvos = new PMOAggVO[]{aggvo};
|
||||||
|
GCBillTransferTool<PMOAggVO> transferTool = new GCBillTransferTool(aggvos);
|
||||||
|
PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills();
|
||||||
|
GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate();
|
||||||
|
PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills);
|
||||||
|
PmoSagaUtil.compensate4Close(newaggvos);
|
||||||
|
PMOItemVO[] totalitems = newaggvos[0].getChildrenVO();
|
||||||
|
Map<String, PMOItemVO> newitemMap = new HashMap();
|
||||||
|
|
||||||
|
for (PMOItemVO item : totalitems) {
|
||||||
|
if (upditemMap.containsKey(item.getCmoid())) {
|
||||||
|
newitemMap.put(item.getCmoid(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
returnvos[0].setChildrenVO((CircularlyAccessibleValueObject[]) newitemMap.values().toArray(new PMOItemVO[0]));
|
||||||
|
processer.after(returnvos, returnvos);
|
||||||
|
PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
|
||||||
|
return new PMOAggVO[]{newaggvo};
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
ExceptionUtils.wrappException(e);
|
||||||
|
return returnvos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRowCloseBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
|
||||||
|
IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
|
||||||
|
processer.addBeforeRule(checkFrozenRule);
|
||||||
|
processer.addBeforeRule(new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT));
|
||||||
|
processer.addBeforeRule(new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.FINISH));
|
||||||
|
processer.addBeforeRule(new PMOCloseCheckRule());
|
||||||
|
processer.addBeforeRule(new PMOATPUpdateWithParaRule(true, "55A2"));
|
||||||
|
processer.addBeforeRule(new PMOFillCloseValueRule(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRowCloseAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
|
||||||
|
IRule<PMOAggVO> finishPickmrule = new PMOFinishAutoFinishPickmRule();
|
||||||
|
processer.addAfterRule(finishPickmrule);
|
||||||
|
processer.addAfterRule(new PMOATPUpdateWithParaRule(false, "55A2"));
|
||||||
|
processer.addAfterRule(new PMOCloseCloseSupplyRule());
|
||||||
|
processer.addAfterRule(new AfterPmoSyncJmQMSRule("close"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,112 @@
|
||||||
|
package nc.bs.mmpac.pmo.pac0002.bp;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPUtil;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateWithParaRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.PMOCloseOpenSupplyRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterRowStatusRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckAccountSettleRule;
|
||||||
|
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillCloseValueRule;
|
||||||
|
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
|
||||||
|
import nc.impl.pubapp.pattern.rule.IRule;
|
||||||
|
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
|
||||||
|
import nc.util.mmf.framework.gc.GCBillTransferTool;
|
||||||
|
import nc.util.mmf.framework.gc.GCBillUpdate;
|
||||||
|
import nc.util.mmf.framework.gc.GCUpdateBPTemplate;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.constant.PMOConstLang;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFBillstatusEnum;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.enumeration.PMOFItemStatusEnum;
|
||||||
|
import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.CircularlyAccessibleValueObject;
|
||||||
|
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
|
||||||
|
|
||||||
|
public class PMORowCloseCancelBP {
|
||||||
|
public PMORowCloseCancelBP() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public PMOAggVO[] rowclosecancel(PMOAggVO[] vos) {
|
||||||
|
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWUNCLOSE);
|
||||||
|
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
|
||||||
|
this.addRowCloseCancelBeforeRule(processer);
|
||||||
|
this.addRowCloseCancelAfterRule(processer);
|
||||||
|
PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos);
|
||||||
|
PmoSagaUtil.addSagaAndCompensate4UnClose(returnvos);
|
||||||
|
List<PMOItemVO> upditemList = new ArrayList();
|
||||||
|
Map<String, PMOItemVO> upditemMap = new HashMap();
|
||||||
|
|
||||||
|
for(PMOAggVO aggvo : returnvos) {
|
||||||
|
PMOItemVO[] items = aggvo.getChildrenVO();
|
||||||
|
|
||||||
|
for(PMOItemVO item : items) {
|
||||||
|
upditemList.add(item);
|
||||||
|
upditemMap.put(item.getCmoid(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
PMOAggVO aggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
|
||||||
|
PMOItemVO[] olditems = aggvo.getChildrenVO();
|
||||||
|
List<PMOItemVO> tempitems = new ArrayList();
|
||||||
|
|
||||||
|
for(PMOItemVO item : olditems) {
|
||||||
|
if (!upditemMap.containsKey(item.getCmoid())) {
|
||||||
|
tempitems.add(item);
|
||||||
|
} else {
|
||||||
|
((PMOItemVO)upditemMap.get(item.getCmoid())).setStatus(1);
|
||||||
|
PMOBPUtil.setGrandVOStatusUpdate((PMOItemVO)upditemMap.get(item.getCmoid()));
|
||||||
|
tempitems.add((PMOItemVO)upditemMap.get(item.getCmoid()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aggvo.setChildrenVO((CircularlyAccessibleValueObject[])tempitems.toArray(new PMOItemVO[tempitems.size()]));
|
||||||
|
PMOAggVO[] aggvos = new PMOAggVO[]{aggvo};
|
||||||
|
GCBillTransferTool<PMOAggVO> transferTool = new GCBillTransferTool(aggvos);
|
||||||
|
PMOAggVO[] originBills = (PMOAggVO[])transferTool.getOriginBills();
|
||||||
|
GCBillUpdate<PMOAggVO> billupdate = new GCBillUpdate();
|
||||||
|
PMOAggVO[] newaggvos = (PMOAggVO[])billupdate.update(aggvos, originBills);
|
||||||
|
PMOItemVO[] totalitems = newaggvos[0].getChildrenVO();
|
||||||
|
Map<String, PMOItemVO> newitemMap = new HashMap();
|
||||||
|
|
||||||
|
for(PMOItemVO item : totalitems) {
|
||||||
|
if (upditemMap.containsKey(item.getCmoid())) {
|
||||||
|
newitemMap.put(item.getCmoid(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
returnvos[0].setChildrenVO((CircularlyAccessibleValueObject[])newitemMap.values().toArray(new PMOItemVO[0]));
|
||||||
|
processer.after(returnvos, returnvos);
|
||||||
|
PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
|
||||||
|
return new PMOAggVO[]{newaggvo};
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
ExceptionUtils.wrappException(e);
|
||||||
|
return returnvos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRowCloseCancelBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
|
||||||
|
IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
|
||||||
|
processer.addBeforeRule(checkFrozenRule);
|
||||||
|
processer.addBeforeRule(new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT));
|
||||||
|
processer.addBeforeRule(new PMOFilterRowStatusRule(PMOConstLang.getMSG_RULE_NO_ROWDATA(), PMOFItemStatusEnum.CLOSE));
|
||||||
|
processer.addBeforeRule(new PMOCheckAccountSettleRule());
|
||||||
|
processer.addBeforeRule(new PMOATPUpdateWithParaRule(true, "55A2"));
|
||||||
|
processer.addBeforeRule(new PMOFillCloseValueRule(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRowCloseCancelAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
|
||||||
|
processer.addAfterRule(new PMOATPUpdateWithParaRule(false, "55A2"));
|
||||||
|
processer.addAfterRule(new PMOCloseOpenSupplyRule());
|
||||||
|
processer.addAfterRule(new AfterPmoSyncJmQMSRule("closeCancel"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue