实现全部领料后回写备料计划 + 税务云开票回写调整

This commit is contained in:
lj 2025-03-24 18:10:36 +08:00
parent 6d53517653
commit daa822bc63
6 changed files with 567 additions and 3 deletions

View File

@ -0,0 +1,68 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.mmpac.pmo.pac0002.bp;
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterBillStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFinishAutoFinishPutPlanRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOToFinishPickMRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFinishValueRule;
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.rule.IFilterRule;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
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.enumeration.PMOFBillstatusEnum;
public class PMOFinishBP {
public PMOFinishBP() {
}
public PMOAggVO[] finish(PMOAggVO[] fullBills, PMOAggVO[] originBills) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.FINISH);
this.addFinishBeforeRule(bp.getAroundProcesser());
this.addFinishAfterRule(bp.getAroundProcesser());
PMOAggVO[] retBills = (PMOAggVO[])bp.update(fullBills, originBills);
return retBills;
}
private void addFinishBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
processer.addBeforeRule(checkFrozenRule);
IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT);
processer.addBeforeRule(filterStatusRule);
IRule<PMOAggVO> fillFinishRule = new PMOFillFinishValueRule(false);
processer.addBeforeRule(fillFinishRule);
}
private void addFinishAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> finishPutPlanRule = new PMOFinishAutoFinishPutPlanRule();
processer.addAfterRule(finishPutPlanRule);
/** 同步修改备料计划完成(生产订单强制完工时) */
IRule<PMOAggVO> pMOToFinishPickMRule = new PMOToFinishPickMRule();
processer.addAfterRule(pMOToFinishPickMRule);
}
public PMOAggVO[] finishCancel(PMOAggVO[] fullBills, PMOAggVO[] originBills) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.UNFINISH);
this.addFinishCancelBeforeRule(bp.getAroundProcesser());
this.addFinishCancelAfterRule(bp.getAroundProcesser());
PMOAggVO[] retBills = (PMOAggVO[])bp.update(fullBills, originBills);
return retBills;
}
private void addFinishCancelBeforeRule(CompareAroundProcesser<PMOAggVO> processer) {
IFilterRule<PMOAggVO> filterStatusRule = new PMOFilterBillStatusRule(PMOConstLang.getMSG_ACTION_NO_AUDIT(), PMOFBillstatusEnum.AUDIT);
processer.addBeforeRule(filterStatusRule);
IRule<PMOAggVO> fillFinishRule = new PMOFillFinishValueRule(true);
processer.addBeforeRule(fillFinishRule);
}
private void addFinishCancelAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
}
}

View File

@ -0,0 +1,114 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
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.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.PMOFilterBillStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFilterRowStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOFinishAutoFinishPutPlanRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOToFinishPickMRule;
import nc.bs.mmpac.pmo.pac0002.rule.fill.PMOFillFinishValueRule;
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.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
public class PMORowFinishBP {
public PMORowFinishBP() {
}
public PMOAggVO[] rowfinish(PMOAggVO[] vos) {
GCUpdateBPTemplate<PMOAggVO> bp = new GCUpdateBPTemplate(PMOPluginPoint.ROWFINISH);
CompareAroundProcesser<PMOAggVO> processer = bp.getAroundProcesser();
this.addRowFinishBeforeRule(processer);
this.addRowFinishAfterRule(processer);
PMOAggVO[] returnvos = (PMOAggVO[])processer.before(vos, vos);
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);
/** 同步修改备料计划完成(生产订单强制完工时) */
IRule<PMOAggVO> pMOToFinishPickMRule = new PMOToFinishPickMRule();
pMOToFinishPickMRule.process(newaggvos);
/** ******************** */
PMOAggVO newaggvo = PMOBPService.getIPMOQueryService().queryByPk(vos[0].getParentVO().getCpmohid());
return new PMOAggVO[]{newaggvo};
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
return returnvos;
}
}
private void addRowFinishBeforeRule(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.PUT));
processer.addBeforeRule(new PMOFillFinishValueRule(false));
}
private void addRowFinishAfterRule(CompareAroundProcesser<PMOAggVO> processer) {
processer.addAfterRule(new PMOFinishAutoFinishPutPlanRule());
}
}

