From e71aaf151123e4391a22474482d2bc89673c5e61 Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 28 Oct 2025 19:41:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8E=A8=E8=89=BE=E6=99=AEME?= =?UTF-8?q?S=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/epic/MaterialToEpicMesPlugin.java | 13 +++ .../listener/MaterialToEpicMesListener.java | 95 ++++++++++++++++++- 2 files changed, 104 insertions(+), 4 deletions(-) diff --git a/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java b/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java index 9549604a..eafa81f3 100644 --- a/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java +++ b/uapbd/src/private/nc/bs/uapbd/task/mes/epic/MaterialToEpicMesPlugin.java @@ -182,6 +182,19 @@ public class MaterialToEpicMesPlugin implements IBackgroundWorkPlugin { if (num > 0) { mesType = "1"; } + // 判断物料是否是虚拟件,只要有一个组织是就赋值0 + String countSql1 = "SELECT count(1)" + + " FROM bd_materialplan a" + + " LEFT JOIN org_orgs b ON a.pk_org = b.pk_org" + + " WHERE a.dr = 0 AND a.isvirtual = 'Y' " + + " AND a.pk_material = '[pkMaterial]'" + + " AND b.isbusinessunit = 'Y'" + + " AND " + inStr; + countSql1 = countSql1.replace("[pkMaterial]", pkMaterial); + Integer num1 = (Integer) new BaseDAO().executeQuery(countSql1, new ColumnProcessor()); + if (num1 > 0) { + mesType = "0"; + } return mesType; } diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java index 1698e424..91d93c44 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java @@ -17,6 +17,9 @@ import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.MapProcessor; import nc.util.mmf.framework.base.MMValueCheck; import nc.vo.bd.material.MaterialVO; +import nc.vo.bd.material.plan.MaterialPlanVO; +import nc.vo.bd.material.prod.MaterialProdVO; +import nc.vo.bd.material.stock.MaterialStockVO; import nc.vo.fi.pub.SqlUtils; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; @@ -55,12 +58,34 @@ public class MaterialToEpicMesListener implements IBusinessListener { try { if ("1002".equals(eventType) || "1004".equals(eventType) || "1061".equals(eventType) || "1071".equals(eventType) || "1069".equals(eventType)) { - useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); configParams = MyHelper.getConfigParams("Dldz-config", null); if (configParams.isEmpty()) { throw new BusinessException("电力电子的艾普MES接口缺少配置"); } - buildSyncData(useVOs, eventType); + List list = new ArrayList<>(); + if (objs instanceof MaterialVO[]) { + // 基本信息修改后/停用启用 + useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); + for (MaterialVO materialVO : useVOs) { + String pkMaterial = materialVO.getPk_material(); + // 如果修改基本信息,判断物料所属组织中是否存在电力电子,不存在则跳过 + Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg"); + if (num <= 0) { + continue; + } + list.add(materialVO); + } + } else if (objs instanceof MaterialStockVO[]) { + // 库存信息修改 + processMaterialChange(objs, list); + } else if (objs instanceof MaterialPlanVO[]) { + // 计划信息修改 + processMaterialChange(objs, list); + } + if (!list.isEmpty()) { + useVOs = list.toArray(new MaterialVO[0]); + buildSyncData(useVOs, eventType); + } } else if ("1009".equals(eventType)) { // 物料可见性范围-分配后 1009 configParams = MyHelper.getConfigParams("Dldz-config", null); @@ -110,10 +135,10 @@ public class MaterialToEpicMesListener implements IBusinessListener { // 判断物料的业务单元是否是电力电子公司,不是则跳过 String pkOrg = vo.getPk_org(); String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); - Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg"); + /*Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "dldzOrg"); if (!"1009".equals(eventType) && (num <= 0)) { continue; - } + }*/ // 字段值翻译 // String pk_marbasclass = vo.getPk_marbasclass(); // String mrlTypeCOde = MyHelper.transferField(MarBasClassVO.getDefaultTableName(), MarBasClassVO.CODE, MarBasClassVO.PK_MARBASCLASS, pk_marbasclass); @@ -169,6 +194,55 @@ public class MaterialToEpicMesListener implements IBusinessListener { } } + /** + * 处理物料VO的通用方法 + */ + private void processMaterialChange(Object[] objs, List list) throws BusinessException { + HYPubBO hyPub = new HYPubBO(); + for (Object newVO : objs) { + String pk_material = getPkMaterialFromVO(newVO); + if (MMValueCheck.isEmpty(pk_material)) { + continue; + } + String pkOrg = getPkOrgFromVO(newVO); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + // 判断各个页签修改信息是否属于电力电子 + if (MMValueCheck.isNotEmpty(pkOrg) && MyHelper.checkIfDldzOrg(orgCode, configParams)) { + continue; + } + MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pk_material); + list.add(materialVO); + } + } + + /** + * 从不同类型的VO中获取pk_material + */ + private String getPkMaterialFromVO(Object vo) { + if (vo instanceof MaterialStockVO newVo) { + return newVo.getPk_material(); + } else if (vo instanceof MaterialPlanVO newVo) { + return newVo.getPk_material(); + } else if (vo instanceof MaterialProdVO) { + return ((MaterialProdVO) vo).getPk_material(); + } + return null; + } + + /** + * 从不同类型的VO中获取pk_org + */ + private String getPkOrgFromVO(Object vo) { + if (vo instanceof MaterialStockVO) { + return ((MaterialStockVO) vo).getPk_org(); + } else if (vo instanceof MaterialPlanVO) { + return ((MaterialPlanVO) vo).getPk_org(); + } else if (vo instanceof MaterialProdVO) { + return ((MaterialProdVO) vo).getPk_org(); + } + return null; + } + private String getType(String eventType) { // 类型(I:新增 U:修改 D:删除) Map map = new HashMap<>(); @@ -212,6 +286,19 @@ public class MaterialToEpicMesListener implements IBusinessListener { if (num > 0) { mesType = "1"; } + // 判断物料是否是虚拟件,只要有一个组织是就赋值0 + String countSql1 = "SELECT count(1)" + + " FROM bd_materialplan a" + + " LEFT JOIN org_orgs b ON a.pk_org = b.pk_org" + + " WHERE a.dr = 0 AND a.isvirtual = 'Y' " + + " AND a.pk_material = '[pkMaterial]'" + + " AND b.isbusinessunit = 'Y'" + + " AND " + inStr; + countSql1 = countSql1.replace("[pkMaterial]", pkMaterial); + Integer num1 = (Integer) new BaseDAO().executeQuery(countSql1, new ColumnProcessor()); + if (num1 > 0) { + mesType = "0"; + } return mesType; }