diff --git a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java index 0d037b81..30d4ae25 100644 --- a/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java +++ b/ic/src/private/nc/bs/ic/m4d/insert/InsertBP.java @@ -108,6 +108,7 @@ public class InsertBP implements IInsertBP, //2025年6月13日09点38分 -- 物料档案基本页签启用项目辅助属性+库存组织未启用项目,采购入库单保存时(包含接口导入)清除行项目,材料出库单保存时(包含接口导入)清除行项目 processor.addBeforeRule(new MaterialOutProjectRule()); + processor.addBeforeRule(new MaterialOutBatchCodeRule()); } @Override diff --git a/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBatchCodeRule.java b/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBatchCodeRule.java new file mode 100644 index 00000000..fd5ae8d5 --- /dev/null +++ b/ic/src/private/nc/bs/ic/m4d/insert/rule/MaterialOutBatchCodeRule.java @@ -0,0 +1,129 @@ +package nc.bs.ic.m4d.insert.rule; + +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.bs.ic.pub.base.ICRule; +import nc.bs.logging.Log; +import nc.bs.trade.business.HYPubBO; +import nc.bs.uapbd.util.MyHelper; +import nc.itf.mmpac.pickm.IPickmQueryService; +import nc.itf.uap.IUAPQueryBS; +import nc.util.mmf.framework.base.MMValueCheck; +import nc.vo.bd.material.MaterialVO; +import nc.vo.ic.m4d.entity.MaterialOutBodyVO; +import nc.vo.ic.m4d.entity.MaterialOutHeadVO; +import nc.vo.ic.m4d.entity.MaterialOutVO; +import nc.vo.mmpac.pickm.entity.AggPickmVO; +import nc.vo.mmpac.pickm.entity.PickmHeadVO; +import nc.vo.org.StockOrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; +import nc.vo.scmf.ic.mbatchcode.BatchcodeVO; +import nccloud.baseapp.core.log.NCCForUAPLogger; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * 精密-材料出库新增--批次号赋值 + * + * @author mzr + * @date 2025/10/26 + */ +public class MaterialOutBatchCodeRule extends ICRule { + private static final String LOG_INFO_NAME = "jmqylog"; + private static final Log logger = Log.getInstance(LOG_INFO_NAME); + private Map configParams; + private IUAPQueryBS queryBS = null; + + public final IUAPQueryBS getQueryBS() { + if (null == queryBS) { + queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class); + } + return queryBS; + } + + @Override + public void process(MaterialOutVO[] vos) { + if (MMValueCheck.isEmpty(vos)) { + return; + } + try { + configParams = MyHelper.getConfigParams("jm-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("精密的启源接口缺少配置"); + } + String configMaterialCode = configParams.get("noItemCode"); + if (configMaterialCode == null || configMaterialCode.isEmpty()) { + return; + } + HYPubBO hyPub = new HYPubBO(); + for (MaterialOutVO vo : vos) { + MaterialOutHeadVO headVO = vo.getHead(); + MaterialOutBodyVO[] bodys = vo.getBodys(); + String pk_org = (String) headVO.getAttributeValue("pk_org"); + String vtrantypecode = headVO.getVtrantypecode(); + String orgCode = MyHelper.transferField(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_STOCKORG, pk_org); + if ("C038".equals(orgCode)) { + if ("4D-Cxx-58".equals(vtrantypecode)) { + IPickmQueryService service = NCLocator.getInstance().lookup(IPickmQueryService.class); + // 批次号赋值 + for (MaterialOutBodyVO body : bodys) { + // 备料计划表头主键 + String cpickmhid = body.getCpickmhid(); + String cmaterialvid = body.getCmaterialvid(); + String condition = "pk_material = '" + cmaterialvid + "'"; + String materialCode = hyPub.findColValue(MaterialVO.getDefaultTableName(), MaterialVO.CODE, condition) + ""; + if (!configMaterialCode.equals(materialCode)) { + continue; + } + if (MMValueCheck.isNotEmpty(cpickmhid)) { + AggPickmVO aggVO = service.querySingleBillByPk(cpickmhid); + if (aggVO == null) { + continue; + } + PickmHeadVO pickmHeadVO = aggVO.getParentVO(); + // 来源生产订单明细 + String vsourcemorowid = pickmHeadVO.getVsourcemorowid(); + NCCForUAPLogger.debug("来源生产订单明细:" + vsourcemorowid); + if (vsourcemorowid != null && !vsourcemorowid.isEmpty()) { + body.setVbatchcode(vsourcemorowid);// 批次号 + Map batchMap = getBatchCodeVO(cmaterialvid, vsourcemorowid); + String pkBatchcode = batchMap.get(vsourcemorowid); + body.setPk_batchcode(pkBatchcode);// 批次档案id + } + } + + } + } + } + } + } catch (BusinessException e) { + logger.error("MaterialOutBatchCodeRule-exp:" + e.getMessage(), e); + ExceptionUtils.wrappException(e); + } + } + + public Map getBatchCodeVO(String cbmaterialvid, String vbatchcode) + throws BusinessException { + Map resMap = new HashMap<>(); + SqlBuilder sb = new SqlBuilder(); + sb.append("pk_group", InvocationInfoProxy.getInstance().getGroupId()); + sb.append(" and "); + sb.append("nvl(dr,0)", 0); + sb.append(" and "); + sb.append("cmaterialvid", cbmaterialvid); + sb.append(" and "); + sb.append("vbatchcode", vbatchcode); + Collection vos = this.getQueryBS().retrieveByClause(BatchcodeVO.class, sb.toString()); + for (BatchcodeVO vo : vos) { + String pk_batchcode = vo.getPk_batchcode(); + String vbatchcode1 = vo.getVbatchcode(); + resMap.put(vbatchcode1, pk_batchcode); + } + return resMap; + } + +}