View File

@ -0,0 +1,84 @@
package nc.bs.mmpac.pmo.pac0002.rule;
import java.util.ArrayList;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.bs.mmpac.pmo.pac0002.bp.service.PMOBPService;
import nc.impl.mmpac.pickm.PickmMaintainServiceImpl;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.mmpac.pickm.IPickmMaintainService;
import nc.md.persist.framework.IMDPersistenceQueryService;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.mmpac.pickm.entity.AggPickmVO;
import nc.vo.mmpac.pickm.entity.PickmHeadVO;
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.util.PMOTransferUtil;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
public class PMOToFinishPickMRule
extends Object
implements IRule<PMOAggVO>{
public void process(PMOAggVO[] vos) {
if (MMValueCheck.isEmpty(vos)) {
return;
}
/**
* 业务逻辑
* 1.循环生产订单明细表
* 2.查看生产订单明细行的状态是否为完工2
* 3.若为完工状态则根据生产订单明细表中生产订单行查询备料计划
* 4.修改备料计划为完成状态3
*/
for(int i = 0; i < vos.length; i++) {
PMOAggVO vo = vos[i];
PMOItemVO[] items = vo.getChildrenVO();
//循环生产订单明细
for(int j = 0; j < items.length; j++) {
PMOItemVO item = items[j];
//查看生产订单行状态是否为完工2
int fitemStatus = item.getFitemstatus();
if(fitemStatus != 2) {
continue;
}
//根据生产订单行查询备料计划
String cmoid = item.getCmoid();
String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cmoid + "'";
IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class);
// 根据主键查询得到aggvo
try {
@SuppressWarnings("unchecked")
ArrayList<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>)aggvoQueryService.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false);
if(aggVOs.size() <= 0) {
continue;
}
//数组转换
AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()];
boolean flag = false;
for(int z=0; z<aggVOs.size(); z++) {
AggPickmVO aggPickmVO = aggVOs.get(z);
PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO();
Integer fbillstatus = pickmHeadVO.getFbillstatus();
//已经位完工态的备料计划不修改
if(fbillstatus != 2){
aggVOsArr[z] =aggVOs.get(z);
flag = true;
}
}
if(flag) {
//备料计划完工
IPickmMaintainService ipickmMaintainService = NCLocator.getInstance().lookup(IPickmMaintainService.class);
ipickmMaintainService.finishPickm(aggVOsArr);
}
}catch(BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

View File

@ -0,0 +1,184 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.mmpac.wr.bp;
import java.util.HashMap;
import java.util.Map;
import nc.bs.mmpac.wr.plugin.WrPluginPoint;
import nc.bs.mmpac.wr.rule.WrAuditAndApplyCheckRule;
import nc.bs.mmpac.wr.rule.WrAuditAndProdInRule;
import nc.bs.mmpac.wr.rule.WrCheckMaterialPermissionRule;
import nc.bs.mmpac.wr.rule.WrCheckMoIsCloseRule;
import nc.bs.mmpac.wr.rule.WrCheckTranstypeCodeRule;
import nc.bs.mmpac.wr.rule.WrClearNullBodyRule;
import nc.bs.mmpac.wr.rule.WrFillInsertDataRule;
import nc.bs.mmpac.wr.rule.WrHeadNotNullRule;
import nc.bs.mmpac.wr.rule.WrIsSaveAndApproveRule;
import nc.bs.mmpac.wr.rule.WrNoneMainProductBomCheckRule;
import nc.bs.mmpac.wr.rule.WrPickFilterRule;
import nc.bs.mmpac.wr.rule.WrQualityFilterRule;
import nc.bs.mmpac.wr.rule.WrRowNoRule;
import nc.bs.mmpac.wr.rule.WrSetDefaultValueWhenInsertRule;
import nc.bs.mmpac.wr.rule.WrSetItemDefaultValueRule;
import nc.bs.mmpac.wr.rule.WrSetQualityVODefaultValueRule;
import nc.bs.mmpac.wr.rule.batch.WrCreateBatProdRule;
import nc.bs.mmpac.wr.rule.batch.WrCreateBatchCodeRule;
import nc.bs.mmpac.wr.rule.check.WrNullRule;
import nc.bs.mmpac.wr.rule.instockbatch.WrInsertAndDelInStockBatchCodeBeforeRule;
import nc.bs.mmpac.wr.rule.instockbatch.WrInsertInStockBatchCodeAfterRule;
import nc.bs.mmpac.wr.rule.mo.MoDiscadNumRewriteRule;
import nc.bs.mmpac.wr.rule.mo.WrMORewriteRule;
import nc.bs.mmpac.wr.rule.output.WrOutputNotNullRule;
import nc.bs.mmpac.wr.rule.pick.WrPickNotNullRule;
import nc.bs.mmpac.wr.rule.putplan.WrInsertRewriteWrNumForPutPlanRule;
import nc.bs.mmpac.wr.rule.serialno.*;
import nc.bs.mmpub.rule.MMATOMaterialCheckRule;
import nc.bs.mmpub.rule.MMAutoMaterialAssignRule;
import nc.bs.pubapp.pub.rule.FieldLengthCheckRule;
import nc.bs.pubapp.pub.rule.OrgDisabledCheckRule;
import nc.impl.pubapp.bd.material.assistant.MarAssistantSaveRule;
import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.AroundProcesser;
import nc.util.mmf.busi.rule.MMBillCodeCheckAndTrantypeRule;
import nc.util.mmf.busi.rule.MMCheckMaterialVirtualRule;
import nc.util.mmf.busi.rule.MMCreateBillcodeAndTrantypecodeRule;
import nc.util.mmf.framework.gc.GCInsertBPTemplate;
import nc.vo.mmpac.wr.entity.AggWrVO;
import nc.vo.mmpac.wr.entity.WrItemVO;
import nc.vo.mmpac.wr.entity.WrPickVO;
import nc.vo.mmpac.wr.entity.WrQualityVO;
import nc.vo.mmpac.wr.entity.WrVO;
public class WrInsertBP {
private boolean isOnlyInsert = false;
public WrInsertBP() {
}
public AggWrVO[] insert(AggWrVO[] vos) {
GCInsertBPTemplate<AggWrVO> bp = new GCInsertBPTemplate(WrPluginPoint.INSERT);
AroundProcesser<AggWrVO> processor = bp.getAroundProcesser();
Map<String, String> vbatchsMap = new HashMap();
this.addBeforeRule(processor, vos, vbatchsMap);
this.addAfterRule(processor, vbatchsMap);
return (AggWrVO[])bp.insert(vos);
}
private void addBeforeRule(AroundProcesser<AggWrVO> processer, AggWrVO[] vos, Map<String, String> vbatchsMap) {
IRule<AggWrVO> wrNullRule = new WrNullRule();
processer.addBeforeRule(wrNullRule);
IRule<AggWrVO> mmatoMaterialCheckRule = new MMATOMaterialCheckRule((String)null, "cbmaterialvid", "cbffileid");
processer.addBeforeRule(mmatoMaterialCheckRule);
IRule<AggWrVO> orgRule = new OrgDisabledCheckRule("pk_org", "FACTORYTYPE000000000");
processer.addBeforeRule(orgRule);
IRule<AggWrVO> checkDefRule = new UserDefSaveRule(new String[]{"vdef", "vbdef", "vgdef", "vpdef"}, new Class[]{WrVO.class, WrItemVO.class, WrQualityVO.class, WrPickVO.class});
processer.addBeforeRule(checkDefRule);
MarAssistantSaveRule<AggWrVO> marRule = new MarAssistantSaveRule();
processer.addBeforeRule(marRule);
IRule<AggWrVO> fillInsertDataRule = new WrFillInsertDataRule();
processer.addBeforeRule(fillInsertDataRule);
IRule<AggWrVO> autoMaterialAssignRule = new MMAutoMaterialAssignRule((String)null, "cbmaterialvid", new String[]{"pk_org"}, (String[])null);
processer.addBeforeFinalRule(autoMaterialAssignRule);
IRule<AggWrVO> orgPermissionRule = new WrCheckMaterialPermissionRule();
processer.addBeforeRule(orgPermissionRule);
IRule<AggWrVO> moCloseRule = new WrCheckMoIsCloseRule();
processer.addBeforeRule(moCloseRule);
processer.addBeforeRule(new MMCheckMaterialVirtualRule(WrItemVO.class));
IRule<AggWrVO> wrSetDefaultValueWhenInsertRule = new WrSetDefaultValueWhenInsertRule();
processer.addBeforeRule(wrSetDefaultValueWhenInsertRule);
IRule<AggWrVO> wrSetItemDefaultValueRule = new WrSetItemDefaultValueRule();
processer.addBeforeRule(wrSetItemDefaultValueRule);
IRule<AggWrVO> billcodeRule = new MMCreateBillcodeAndTrantypecodeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode");
processer.addBeforeRule(billcodeRule);
IRule<AggWrVO> wrHeadNotNullRule = new WrHeadNotNullRule();
processer.addBeforeRule(wrHeadNotNullRule);
IRule<AggWrVO> wrBatchCodeRule = new WrCreateBatchCodeRule();
processer.addBeforeRule(wrBatchCodeRule);
IRule<AggWrVO> wrClearNullProductBodyRule = new WrClearNullBodyRule();
processer.addBeforeRule(wrClearNullProductBodyRule);
processer.addBeforeRule(new WrRowNoRule());
IRule<AggWrVO> wrQualityFilterRule = new WrQualityFilterRule();
processer.addBeforeRule(wrQualityFilterRule);
IRule<AggWrVO> wrPickFilterRule = new WrPickFilterRule();
processer.addBeforeRule(wrPickFilterRule);
IRule<AggWrVO> wrOutputNotNullRule = new WrOutputNotNullRule();
processer.addBeforeRule(wrOutputNotNullRule);
IRule<AggWrVO> wrNoneMainProductBomCheckRule = new WrNoneMainProductBomCheckRule();
processer.addBeforeRule(wrNoneMainProductBomCheckRule);
IRule<AggWrVO> wrConsumeNotNullRule = new WrPickNotNullRule();
processer.addBeforeRule(wrConsumeNotNullRule);
IRule<AggWrVO> lengthCheckRule = new FieldLengthCheckRule();
processer.addBeforeRule(lengthCheckRule);
IRule<AggWrVO> wrInsertAndDelInStockBatchCodeBeforeRule = new WrInsertAndDelInStockBatchCodeBeforeRule(vbatchsMap);
processer.addBeforeRule(wrInsertAndDelInStockBatchCodeBeforeRule);
WrSetQualityVODefaultValueRule wrSetQualityVODefaultValueRule = new WrSetQualityVODefaultValueRule();
processer.addBeforeRule(wrSetQualityVODefaultValueRule);
processer.addBeforeRule(new WrSerialNoCheckCodeRepeat());
WrSerialNoAutoCreateBeforeRule wrAutoCreateSnBeforeRule = new WrSerialNoAutoCreateBeforeRule();
processer.addBeforeRule(wrAutoCreateSnBeforeRule);
WrSerialNoCheckRule wrSnCheckRule = new WrSerialNoCheckRule();
processer.addBeforeRule(wrSnCheckRule);
WrSnSynToQualtiyRule synToQRule = new WrSnSynToQualtiyRule();
processer.addBeforeRule(synToQRule);
WrMoSerialNoMarkIRule mosnMarkRule = new WrMoSerialNoMarkIRule();
processer.addBeforeRule(mosnMarkRule);
IRule<AggWrVO> wrCreateBatProdRule = new WrCreateBatProdRule();
processer.addBeforeRule(wrCreateBatProdRule);
processer.addBeforeRule(new WrCheckTranstypeCodeRule());
}
private void addAfterRule(AroundProcesser<AggWrVO> processor, Map<String, String> vbatchsMap) {
IRule<AggWrVO> rule = new MMBillCodeCheckAndTrantypeRule("55A4", "vbillcode", "pk_group", "pk_org", "vtrantypecode");
processor.addAfterRule(rule);
IRule<AggWrVO> wrCreateInStockBatchCodeAfterRule = new WrInsertInStockBatchCodeAfterRule(vbatchsMap);
processor.addAfterRule(wrCreateInStockBatchCodeAfterRule);
processor.addAfterRule(new WrInsertRewriteWrNumForPutPlanRule());
IRule<AggWrVO> wrMORewriteRule = new WrMORewriteRule(2);
processor.addAfterRule(wrMORewriteRule);
IRule<AggWrVO> moDiscadNumRewriteRule = new MoDiscadNumRewriteRule(2);
processor.addAfterRule(moDiscadNumRewriteRule);
IRule<AggWrVO> snSaveRule = new WrSerialNoSaveRule();
processor.addAfterRule(snSaveRule);
/** 同步修改备料计划完成 */
IRule<AggWrVO> pickMFinishRule = new PickMFinishRule();
processor.addAfterRule(pickMFinishRule);
/** ******************** */
if (!this.isOnlyInsert) {
processor.addAfterRule(new WrIsSaveAndApproveRule());
}
processor.addAfterRule(new WrAuditAndApplyCheckRule());
processor.addAfterRule(new WrAuditAndProdInRule());
}
/** @deprecated */
@Deprecated
protected IRule<AggWrVO> getMoRewriteRule() {
return null;
}
/** @deprecated */
@Deprecated
protected IRule<AggWrVO> getMoDiscadNumRewriteRule() {
return null;
}
/** @deprecated */
@Deprecated
protected IRule<AggWrVO> getAuditRule() {
return null;
}
public boolean isOnlyInsert() {
return this.isOnlyInsert;
}
public void setOnlyInsert(boolean isOnlyInsert) {
this.isOnlyInsert = isOnlyInsert;
}
}

View File

@ -0,0 +1,110 @@
package nc.bs.mmpac.wr.rule.serialno;
import java.util.ArrayList;
import nc.bs.framework.common.NCLocator;
import nc.bs.mmpac.pmo.pac0002.bp.query.PMOItemVOQueryBP;
import nc.bs.mmpac.wr.rule.serialno.doc.WrSerialNoDocInsertControl;
import nc.impl.mmpac.pickm.PickmMaintainServiceImpl;
import nc.impl.obm.pattern.data.bill.BillQuery;
import nc.impl.pubapp.pattern.data.vo.VOQuery;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.mmpac.pickm.IPickmMaintainService;
import nc.md.persist.framework.IMDPersistenceQueryService;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.util.mmpac.wr.vochange.WrBusiVOToChangeVO;
import nc.vo.mmpac.pickm.entity.AggPickmVO;
import nc.vo.mmpac.pickm.entity.PickmHeadVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.mmpac.wr.entity.AggWrChangeVO;
import nc.vo.mmpac.wr.entity.AggWrVO;
import nc.vo.mmpac.wr.entity.WrItemVO;
import nc.vo.pub.BusinessException;
public class PickMFinishRule
extends Object
implements IRule<AggWrVO>
{
public void process(AggWrVO[] vos) {
if (MMValueCheck.isEmpty(vos)) {
return;
}
/**
* 业务逻辑
* 1.根据生产报告子表中生产订单行查看生产订单明细表
* 2.查看生产订单明细行的状态是否为完工2
* 3.若为完工状态则根据生成报告子表中生产订单行查询备料计划
* 4.修改备料计划为完成状态3
*/
for(int i = 0; i < vos.length; i++) {
AggWrVO vo = vos[i];
WrItemVO[] items = vo.getChildrenVO();
//循环生产报告子表
for(int j = 0; j < items.length; j++) {
WrItemVO item = items[j];
String cbmobid = item.getCbmobid();
String[] keys = {cbmobid};
//生产订单行查询
PMOItemVO[] pmoItemvos = (new PMOItemVOQueryBP()).getPMOItemVOsByids(keys);
//查看生产订单行状态是否为完工2
if(pmoItemvos.length > 0) {
PMOItemVO pmoItem = pmoItemvos[0];
int fitemStatus = pmoItem.getFitemstatus();
if(fitemStatus != 2) {
continue;
}
//根据生产订单行查询备料计划
// BillQuery<AggPickmVO> query = new BillQuery<AggPickmVO>(AggPickmVO.class);
// AggPickmVO[] aggVOs = (AggPickmVO[])query.query(keys);
String whereSql = "nvl(mm_pickm.dr,0) = 0 and mm_pickm.vsourcemorowid = '" + cbmobid + "'";
IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class);
// 根据主键查询得到aggvo
try {
@SuppressWarnings("unchecked")
ArrayList<AggPickmVO> aggVOs = (ArrayList<AggPickmVO>)aggvoQueryService.queryBillOfVOByCond(AggPickmVO.class, whereSql, true, false);
if(aggVOs.size() <= 0) {
continue;
}
//数组转换
AggPickmVO[] aggVOsArr = new AggPickmVO[aggVOs.size()];
boolean flag = false;
for(int z=0; z<aggVOs.size(); z++) {
AggPickmVO aggPickmVO = aggVOs.get(z);
PickmHeadVO pickmHeadVO = aggPickmVO.getParentVO();
Integer fbillstatus = pickmHeadVO.getFbillstatus();
if(fbillstatus != 2){
aggVOsArr[z] =aggVOs.get(z);
flag = true;
}
}
if(flag){
//备料计划完工
IPickmMaintainService ipickmMaintainService = NCLocator.getInstance().lookup(IPickmMaintainService.class);
ipickmMaintainService.finishPickm(aggVOsArr);
}
}catch(BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
AggWrChangeVO[] aggChangeVOs = WrBusiVOToChangeVO.changeOnlySerialNoVO(vos);
WrSerialNoDocInsertControl inSertControl = new WrSerialNoDocInsertControl();
inSertControl.process(aggChangeVOs);
}
}

View File

@ -66,12 +66,16 @@ public class InvoiceTaskPlugin implements IBackgroundWorkPlugin{
*/
//手动开启事务
TransactionFactory.getTMProxy().begin(3,0);
//修改发票信息单据号
String sscivmSql = "UPDATE sscivm_invoice set billno = '" + fphm +"' where pk_invoice = '"+ pk_invoice +"'";
dao.executeUpdate(sscivmSql);
Logger.error("---sscivmSqlExecute------"+sscivmSql);
//修改发票关联关系单据编码
String sirSql = "UPDATE sscivm_invoice_relation set billno = '" + billno +"' where pk_invoice = '"+ pk_invoice +"' and billid = '"+ csaleinvoiceid +"'";
String sirSql = "UPDATE sscivm_invoice_relation set billno = '" + fphm +"' where pk_invoice = '"+ pk_invoice +"' and billid = '"+ csaleinvoiceid +"'";
dao.executeUpdate(sirSql);
Logger.error("---sirSqlExecute------"+sirSql);
//ERP销售发票回传根据销售发票id回写发票号和单据编号
String sSaleSql = "UPDATE so_saleinvoice set vdef20 = 'Y' , vdef13 = '" + fphm + "', vbillcode = '" + billno +"' where csaleinvoiceid = '" + csaleinvoiceid + "'";
String sSaleSql = "UPDATE so_saleinvoice set vdef20 = 'Y' , vdef13 = '" + fphm + "', vbillcode = '" + fphm +"' where csaleinvoiceid = '" + csaleinvoiceid + "'";
dao.executeUpdate(sSaleSql);
Logger.error("---sSaleSqlExecute------"+sSaleSql);
//根据销售发票id 回写下游应收单表头发票号
@ -91,7 +95,7 @@ public class InvoiceTaskPlugin implements IBackgroundWorkPlugin{
Logger.error("---recItemSqlExecute------"+recItemSql);
//查询销售发票下游单据如果有将下游单据表体字段来源单据号更新成新的发票号
String saleOutSql = "UPDATE ic_saleout_b \n" +
"SET vsourcebillcode = '"+ billno +"' \n" +
"SET vsourcebillcode = '"+ fphm +"' \n" +
"WHERE\n" +
"csourcetype = '32' \n" +
"AND csourcebillhid = '" + csaleinvoiceid +"'";