diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseBP.java new file mode 100644 index 00000000..04e38993 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseBP.java @@ -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 bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWCLOSE); + CompareAroundProcesser processer = bp.getAroundProcesser(); + this.addRowCloseBeforeRule(processer); + this.addRowCloseAfterRule(processer); + PMOAggVO[] returnvos = (PMOAggVO[]) processer.before(vos, vos); + PmoSagaUtil.frozenAndAddSaga(returnvos); + List upditemList = new ArrayList(); + Map 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 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 transferTool = new GCBillTransferTool(aggvos); + PMOAggVO[] originBills = (PMOAggVO[]) transferTool.getOriginBills(); + GCBillUpdate billupdate = new GCBillUpdate(); + PMOAggVO[] newaggvos = (PMOAggVO[]) billupdate.update(aggvos, originBills); + PmoSagaUtil.compensate4Close(newaggvos); + PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); + Map 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 processer) { + IRule 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 processer) { + IRule finishPickmrule = new PMOFinishAutoFinishPickmRule(); + processer.addAfterRule(finishPickmrule); + processer.addAfterRule(new PMOATPUpdateWithParaRule(false, "55A2")); + processer.addAfterRule(new PMOCloseCloseSupplyRule()); + processer.addAfterRule(new AfterPmoSyncJmQMSRule("close")); + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseCancelBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseCancelBP.java new file mode 100644 index 00000000..bef74789 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMORowCloseCancelBP.java @@ -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 bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWUNCLOSE); + CompareAroundProcesser processer = bp.getAroundProcesser(); + this.addRowCloseCancelBeforeRule(processer); + this.addRowCloseCancelAfterRule(processer); + PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos); + PmoSagaUtil.addSagaAndCompensate4UnClose(returnvos); + List upditemList = new ArrayList(); + Map 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 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 transferTool = new GCBillTransferTool(aggvos); + PMOAggVO[] originBills = (PMOAggVO[])transferTool.getOriginBills(); + GCBillUpdate billupdate = new GCBillUpdate(); + PMOAggVO[] newaggvos = (PMOAggVO[])billupdate.update(aggvos, originBills); + PMOItemVO[] totalitems = newaggvos[0].getChildrenVO(); + Map 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 processer) { + IRule 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 processer) { + processer.addAfterRule(new PMOATPUpdateWithParaRule(false, "55A2")); + processer.addAfterRule(new PMOCloseOpenSupplyRule()); + processer.addAfterRule(new AfterPmoSyncJmQMSRule("closeCancel")); + } +} diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java index 38c979bb..a80366cc 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java @@ -130,6 +130,15 @@ public class AfterPmoSyncJmQMSRule implements IRule { flag_wg = 1; flag_jqbz = 1; } + if ("putCancel".equals(flag)) { + flag_jqbz = 2;// 2.取消投放 + } + if ("close".equals(flag)) {// 关闭 + flag_jqbz = 1; + } + if ("closeCancel".equals(flag)) {// 取消关闭 + flag_jqbz = 0; + } itemObj.put("flag_wg", flag_wg);// 完工标志 1/0 1.完工 itemObj.put("flag_jqbz", flag_jqbz);// 结清标志 1 代表结清 0 或者空代表非结清 itemObj.put("jqr", mocloserName);// 结清人-BIP关闭人