销售订单保存后回写物料参考售价

This commit is contained in:
lj 2025-03-25 10:25:21 +08:00
parent daa822bc63
commit 175d1bfc9c
3 changed files with 415 additions and 0 deletions

View File

@ -0,0 +1,176 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.so.m30.maintain;
import nc.bs.scmpub.rule.CrossRuleValidateRule;
import nc.bs.so.m30.maintain.rule.insert.RewriteBillInsertRule;
import nc.bs.so.m30.maintain.rule.insert.RewritePromotePriceInsertRule;
import nc.bs.so.m30.maintain.rule.insert.WritebackMaterialPriceRule;
import nc.bs.so.m30.plugin.BP30PlugInPoint;
import nc.bs.so.m30.rule.atp.SaleOrderVOATPAfterRule;
import nc.bs.so.m30.rule.atp.SaleOrderVOATPBeforeRule;
import nc.bs.so.m30.rule.billcode.AddNewBillCodeRule;
import nc.bs.so.m30.rule.billcode.CheckUniqueBillCodeRule;
import nc.bs.so.m30.rule.businessinfo.SaveTransferMsgRule;
import nc.bs.so.m30.rule.credit.RenovateARByHidsBeginRule;
import nc.bs.so.m30.rule.credit.RenovateARByHidsEndRule;
import nc.bs.so.m30.rule.feature.CfgMatchCheckRule;
import nc.bs.so.m30.rule.feature.CfgMatchSaveRule;
import nc.bs.so.m30.rule.m35.ArsubOffsetBeforeSaveRule;
import nc.bs.so.m30.rule.m35.LrgCashMarCheckRule;
import nc.bs.so.m30.rule.maintaincheck.CheckDateRule;
import nc.bs.so.m30.rule.maintaincheck.CheckLrgTotalMoney;
import nc.bs.so.m30.rule.maintaincheck.CheckMaterilaOVidRule;
import nc.bs.so.m30.rule.maintaincheck.CheckNumPriceMnyRule;
import nc.bs.so.m30.rule.maintaincheck.CheckSaveBillRule;
import nc.bs.so.m30.rule.maintaincheck.CheckSettleOrgRepeat;
import nc.bs.so.m30.rule.maintaincheck.CheckValueWhenIsdeliveryRule;
import nc.bs.so.m30.rule.maintainprocess.FillupFretexchangeRule;
import nc.bs.so.m30.rule.maintainprocess.FillupRedundanceDataRule;
import nc.bs.so.m30.rule.maintainprocess.InsertSoBalanceWhenAddNewRule;
import nc.bs.so.m30.rule.maintainprocess.SaleOrderCheckNumAndMnyRule;
import nc.bs.so.m30.rule.maintainprocess.SourceToSaleOrderMsgRule;
import nc.bs.so.m30.rule.maintainprocess.ThisGatheringRule;
import nc.bs.so.m30.rule.pm.CheckBusiForPMRule;
import nc.bs.so.m30.rule.pm.CheckProjectMFGRule;
import nc.bs.so.m30.rule.pm.CheckProjectValueRule;
import nc.bs.so.m30.rule.reserve.AutoReserveRule;
import nc.bs.so.m30.rule.rewrite.price.RewritePriceFormRule;
import nc.bs.so.pub.rule.FillBillTailInfoRuleForIns;
import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
import nc.impl.pubapp.pattern.data.bill.BillInsert;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.AroundProcesser;
import nc.itf.scmpub.reference.uap.group.SysInitGroupQuery;
import nc.vo.credit.engrossmaintain.pub.action.M30EngrossAction;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pubapp.pattern.log.TimeLog;
import nc.vo.pubapp.util.SetAddAuditInfoRule;
import nc.vo.scmpub.rule.AutoMaterialAssignRule;
import nc.vo.scmpub.rule.SaleOrgEnableCheckRule;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import nccloud.bs.so.mobile.saleorder.operation.rule.MobAfterSaveMessageRule;
public class InsertSaleOrderBP {
public InsertSaleOrderBP() {
}
public SaleOrderVO[] insert(SaleOrderVO[] bills) {
AroundProcesser<SaleOrderVO> processer = new AroundProcesser(BP30PlugInPoint.InsertBP);
TimeLog.logStart();
this.addBeforeRule(processer);
processer.before(bills);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0066"));
TimeLog.logStart();
BillInsert<SaleOrderVO> bo = new BillInsert();
SaleOrderVO[] vos = (SaleOrderVO[])bo.insert(bills);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0067"));
TimeLog.logStart();
this.addAfterRule(processer);
processer.after(vos);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0068"));
return vos;
}
private void addAfterRule(AroundProcesser<SaleOrderVO> processer) {
IRule<SaleOrderVO> rule = null;
IRule<SaleOrderVO> var4 = new InsertSoBalanceWhenAddNewRule();
processer.addAfterRule(var4);
IRule<SaleOrderVO> var5 = new RenovateARByHidsEndRule(M30EngrossAction.M30Insert);
processer.addAfterRule(var5);
IRule<SaleOrderVO> var6 = new ThisGatheringRule();
processer.addAfterRule(var6);
IRule<SaleOrderVO> var7 = new CheckUniqueBillCodeRule();
processer.addAfterRule(var7);
IRule<SaleOrderVO> var8 = new RewriteBillInsertRule();
processer.addAfterRule(var8);
IRule<SaleOrderVO> var9 = new SaveTransferMsgRule();
processer.addAfterRule(var9);
IRule<SaleOrderVO> var10 = new RewritePriceFormRule();
processer.addAfterRule(var10);
IRule<SaleOrderVO> var11 = new SourceToSaleOrderMsgRule();
processer.addAfterRule(var11);
boolean icEnable = SysInitGroupQuery.isICEnabled();
if (icEnable) {
IRule<SaleOrderVO> var12 = new SaleOrderVOATPAfterRule();
processer.addAfterRule(var12);
IRule<SaleOrderVO> var13 = new AutoReserveRule();
processer.addAfterRule(var13);
}
if (SysInitGroupQuery.isPRICEEnabled()) {
IRule<SaleOrderVO> var14 = new RewritePromotePriceInsertRule();
processer.addAfterRule(var14);
}
/**
* 销售订单新增回写参考物料售价规则
*/
IRule<SaleOrderVO> var15 = new WritebackMaterialPriceRule();
processer.addAfterRule(var15);
processer.addAfterRule(new MobAfterSaveMessageRule());
}
private void addBeforeRule(AroundProcesser<SaleOrderVO> processer) {
IRule<SaleOrderVO> rule = new SaleOrgEnableCheckRule();
processer.addBeforeRule(rule);
IRule<SaleOrderVO> var4 = new FillupRedundanceDataRule();
processer.addBeforeRule(var4);
IRule<SaleOrderVO> var5 = new FillupFretexchangeRule();
processer.addBeforeRule(var5);
IRule<SaleOrderVO> var6 = new AddNewBillCodeRule();
processer.addBeforeRule(var6);
IRule<SaleOrderVO> var7 = new CheckNumPriceMnyRule();
processer.addBeforeRule(var7);
IRule<SaleOrderVO> var8 = new SaleOrderCheckNumAndMnyRule();
processer.addBeforeRule(var8);
IRule<SaleOrderVO> var9 = new CheckMaterilaOVidRule();
processer.addBeforeRule(var9);
IRule<SaleOrderVO> var10 = new CheckSettleOrgRepeat();
processer.addBeforeRule(var10);
IRule<SaleOrderVO> var11 = new CheckDateRule();
processer.addBeforeRule(var11);
processer.addBeforeRule(new AutoMaterialAssignRule("cmaterialid", new String[]{"pk_org"}, new String[]{"pk_org", "csendstockorgid", "csettleorgid", "carorgid", "cprofitcenterid", "csprofitcenterid"}));
IRule<SaleOrderVO> var12 = new CfgMatchSaveRule();
processer.addBeforeRule(var12);
IRule<SaleOrderVO> var13 = new CfgMatchCheckRule();
processer.addBeforeRule(var13);
IRule<SaleOrderVO> var14 = new CheckSaveBillRule();
processer.addBeforeRule(var14);
IRule<SaleOrderVO> var15 = new FillBillTailInfoRuleForIns();
processer.addBeforeRule(var15);
IRule<SaleOrderVO> var16 = new SetAddAuditInfoRule();
processer.addBeforeRule(var16);
IRule<SaleOrderVO> var17 = new RenovateARByHidsBeginRule(M30EngrossAction.M30Insert);
processer.addBeforeRule(var17);
boolean icEnable = SysInitGroupQuery.isICEnabled();
if (icEnable) {
IRule<SaleOrderVO> var18 = new SaleOrderVOATPBeforeRule();
processer.addBeforeRule(var18);
}
IRule<SaleOrderVO> var19 = new LrgCashMarCheckRule();
processer.addBeforeRule(var19);
IRule<SaleOrderVO> var20 = new ArsubOffsetBeforeSaveRule();
processer.addBeforeRule(var20);
IRule<SaleOrderVO> var21 = new CheckLrgTotalMoney();
processer.addBeforeRule(var21);
IRule<SaleOrderVO> var22 = new UserDefSaveRule(new Class[]{SaleOrderHVO.class, SaleOrderBVO.class});
processer.addBeforeRule(var22);
IRule<SaleOrderVO> var23 = new CrossRuleValidateRule();
processer.addBeforeRule(var23);
IRule<SaleOrderVO> var24 = new CheckProjectValueRule();
processer.addBeforeRule(var24);
IRule<SaleOrderVO> var25 = new CheckBusiForPMRule();
processer.addBeforeRule(var25);
IRule<SaleOrderVO> var26 = new CheckValueWhenIsdeliveryRule();
processer.addBeforeRule(var26);
IRule<SaleOrderVO> var27 = new CheckProjectMFGRule();
processer.addBeforeRule(var27);
}
}

