请购单和流程生产订单删除后回写备料计划

This commit is contained in:
lihao 2025-07-28 10:25:40 +08:00
parent 3c12653d77
commit b884d6077f
5 changed files with 376 additions and 0 deletions

View File

@ -9,14 +9,20 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.itf.mmpac.pickm.IPickmBusinessService;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.jdbc.framework.processor.MapProcessor;
import nc.pubitf.mmpac.pickm.mo.IPickmQueryServiceForMO;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.ml.NCLangRes4VoTransl;
import nc.vo.mmpac.pickm.entity.AggPickmVO;
import nc.vo.mmpac.pickm.entity.PickmItemVO;
import nc.vo.mmpac.pickm.param.PickmTransParam;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;
import nc.vo.pubapp.res.NCModule;
import nccloud.dto.mmpac.pickm.pub.entity.PickmQueryInfoDTO;
import nccloud.framework.core.exception.ExceptionUtils;
@ -89,6 +95,22 @@ public class PickmDeliverAction implements ICommonAction {
for(AggPickmVO agg : aggVOs) {
for(PickmItemVO item : (PickmItemVO[])agg.getChildrenVO()) {
// 流程生产订单明细表
String id=agg.getParentVO().getVfirstmorowid();
if(null != id &&!id.isEmpty()){
String sql = "SELECT m.twillendtime from mm_mo m "+
"WHERE\n" +
"\tm.cmoid = '"+id+"' ";
BaseDAO dao = new BaseDAO();
String data =(String) dao.executeQuery(sql, new ColumnProcessor());
UFDate now=new UFDate();
// 领料校验 当前时间必须在计划结束时间前七天
if(null!=data && (now.compareTo(new UFDate(data)) >0 || now.getDateAfter(7).compareTo(new UFDate(data)) >0)){
continue;
};
}
pks.add(item.getCpickm_bid());
}
}
@ -102,6 +124,9 @@ public class PickmDeliverAction implements ICommonAction {
deliverAppcode = "400802808";
deliverPagecode = "5008010501";
}
if(pks.isEmpty()){
pks.add("");
}
Map<String, Object> returnMap = new HashMap();
returnMap.put("pks", pks.toArray(new String[0]));

View File

@ -0,0 +1,102 @@
//
// 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.bp.rule.WithUpdatePickmRule;
import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint;
import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateWithParaRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMODeleteAutoDeleteMosRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMODeleteAutoDeletePutPlanRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMODeleteBatchCodeRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMODeletePickmRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMODeleteSNRule;
import nc.bs.mmpac.pmo.pac0002.rule.PMOMarkWrSNWhenDeleteRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeleteHaveSubRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckDeleteStatusRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckSnBindRule;
import nc.bs.mmpac.pmo.pac0002.rule.check.PMOCheckTurnedDeleteRule;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4INVP;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4MPS;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4PMO;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4PSCRecive;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4PSM;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4Renovate;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4SFC;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4SO;
import nc.bs.mmpac.pmo.pac0002.rule.rewrite.RewriteDeleteNum4TO;
import nc.bs.mmpub.rule.MMVOSagaFrozenValidateRule;
import nc.bs.pubapp.pub.rule.ReturnBillCodeRule;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.impl.pubapp.pattern.rule.processer.AroundProcesser;
import nc.util.mmf.framework.gc.GCDeleteBPTemplate;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.util.PmoSagaUtil;
public class PMODeleteBP {
public PMODeleteBP() {
}
public void delete(PMOAggVO[] bills) {
GCDeleteBPTemplate<PMOAggVO> bp = new GCDeleteBPTemplate(PMOPluginPoint.DELETE);
IRule<PMOAggVO> checkFrozenRule = new MMVOSagaFrozenValidateRule(true);
checkFrozenRule.process(bills);
PmoSagaUtil.addSagaAndCompensate4Delete(bills);
this.addBeforeRule(bp.getAroundProcesser());
this.addAfterRule(bp.getAroundProcesser());
bp.delete(bills);
}
private void addBeforeRule(AroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> statusRule = new PMOCheckDeleteStatusRule();
processer.addBeforeRule(statusRule);
IRule<PMOAggVO> checkturnrule = new PMOCheckTurnedDeleteRule();
processer.addBeforeRule(checkturnrule);
IRule<PMOAggVO> snBindRule = new PMOCheckSnBindRule();
processer.addBeforeRule(snBindRule);
IRule<PMOAggVO> checkFactoryrule = new PMOATPUpdateWithParaRule(true, "55A2");
processer.addBeforeRule(checkFactoryrule);
IRule<PMOAggVO> rewritePSCRecive = new RewriteDeleteNum4PSCRecive();
processer.addBeforeRule(rewritePSCRecive);
IRule<PMOAggVO> rewritewr = new RewriteDeleteNum4Renovate();
processer.addBeforeRule(rewritewr);
IRule<PMOAggVO> rewriteso = new RewriteDeleteNum4SO();
processer.addBeforeRule(rewriteso);
IRule<PMOAggVO> rewritepsm = new RewriteDeleteNum4PSM();
processer.addBeforeRule(rewritepsm);
IRule<PMOAggVO> rewritepo = new RewriteDeleteNum4MPS();
processer.addBeforeRule(rewritepo);
IRule<PMOAggVO> rewriteinvp = new RewriteDeleteNum4INVP();
processer.addBeforeRule(rewriteinvp);
IRule<PMOAggVO> rewriteto = new RewriteDeleteNum4TO();
processer.addBeforeRule(rewriteto);
IRule<PMOAggVO> rewritesfc = new RewriteDeleteNum4SFC();
processer.addBeforeRule(rewritesfc);
}
private void addAfterRule(AroundProcesser<PMOAggVO> processer) {
IRule<PMOAggVO> checksubbill = new PMOCheckDeleteHaveSubRule();
processer.addAfterRule(checksubbill);
IRule<PMOAggVO> pmorule = new RewriteDeleteNum4PMO();
processer.addAfterRule(pmorule);
IRule<PMOAggVO> deletePickmRule = new PMODeletePickmRule();
processer.addAfterRule(deletePickmRule);
IRule<PMOAggVO> deletebatchbill = new PMODeleteBatchCodeRule();
processer.addAfterRule(deletebatchbill);
IRule<PMOAggVO> autoDeletePutPlan = new PMODeleteAutoDeletePutPlanRule();
processer.addAfterRule(autoDeletePutPlan);
IRule<PMOAggVO> autoDeleteMos = new PMODeleteAutoDeleteMosRule();
processer.addAfterRule(autoDeleteMos);
IRule<PMOAggVO> snDeleteRule = new PMODeleteSNRule();
processer.addAfterRule(snDeleteRule);
IRule<PMOAggVO> wrMarkRule = new PMOMarkWrSNWhenDeleteRule();
processer.addAfterRule(wrMarkRule);
IRule<PMOAggVO> checkFactoryrule = new PMOATPUpdateWithParaRule(false, "55A2");
processer.addAfterRule(checkFactoryrule);
IRule<PMOAggVO> billcoderule = new ReturnBillCodeRule("55A2", "vbillcode", "pk_group", "pk_org");
processer.addAfterRule(billcoderule);
processer.addAfterRule(new WithUpdatePickmRule());
}
}

View File

@ -0,0 +1,79 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.mmpac.pmo.pac0002.bp.rule;
import java.util.ArrayList;
import java.util.List;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.mmpac.pmo.pac0002.bp.service.PMOSNServiceAdapter;
import nc.bs.mmpac.pmo.pac0002.bp.util.PMOBPSNUtil;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.mmpac.wr.param.WrSerialCodeMarkParamForMO;
import nc.vo.pu.m20.entity.PraybillItemVO;
import nc.vo.pu.m20.entity.PraybillVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nccloud.commons.lang.ArrayUtils;
/**
* 流程生成订单删除时回写备料计划是否下达字段
*/
public class WithUpdatePickmRule implements IRule<PMOAggVO> {
public WithUpdatePickmRule() {
}
public void process(PMOAggVO[] vos) {
if (!ArrayUtils.isEmpty(vos)) {
try {
List<String> pk= new ArrayList<String>();
for (PMOAggVO vo : vos) {
PMOItemVO[] praybillItemVOS=vo.getChildrenVO();
for (PMOItemVO praybillItemVO : praybillItemVOS) {
if("55A3".equals(praybillItemVO.getVsrctype())){
pk.add(praybillItemVO.getVsrcbid());
}
}
}
if(!pk.isEmpty()){
//回写是否下方为是
updetaPmo(pk);
}
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
}
}
private void updetaPmo(List<String> arrayList) throws DAOException {
String result = "";
StringBuilder sb = new StringBuilder();
if (arrayList.size() > 1) {
for (int i = 0; i < arrayList.size(); i++) {
sb.append("'").append(arrayList.get(i)).append("'");
if (i < arrayList.size() - 1) {
sb.append(",");
}
}
result = sb.toString();
} else {
result = "'" + (String) arrayList.get(0) + "'";
}
String sql = " update mm_pickm_b set vbdef13='N' where mm_pickm_b.cpickm_bid in(" + result + ")";
BaseDAO dao = new BaseDAO();
dao.executeUpdate(sql);
}
}

View File

@ -0,0 +1,95 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.pu.m20.maintain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bs.pu.m20.maintain.rule.ATPAfterUpdateRule;
import nc.bs.pu.m20.maintain.rule.ATPBeforeUpdateRule;
import nc.bs.pu.m20.maintain.rule.ReturnBillCodeRule;
import nc.bs.pu.m20.maintain.rule.delete.*;
import nc.bs.pu.m20.plugin.PraybillPluginPoint;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
import nc.impl.pubapp.pattern.data.bill.BillDelete;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.itf.pu.m20.compenstate.IBuyingreqM4A08SagasCompensate;
import nc.vo.pu.m20.entity.PraybillItemVO;
import nc.vo.pu.m20.entity.PraybillVO;
import nc.vo.pu.m20.enumeration.EnumOperate;
import nc.vo.pu.pub.rule.WriteBack422xRule;
import nc.vo.pu.pub.rule.WriteBackPIMRule;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.scmpub.res.billtype.POBillType;
import nccloud.commons.lang.ArrayUtils;
import nccloud.pubitf.pu.pub.util.PuSagasUtil;
public class PraybillDeleteBP {
public PraybillDeleteBP() {
}
public void delete(PraybillVO[] vos) {
CompareAroundProcesser<PraybillVO> processer = new CompareAroundProcesser(PraybillPluginPoint.DELETE);
this.addBeforeRule(processer);
this.addAfterRule(processer);
processer.before(vos, vos);
this.addSagaAndCompensate(vos);
BillDelete<PraybillVO> bo = new BillDelete();
bo.delete(vos);
processer.after(vos, vos);
}
private void addAfterRule(CompareAroundProcesser<PraybillVO> processer) {
processer.addAfterRule(new DelOldVersionRule());
processer.addAfterRule(new PraybillWriteBackSourceRule(EnumOperate.DELETE));
processer.addAfterRule(new ATPAfterUpdateRule());
processer.addAfterRule(new ReturnBillCodeRule());
processer.addAfterRule(new WriteBackPIMRule(POBillType.PrayBill.getCode()));
processer.addAfterRule(new WriteBack422xRule(POBillType.PrayBill.getCode()));
processer.addAfterRule(new DeleteAfterEventRule());
processer.addAfterRule(new UpdatePickmRule());
}
private void addBeforeRule(CompareAroundProcesser<PraybillVO> processer) {
processer.addBeforeRule(new VOSagaFrozenValidateRule(true));
processer.addBeforeFinalRule(new BillStatusRule());
processer.addBeforeFinalRule(new CheckSrcRule());
processer.addBeforeRule(new ATPBeforeUpdateRule());
processer.addBeforeRule(new DeleteBeforeEventRule());
}
private void addSagaAndCompensate(PraybillVO[] vos) {
try {
PuSagasUtil.frozenAndAddSaga(vos, POBillType.PrayBill.getCode());
List<String> hList = new ArrayList();
List<String> bList = new ArrayList();
for(PraybillVO praybillVO : vos) {
PraybillItemVO[] praybillItemVOs = praybillVO.getBVO();
if (!ArrayUtils.isEmpty(praybillItemVOs)) {
hList.add(praybillVO.getHVO().getPk_praybill());
for(PraybillItemVO praybillItemVO : praybillItemVOs) {
bList.add(praybillItemVO.getPk_praybill_b());
}
}
}
Map<String, Serializable> map = new HashMap();
map.put("opertaion", "praybillDelete");
map.put("pk_praybill_b", bList.toArray(new String[bList.size()]));
map.put("pk_praybill", hList.toArray(new String[hList.size()]));
PuSagasUtil.compensate(IBuyingreqM4A08SagasCompensate.class, map);
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
}
}

View File

@ -0,0 +1,75 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.pu.m20.maintain.rule.delete;
import nc.bs.businessevent.BusinessEvent;
import nc.bs.businessevent.EventDispatcher;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.vo.pu.m20.entity.PraybillItemVO;
import nc.vo.pu.m20.entity.PraybillVO;
import nc.vo.pu.pub.constant.PUMDValue;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nccloud.commons.lang.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
/**
* 请购单删除时回写备料计划是否下达字段
*/
public class UpdatePickmRule implements IRule<PraybillVO> {
public UpdatePickmRule() {
}
public void process(PraybillVO[] vos) {
if (!ArrayUtils.isEmpty(vos)) {
try {
List<String> pk= new ArrayList<String>();
for (PraybillVO vo : vos) {
PraybillItemVO[] praybillItemVOS=vo.getBVO();
for (PraybillItemVO praybillItemVO : praybillItemVOS) {
if("55A3".equals(praybillItemVO.getCsourcetypecode())){
pk.add(praybillItemVO.getCsourcebid());
}
}
}
if(!pk.isEmpty()){
//回写是否下方为是
updetaPmo(pk);
}
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
}
}
private void updetaPmo(List<String> arrayList) throws DAOException {
String result = "";
StringBuilder sb = new StringBuilder();
if (arrayList.size() > 1) {
for (int i = 0; i < arrayList.size(); i++) {
sb.append("'").append(arrayList.get(i)).append("'");
if (i < arrayList.size() - 1) {
sb.append(",");
}
}
result = sb.toString();
} else {
result = "'" + (String) arrayList.get(0) + "'";
}
String sql = " update mm_pickm_b set vbdef13='N' where mm_pickm_b.cpickm_bid in(" + result + ")";
BaseDAO dao = new BaseDAO();
dao.executeUpdate(sql);
}
}