This commit is contained in:
lihao 2025-12-19 14:20:01 +08:00
parent 1ee7936bbb
commit 6272e4bcfc
4 changed files with 185 additions and 2 deletions

View File

@ -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<SaleOrderVO> {
@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<Map<String, Object>> mo = (List<Map<String, Object>>) dao.executeQuery(mosql, new MapListProcessor());
for (Map<String, Object> 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<Map<String, Object>> wr = (List<Map<String, Object>>) dao.executeQuery(wrsql, new MapListProcessor());
for (Map<String, Object> wr1 : wr) {
// 查询产成品入库但
String insql = "select cgeneralbid,vbdef25,vbdef26,nassistnum from ic_finprodin_b where VSOURCEROWNO = '"+wr1.get("pk_wr_product")+"' and dr = 0";
List<Map<String, Object>> in = (List<Map<String, Object>>) dao.executeQuery(insql, new MapListProcessor());
for (Map<String, Object> 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);
}
}
}

View File

@ -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) {

View File

@ -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<SaleOrderVO> processer) {
processer.addAfterRule(new NullRule());
processer.addAfterRule(new CompareDimensionModifyRule());
// 在变更后推送到高压MES
// processer.addAfterRule(new AfterSoSyncRuleGyMes());
// 销售订单在单价vbdef25变更后 需要同步变更流程生产订单和产成品入库
processer.addAfterRule(new UpdatePmoAndFinProdInRule());
}

View File

@ -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<SaleOrderHistoryVO> transferTool = new BillTransferTool(bills);
SaleOrderHistoryVO[] fullbills = (SaleOrderHistoryVO[])transferTool.getClientFullInfoBill();
TimeLog.info("补全前台VO、获得修改前VO");
VOCheckFor30R vocheck = new VOCheckFor30R();
SaleOrderHistoryVO[] originBills = vocheck.voCheckAndQueryOriginForRevise(bills);
CompareAroundProcesser<SaleOrderVO> 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<SaleOrderVO> compareProcesser) {
IRule<SaleOrderVO> rule = new FillupDataRule();
compareProcesser.addBeforeRule(rule);
IRule<SaleOrderVO> var4 = new SaleOrderReviseCheckRule();
compareProcesser.addBeforeRule(var4);
IRule<SaleOrderVO> var5 = new SaleOrderCheckNumAndMnyRule();
compareProcesser.addBeforeRule(var5);
IRule<SaleOrderVO> var6 = new OffsetCheckRule();
compareProcesser.addBeforeRule(var6);
ICompareRule<SaleOrderVO> comparerule = new ReviseFeatureCheckRule();
compareProcesser.addBeforeRule(comparerule);
IRule<SaleOrderVO> var7 = new CfgMatchSaveRule();
compareProcesser.addBeforeRule(var7);
IRule<SaleOrderVO> var8 = new CfgMatchCheckRule();
compareProcesser.addBeforeRule(var8);
IRule<SaleOrderVO> var9 = new FillupFretexchangeRule();
compareProcesser.addBeforeRule(var9);
IRule<SaleOrderVO> var10 = new RenovateARByHidsBeginRule(M30EngrossAction.M30ReVise);
compareProcesser.addBeforeRule(var10);
IRule<SaleOrderVO> var11 = new RmNtotalorigmnyCheckRule();
compareProcesser.addBeforeRule(var11);
IRule<SaleOrderVO> var12 = new SHCrossRuleValidate();
compareProcesser.addBeforeRule(var12);
}
private void addAfterRule(CompareAroundProcesser<SaleOrderVO> compareProcesser) {
IRule<SaleOrderVO> rule = null;
IRule<SaleOrderVO> var3 = new RenovateARByHidsEndRule(M30EngrossAction.M30ReVise);
compareProcesser.addAfterRule(var3);
IRule<SaleOrderVO> var4 = new CheckNumPriceMnyRule();
compareProcesser.addAfterRule(var4);
IRule<SaleOrderVO> updatePmoAndFinProdInRule = new UpdatePmoAndFinProdInRule();
compareProcesser.addAfterRule(updatePmoAndFinProdInRule);
}
}