View File

@ -0,0 +1,183 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.so.m30.maintain;
import nc.bs.scmpub.rule.CrossRuleValidateRule;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
import nc.bs.so.m30.maintain.rule.insert.WritebackMaterialPriceRule;
import nc.bs.so.m30.maintain.rule.update.RewriteBillUpdateRule;
import nc.bs.so.m30.maintain.rule.update.RewritePromotePriceUpdateRule;
import nc.bs.so.m30.plugin.BP30PlugInPoint;
import nc.bs.so.m30.rule.atp.SaleOrderVOATPAfterRule;
import nc.bs.so.m30.rule.atp.SaleOrderVOATPBeforeRule;
import nc.bs.so.m30.rule.billcode.CheckUniqueBillCodeRule;
import nc.bs.so.m30.rule.billcode.UpdateBillCodeRule;
import nc.bs.so.m30.rule.businessinfo.SaveTransferMsgRule;
import nc.bs.so.m30.rule.credit.RenovateARByHidsBeginRule;
import nc.bs.so.m30.rule.credit.RenovateARByHidsEndRule;
import nc.bs.so.m30.rule.feature.CfgMatchCheckRule;
import nc.bs.so.m30.rule.feature.CfgMatchSaveRule;
import nc.bs.so.m30.rule.m35.ArsubOffsetBeforeSaveRule;
import nc.bs.so.m30.rule.m35.LrgCashMarCheckRule;
import nc.bs.so.m30.rule.maintaincheck.CheckCanUpdateWhenAuditing;
import nc.bs.so.m30.rule.maintaincheck.CheckDateRule;
import nc.bs.so.m30.rule.maintaincheck.CheckLrgTotalMoney;
import nc.bs.so.m30.rule.maintaincheck.CheckMaterilaOVidRule;
import nc.bs.so.m30.rule.maintaincheck.CheckNumPriceMnyRule;
import nc.bs.so.m30.rule.maintaincheck.CheckSaveBillRule;
import nc.bs.so.m30.rule.maintaincheck.CheckSettleOrgRepeat;
import nc.bs.so.m30.rule.maintaincheck.CheckValueWhenIsdeliveryRule;
import nc.bs.so.m30.rule.maintainprocess.FillupFretexchangeRule;
import nc.bs.so.m30.rule.maintainprocess.FillupRedundanceDataRule;
import nc.bs.so.m30.rule.maintainprocess.SaleOrderCheckNumAndMnyRule;
import nc.bs.so.m30.rule.maintainprocess.ThisGatheringRule;
import nc.bs.so.m30.rule.maintainprocess.UpdateSoBalanceWhenUpdateM30HeadRule;
import nc.bs.so.m30.rule.maintainprocess.UpdateSoBalanceWhenUpdateRule;
import nc.bs.so.m30.rule.pm.CheckBusiForPMRule;
import nc.bs.so.m30.rule.pm.CheckProjectMFGRule;
import nc.bs.so.m30.rule.pm.CheckProjectValueRule;
import nc.bs.so.m30.rule.reserve.AutoReserveRule;
import nc.bs.so.m30.rule.reserve.ReserveUpdateRule;
import nc.bs.so.m30.rule.rewrite.price.RewritePriceFormRule;
import nc.bs.so.pub.rule.CheckApproverRule;
import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
import nc.impl.pubapp.pattern.data.bill.BillUpdate;
import nc.impl.pubapp.pattern.rule.ICompareRule;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.itf.scmpub.reference.uap.group.SysInitGroupQuery;
import nc.vo.credit.engrossmaintain.pub.action.M30EngrossAction;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.pubapp.pattern.log.TimeLog;
import nc.vo.pubapp.util.SetUpdateAuditInfoRule;
import nc.vo.scmpub.rule.AutoMaterialAssignRule;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderHVO;
import nc.vo.so.m30.entity.SaleOrderVO;
public class UpdateSaleOrderBP {
public UpdateSaleOrderBP() {
}
public SaleOrderVO[] update(SaleOrderVO[] bills, SaleOrderVO[] originBills) {
CompareAroundProcesser<SaleOrderVO> processer = new CompareAroundProcesser(BP30PlugInPoint.UpdateBP);
TimeLog.logStart();
this.addBeforeRule(processer);
processer.before(bills, originBills);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0069"));
TimeLog.logStart();
BillUpdate<SaleOrderVO> bo = new BillUpdate();
SaleOrderVO[] vos = (SaleOrderVO[])bo.update(bills, originBills);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0070"));
TimeLog.logStart();
this.addAfterRule(processer);
processer.after(vos, originBills);
TimeLog.info(NCLangRes4VoTransl.getNCLangRes().getStrByID("4006011_0", "04006011-0071"));
return vos;
}
private void addAfterRule(CompareAroundProcesser<SaleOrderVO> processer) {
IRule<SaleOrderVO> rule = null;
IRule<SaleOrderVO> var5 = new UpdateSoBalanceWhenUpdateRule();
processer.addAfterRule(var5);
IRule<SaleOrderVO> var6 = new RenovateARByHidsEndRule(M30EngrossAction.M30Edit);
processer.addAfterRule(var6);
IRule<SaleOrderVO> var7 = new ThisGatheringRule();
processer.addAfterRule(var7);
IRule<SaleOrderVO> var8 = new CheckUniqueBillCodeRule();
processer.addAfterRule(var8);
ICompareRule<SaleOrderVO> compareRule = new RewriteBillUpdateRule();
processer.addAfterRule(compareRule);
IRule<SaleOrderVO> var9 = new SaveTransferMsgRule();
processer.addAfterRule(var9);
IRule<SaleOrderVO> var10 = new RewritePriceFormRule();
processer.addAfterRule(var10);
IRule<SaleOrderVO> var11 = new UpdateSoBalanceWhenUpdateM30HeadRule();
processer.addAfterRule(var11);
boolean icEnable = SysInitGroupQuery.isICEnabled();
if (icEnable) {
IRule<SaleOrderVO> var12 = new SaleOrderVOATPAfterRule();
processer.addAfterRule(var12);
IRule<SaleOrderVO> var13 = new ReserveUpdateRule();
processer.addAfterRule(var13);
IRule<SaleOrderVO> var14 = new AutoReserveRule();
processer.addAfterRule(var14);
}
if (SysInitGroupQuery.isPRICEEnabled()) {
ICompareRule<SaleOrderVO> var15 = new RewritePromotePriceUpdateRule();
processer.addAfterRule(var15);
}
/**
* 销售订单新增回写参考物料售价规则
*/
IRule<SaleOrderVO> var16 = new WritebackMaterialPriceRule();
processer.addAfterRule(var16);
}
private void addBeforeRule(CompareAroundProcesser<SaleOrderVO> processer) {
IRule<SaleOrderVO> rule = null;
IRule<SaleOrderVO> var5 = new VOSagaFrozenValidateRule();
processer.addBeforeRule(var5);
IRule<SaleOrderVO> var6 = new CheckCanUpdateWhenAuditing();
processer.addBeforeRule(var6);
IRule<SaleOrderVO> var7 = new CheckApproverRule();
processer.addBeforeRule(var7);
IRule<SaleOrderVO> var8 = new CfgMatchSaveRule();
processer.addBeforeRule(var8);
IRule<SaleOrderVO> var9 = new CfgMatchCheckRule();
processer.addBeforeRule(var9);
IRule<SaleOrderVO> var10 = new FillupRedundanceDataRule();
processer.addBeforeRule(var10);
IRule<SaleOrderVO> var11 = new FillupFretexchangeRule();
processer.addBeforeRule(var11);
IRule<SaleOrderVO> var12 = new SetUpdateAuditInfoRule();
processer.addBeforeRule(var12);
ICompareRule<SaleOrderVO> compareRule = new UpdateBillCodeRule();
processer.addBeforeRule(compareRule);
IRule<SaleOrderVO> var13 = new CheckMaterilaOVidRule();
processer.addBeforeRule(var13);
IRule<SaleOrderVO> var14 = new CheckNumPriceMnyRule();
processer.addBeforeRule(var14);
IRule<SaleOrderVO> var15 = new SaleOrderCheckNumAndMnyRule();
processer.addBeforeRule(var15);
IRule<SaleOrderVO> var16 = new CheckSettleOrgRepeat();
processer.addBeforeRule(var16);
IRule<SaleOrderVO> var17 = new CheckDateRule();
processer.addBeforeRule(var17);
processer.addBeforeRule(new AutoMaterialAssignRule("cmaterialid", new String[]{"pk_org"}, new String[]{"pk_org", "csendstockorgid", "csettleorgid", "carorgid", "cprofitcenterid", "csprofitcenterid"}));
IRule<SaleOrderVO> var18 = new CheckSaveBillRule();
processer.addBeforeRule(var18);
IRule<SaleOrderVO> var19 = new RenovateARByHidsBeginRule(M30EngrossAction.M30Edit);
processer.addBeforeRule(var19);
boolean icEnable = SysInitGroupQuery.isICEnabled();
if (icEnable) {
IRule<SaleOrderVO> var20 = new SaleOrderVOATPBeforeRule();
processer.addBeforeRule(var20);
}
IRule<SaleOrderVO> var21 = new LrgCashMarCheckRule();
processer.addBeforeRule(var21);
IRule<SaleOrderVO> var22 = new ArsubOffsetBeforeSaveRule();
processer.addBeforeRule(var22);
IRule<SaleOrderVO> var23 = new CheckLrgTotalMoney();
processer.addBeforeRule(var23);
IRule<SaleOrderVO> var24 = new CrossRuleValidateRule();
processer.addBeforeRule(var24);
IRule<SaleOrderVO> var25 = new UserDefSaveRule(new Class[]{SaleOrderHVO.class, SaleOrderBVO.class});
processer.addBeforeRule(var25);
IRule<SaleOrderVO> var26 = new CheckProjectValueRule();
processer.addBeforeRule(var26);
IRule<SaleOrderVO> var27 = new CheckBusiForPMRule();
processer.addBeforeRule(var27);
IRule<SaleOrderVO> var28 = new CheckValueWhenIsdeliveryRule();
processer.addBeforeRule(var28);
IRule<SaleOrderVO> var29 = new CheckProjectMFGRule();
processer.addBeforeRule(var29);
}
}

