From 6272e4bcfc6399840d4fd897d56f5ad4fd8e224f Mon Sep 17 00:00:00 2001 From: lihao Date: Fri, 19 Dec 2025 14:20:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdatePmoAndFinProdInRule.java | 72 ++++++++++++ .../action/main/ApproveSaleOrderAction.java | 4 +- .../action/main/UpdateSaleOrderAction.java | 7 ++ .../action/ReviseSaveSaleOrderAction.java | 104 ++++++++++++++++++ 4 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 so/src/private/nc/bs/so/m30/rule/maintainprocess/UpdatePmoAndFinProdInRule.java create mode 100644 so/src/private/nc/impl/so/m30/revise/action/ReviseSaveSaleOrderAction.java diff --git a/so/src/private/nc/bs/so/m30/rule/maintainprocess/UpdatePmoAndFinProdInRule.java b/so/src/private/nc/bs/so/m30/rule/maintainprocess/UpdatePmoAndFinProdInRule.java new file mode 100644 index 00000000..4b4b1071 --- /dev/null +++ b/so/src/private/nc/bs/so/m30/rule/maintainprocess/UpdatePmoAndFinProdInRule.java @@ -0,0 +1,72 @@ +package nc.bs.so.m30.rule.maintainprocess; + +import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.jdbc.framework.processor.MapListProcessor; +import nc.vo.ic.m46.entity.FinProdInBodyVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +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; +import java.util.Map; + +/** + * 销售订单在单价vbdef25变更后 需要同步变更流程生产订单和产成品入库 + * lihao + */ +public class UpdatePmoAndFinProdInRule implements IRule { + @Override + public void process(SaleOrderVO[] saleOrderVOS) { + if (saleOrderVOS == null || saleOrderVOS.length == 0) { + return; + }try { + BaseDAO dao = new BaseDAO(); + for (SaleOrderVO saleOrderVO : saleOrderVOS) { + String id=saleOrderVO.getPrimaryKey(); + for (SaleOrderBVO saleOrderBVO:saleOrderVO.getChildrenVO()){ + // 无税单价 + UFDouble nqtorigprice=saleOrderBVO.getNqtorigprice(); + // 查询流程生产订单 + String mosql = "select cmoid,nastnum,vdef25 from mm_mo where vsrcbid = '"+saleOrderBVO.getCsaleorderbid()+"' and dr = 0"; + List> mo = (List>) dao.executeQuery(mosql, new MapListProcessor()); + for (Map map : mo) { + UFDouble nastnum= new UFDouble(map.get("nastnum").toString()); + UFDouble vdef25= new UFDouble(map.get("vdef25") !=null ? map.get("vdef25").toString():"0"); + if(vdef25.compareTo(nqtorigprice) != 0){ + UFDouble newVdef26 = nqtorigprice.multiply(nastnum); + String updatemosql = "update mm_mo set vdef25='"+nqtorigprice.toString()+"',vdef26='"+newVdef26.toString()+"' where cmoid = '"+map.get("cmoid")+"' and dr = 0"; + dao.executeUpdate(updatemosql); + // 查询生产报告 + String wrsql = "select pk_wr_product from mm_wr_product where cbmobid = '"+map.get("cmoid")+"' and dr = 0"; + List> wr = (List>) dao.executeQuery(wrsql, new MapListProcessor()); + for (Map wr1 : wr) { + // 查询产成品入库但 + String insql = "select cgeneralbid,vbdef25,vbdef26,nassistnum from ic_finprodin_b where VSOURCEROWNO = '"+wr1.get("pk_wr_product")+"' and dr = 0"; + List> in = (List>) dao.executeQuery(insql, new MapListProcessor()); + for (Map in1 : in) { + UFDouble nassistnum= new UFDouble(in1.get("nassistnum").toString()); + UFDouble vbdef25= new UFDouble(in1.get("vbdef25")!=null ? in1.get("vbdef25").toString():"0"); + if(vbdef25.compareTo(nqtorigprice) != 0){ + UFDouble newVbdef26 = nqtorigprice.multiply(nastnum); + String updateinsql = "update ic_finprodin_b set vbdef25='"+nqtorigprice.toString()+"',vbdef26='"+newVbdef26.toString()+"' where cgeneralbid = '"+in1.get("cgeneralbid")+"' and dr = 0"; + dao.executeUpdate(updateinsql); + } + } + } + + } + } + + + } + + } + } catch (DAOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/so/src/private/nc/impl/so/m30/action/main/ApproveSaleOrderAction.java b/so/src/private/nc/impl/so/m30/action/main/ApproveSaleOrderAction.java index fb30851f..8d8775da 100644 --- a/so/src/private/nc/impl/so/m30/action/main/ApproveSaleOrderAction.java +++ b/so/src/private/nc/impl/so/m30/action/main/ApproveSaleOrderAction.java @@ -169,8 +169,8 @@ public class ApproveSaleOrderAction { processer.addAfterRule(new AfterApprovingSynchronizeRuleMES()); // 在审批后推送到QMS系统 processer.addAfterRule(new AfterApprovingSynchronizeRuleQMS()); - // 在审批后推送到高压MES - processer.addAfterRule(new AfterSoSyncRuleGyMes()); + // // 在审批后推送到高压MES + // processer.addAfterRule(new AfterSoSyncRuleGyMes()); } private boolean isExistDelivery(String ctranstype) { diff --git a/so/src/private/nc/impl/so/m30/action/main/UpdateSaleOrderAction.java b/so/src/private/nc/impl/so/m30/action/main/UpdateSaleOrderAction.java index 9df73431..f9f12377 100644 --- a/so/src/private/nc/impl/so/m30/action/main/UpdateSaleOrderAction.java +++ b/so/src/private/nc/impl/so/m30/action/main/UpdateSaleOrderAction.java @@ -2,9 +2,11 @@ package nc.impl.so.m30.action.main; import nc.bs.so.m30.maintain.UpdateSaleOrderBP; import nc.bs.so.m30.plugin.Action30PlugInPoint; +import nc.bs.so.m30.rule.approve.AfterSoSyncRuleGyMes; import nc.bs.so.m30.rule.maintainprocess.CompareDimensionModifyRule; import nc.bs.so.m30.rule.maintainprocess.FillupDataWhenUpdateRule; import nc.bs.so.m30.rule.maintainprocess.NullRule; +import nc.bs.so.m30.rule.maintainprocess.UpdatePmoAndFinProdInRule; import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; import nc.vo.pubapp.pattern.log.TimeLog; @@ -40,6 +42,11 @@ public class UpdateSaleOrderAction { private void addAfterRule(CompareAroundProcesser processer) { processer.addAfterRule(new NullRule()); processer.addAfterRule(new CompareDimensionModifyRule()); + // 在变更后推送到高压MES + // processer.addAfterRule(new AfterSoSyncRuleGyMes()); + + // 销售订单在单价vbdef25变更后 需要同步变更流程生产订单和产成品入库 + processer.addAfterRule(new UpdatePmoAndFinProdInRule()); } diff --git a/so/src/private/nc/impl/so/m30/revise/action/ReviseSaveSaleOrderAction.java b/so/src/private/nc/impl/so/m30/revise/action/ReviseSaveSaleOrderAction.java new file mode 100644 index 00000000..bda74b56 --- /dev/null +++ b/so/src/private/nc/impl/so/m30/revise/action/ReviseSaveSaleOrderAction.java @@ -0,0 +1,104 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package nc.impl.so.m30.revise.action; + +import nc.bs.so.m30.maintain.util.VOCheckFor30R; +import nc.bs.so.m30.plugin.Action30PlugInPoint; +import nc.bs.so.m30.revise.SaveReviseSaleOrderBP; +import nc.bs.so.m30.rule.feature.CfgMatchCheckRule; +import nc.bs.so.m30.rule.feature.CfgMatchSaveRule; +import nc.bs.so.m30.rule.maintaincheck.CheckNumPriceMnyRule; +import nc.bs.so.m30.rule.maintainprocess.FillupFretexchangeRule; +import nc.bs.so.m30.rule.maintainprocess.SaleOrderCheckNumAndMnyRule; +import nc.bs.so.m30.rule.maintainprocess.UpdatePmoAndFinProdInRule; +import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.impl.pubapp.pattern.rule.IRule; +import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser; +import nc.impl.so.m30.revise.action.rule.FillupDataRule; +import nc.impl.so.m30.revise.action.rule.OffsetCheckRule; +import nc.impl.so.m30.revise.action.rule.RenovateARByHidsBeginRule; +import nc.impl.so.m30.revise.action.rule.RenovateARByHidsEndRule; +import nc.impl.so.m30.revise.action.rule.ReviseFeatureCheckRule; +import nc.impl.so.m30.revise.action.rule.RmNtotalorigmnyCheckRule; +import nc.impl.so.m30.revise.action.rule.SHCrossRuleValidate; +import nc.impl.so.m30.revise.action.rule.SaleOrderReviseCheckRule; +import nc.vo.credit.engrossmaintain.pub.action.M30EngrossAction; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.log.TimeLog; +import nc.vo.so.m30.entity.SaleOrderVO; +import nc.vo.so.m30.revise.entity.SaleOrderHistoryVO; + +public class ReviseSaveSaleOrderAction { + public static final String BODY_METANAME = "so.orderhistory_b"; + public static final String HEAD_METANAME = "so.orderhistory"; + public static final String TABLE_HISTORY = "so_orderhistory"; + public static final String TABLE_HISTORY_B = "so_orderhistory_b"; + + public ReviseSaveSaleOrderAction() { + } + + public SaleOrderHistoryVO[] reviseSave(SaleOrderHistoryVO[] bills) throws BusinessException { + TimeLog.logStart(); + BillTransferTool transferTool = new BillTransferTool(bills); + SaleOrderHistoryVO[] fullbills = (SaleOrderHistoryVO[])transferTool.getClientFullInfoBill(); + TimeLog.info("补全前台VO、获得修改前VO"); + VOCheckFor30R vocheck = new VOCheckFor30R(); + SaleOrderHistoryVO[] originBills = vocheck.voCheckAndQueryOriginForRevise(bills); + CompareAroundProcesser compareProcesser = new CompareAroundProcesser(Action30PlugInPoint.ReviseSaveAction); + this.addBeforeRule(compareProcesser); + TimeLog.logStart(); + compareProcesser.before(fullbills, originBills); + TimeLog.info("调用修订保存前操作插入点"); + SaveReviseSaleOrderBP updateBP = new SaveReviseSaleOrderBP(); + SaleOrderHistoryVO[] ret = updateBP.update(fullbills, originBills); + TimeLog.logStart(); + this.addAfterRule(compareProcesser); + compareProcesser.after(ret, fullbills); + TimeLog.info("调用修订保存后操作插入点"); + TimeLog.logStart(); + ret = (SaleOrderHistoryVO[])transferTool.getBillForToClient(ret); + TimeLog.info("组织返回值,返回轻量级VO"); + TimeLog.logStart(); + TimeLog.info("业务日志"); + return ret; + } + + private void addBeforeRule(CompareAroundProcesser compareProcesser) { + IRule rule = new FillupDataRule(); + compareProcesser.addBeforeRule(rule); + IRule var4 = new SaleOrderReviseCheckRule(); + compareProcesser.addBeforeRule(var4); + IRule var5 = new SaleOrderCheckNumAndMnyRule(); + compareProcesser.addBeforeRule(var5); + IRule var6 = new OffsetCheckRule(); + compareProcesser.addBeforeRule(var6); + ICompareRule comparerule = new ReviseFeatureCheckRule(); + compareProcesser.addBeforeRule(comparerule); + IRule var7 = new CfgMatchSaveRule(); + compareProcesser.addBeforeRule(var7); + IRule var8 = new CfgMatchCheckRule(); + compareProcesser.addBeforeRule(var8); + IRule var9 = new FillupFretexchangeRule(); + compareProcesser.addBeforeRule(var9); + IRule var10 = new RenovateARByHidsBeginRule(M30EngrossAction.M30ReVise); + compareProcesser.addBeforeRule(var10); + IRule var11 = new RmNtotalorigmnyCheckRule(); + compareProcesser.addBeforeRule(var11); + IRule var12 = new SHCrossRuleValidate(); + compareProcesser.addBeforeRule(var12); + } + + private void addAfterRule(CompareAroundProcesser compareProcesser) { + IRule rule = null; + IRule var3 = new RenovateARByHidsEndRule(M30EngrossAction.M30ReVise); + compareProcesser.addAfterRule(var3); + IRule var4 = new CheckNumPriceMnyRule(); + compareProcesser.addAfterRule(var4); + IRule updatePmoAndFinProdInRule = new UpdatePmoAndFinProdInRule(); + compareProcesser.addAfterRule(updatePmoAndFinProdInRule); + } +}