View File

@ -0,0 +1,56 @@
package nc.bs.so.m30.maintain.rule.insert;
import nc.bs.framework.common.NCLocator;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.bd.material.sale.IMaterialSaleService;
import nc.md.persist.framework.IMDPersistenceQueryService;
import nc.vo.bd.material.sale.MaterialSaleVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDouble;
import nc.vo.so.m30.entity.SaleOrderBVO;
import nc.vo.so.m30.entity.SaleOrderVO;
import java.util.ArrayList;
import java.util.List;
public class WritebackMaterialPriceRule implements IRule<SaleOrderVO>{
@Override
public void process(SaleOrderVO[] vos) {
// TODO Auto-generated method stub
for (SaleOrderVO vo : vos) {
//根据销售订单子表的物料编码和销售组织查询物料主表
SaleOrderBVO[] saleOrderitems = vo.getChildrenVO();
//循环销售订单子表
for(int i = 0; i < saleOrderitems.length; i++) {
SaleOrderBVO item = saleOrderitems[i];
//取销售订单子表的物料编码和销售组织
String cmaterialvid = item.getCmaterialvid(); //物料主键
String pk_org = item.getPk_org(); //销售组织
UFDouble nqtorigprice = item.getNqtorigprice(); //无税单价
IMDPersistenceQueryService aggvoQueryService = NCLocator.getInstance().lookup(IMDPersistenceQueryService.class);
// 条件查询得到物料MaterialSaleVO
try {
String whereSql = "nvl(bd_materialsale.dr,0) = 0 and bd_materialsale.pk_material = '" + cmaterialvid + "' and bd_materialsale.pk_org = '" + pk_org + "'";
@SuppressWarnings("unchecked")
ArrayList<MaterialSaleVO> materialSaleVOs = (ArrayList<MaterialSaleVO>)aggvoQueryService.queryBillOfVOByCond(MaterialSaleVO.class, whereSql, true, false);
if(materialSaleVOs.size() <= 0) {
continue;
}
for(MaterialSaleVO materialSaleVO : materialSaleVOs) {
materialSaleVO.setResaleprice(nqtorigprice);
//实体更新物料销售表
// IMaterialSaleService iMaterialSaleService = ServiceLocator.find(IMaterialSaleService.class);
IMaterialSaleService iMaterialSaleService = NCLocator.getInstance().lookup(IMaterialSaleService.class);
iMaterialSaleService.updateMaterialSaleVO(materialSaleVO);
}
}catch(BusinessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}