diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java index defc9d09..05fcf896 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java @@ -6,28 +6,20 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import nc.bs.bd.assignservice.multiorg.MultiOrgAssignVO; import nc.bs.bd.baseservice.ArrayClassConvertUtil; -import nc.bs.bd.cache.CacheProxy; import nc.bs.businessevent.IBusinessEvent; import nc.bs.businessevent.IBusinessListener; import nc.bs.businessevent.bd.BDCommonEvent; -import nc.bs.businessevent.bd.BDCommonEventUtil; import nc.bs.dao.BaseDAO; -import nc.bs.dao.DAOException; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; -import nc.bs.logging.Logger; import nc.bs.trade.business.HYPubBO; import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; -import nc.impl.bd.material.baseinfo.MaterialAsstFrame1ChangedListener; -import nc.jdbc.framework.SQLParameter; -import nc.jdbc.framework.processor.ColumnListProcessor; import nc.jdbc.framework.processor.MapProcessor; import nc.pubitf.uapbd.IMaterialPubService; import nc.util.mmf.framework.base.MMValueCheck; import nc.vo.am.common.util.StringUtils; import nc.vo.bd.material.MaterialVO; -import nc.vo.bd.material.marassistant.MarAssistantVO; import nc.vo.bd.material.marbasclass.MarBasClassVO; import nc.vo.bd.material.plan.MaterialPlanVO; import nc.vo.bd.material.prod.MaterialProdVO; @@ -52,6 +44,7 @@ public class MaterialToGyMesListener implements IBusinessListener { private static final String addUrl = "/bip/order/materialAdd"; private static final String updateUrl = "/bip/order/materialUpdate"; private Map configParams; + private String orgId = ""; @Override public void doAction(IBusinessEvent event) throws BusinessException { @@ -59,65 +52,47 @@ public class MaterialToGyMesListener implements IBusinessListener { String eventType = event.getEventType(); Object[] objs = e.getObjs(); HYPubBO hyPub = new HYPubBO(); - List list = new ArrayList<>(); // EventType是事件编码 1002-新增后 1004-修改后 1071-状态由停用变为启用后 1069-状态由启用变为停用后 - if ("1004".equals(eventType)) { - MaterialVO[] useVOs = null; - if (objs instanceof MaterialStockVO[]) {//库存信息修改后 - for (int i = 0; i < e.getNewObjs().length; ++i) { - MaterialStockVO newVO = (MaterialStockVO) e.getNewObjs()[i]; - String pk_material = newVO.getPk_material(); - if (pk_material == null) { - continue; - } - MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pk_material); - list.add(materialVO); - } - useVOs = list.toArray(new MaterialVO[0]); - } else if (objs instanceof MaterialPlanVO[]) {//计划信息修改后 - for (int i = 0; i < e.getNewObjs().length; ++i) { - MaterialPlanVO newVO = (MaterialPlanVO) e.getNewObjs()[i]; - String pk_material = newVO.getPk_material(); - if (pk_material == null) { - continue; - } - MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pk_material); - list.add(materialVO); - } - useVOs = list.toArray(new MaterialVO[0]); - } else if (objs instanceof MaterialProdVO[]) {//生产信息修改后 - for (int i = 0; i < e.getNewObjs().length; ++i) { - MaterialProdVO newVO = (MaterialProdVO) e.getNewObjs()[i]; - String pk_material = newVO.getPk_material(); - if (pk_material == null) { - continue; - } - MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pk_material); - list.add(materialVO); - } - useVOs = list.toArray(new MaterialVO[0]); + if ("1004".equals(eventType) || "1071".equals(eventType) || "1069".equals(eventType)) { + configParams = MyHelper.getConfigParams("gy-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("高压的gymes接口缺少配置"); + } + orgId = MyHelper.getStrValByCondition(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE + " = 'C046' and ISBUSINESSUNIT = 'Y'"); + List list = new ArrayList<>(); + if (objs instanceof MaterialStockVO[]) { + // 库存信息修改后 + processMaterialChange(objs, list); + } else if (objs instanceof MaterialPlanVO[]) { + // 计划信息修改后 + processMaterialChange(objs, list); + } else if (objs instanceof MaterialProdVO[]) { + // 生产信息修改后 + processMaterialChange(objs, list); } else { - useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class);//物料修改后 + // 基本信息修改后/停用启用 + MaterialVO[] useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); + for (MaterialVO materialVO : useVOs) { + String pkMaterial = materialVO.getPk_material(); + // 如果修改基本信息,判断物料所属组织中是否存在高压生产中心,不存在则跳过 + Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "gyOrg"); + if (num <= 0) { + continue; + } + list.add(materialVO); + } } - configParams = MyHelper.getConfigParams("gy-config", null); - if (configParams.isEmpty()) { - throw new BusinessException("高压的gymes接口缺少配置"); + if (!list.isEmpty()) { + MaterialVO[] useVOs = list.toArray(new MaterialVO[0]); + buildSyncData(useVOs, eventType); } - buildSyncData(useVOs, eventType); - } else if ("1071".equals(eventType) || "1069".equals(eventType)) { - MaterialVO[] useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); - configParams = MyHelper.getConfigParams("gy-config", null); - if (configParams.isEmpty()) { - throw new BusinessException("高压的gymes接口缺少配置"); - } - buildSyncData(useVOs, eventType); } else if ("1009".equals(eventType)) { // 物料可见性范围-分配后 1009 configParams = MyHelper.getConfigParams("gy-config", null); if (configParams.isEmpty()) { throw new BusinessException("高压的gymes接口缺少配置"); } -// HYPubBO hyPub = new HYPubBO(); + orgId = MyHelper.getStrValByCondition(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE + " = 'C046' and ISBUSINESSUNIT = 'Y'"); List voList = new ArrayList<>(); for (Object obj : objs) { MultiOrgAssignVO vo = (MultiOrgAssignVO) obj; @@ -143,25 +118,16 @@ public class MaterialToGyMesListener implements IBusinessListener { * 构建同步数据 */ private void buildSyncData(MaterialVO[] useVOs, String eventType) throws BusinessException { - -// String orgId = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE, "C046"); - String pkOrg = MyHelper.getStrValByCondition("ORG_ORGS", OrgVO.PK_ORG, OrgVO.CODE + " = '" + "C046" + "'" + " and ISBUSINESSUNIT = '" + "Y" + "'"); JSONArray dataArr = new JSONArray(); for (MaterialVO vo : useVOs) { String pkMaterial = vo.getPk_material(); - // 判断物料的业务单元是否是高压公司,不是则跳过 -// String pkOrg = vo.getPk_org(); - Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "gyOrg"); - if (!"1009".equals(eventType) && (num <= 0)) { - continue; - } // 字段值翻译 String pk_marbasclass = vo.getPk_marbasclass(); String mrlTypeName = MyHelper.getStrValByCondition(MarBasClassVO.getDefaultTableName(), MarBasClassVO.NAME, "pk_marbasclass = '" + pk_marbasclass + "'"); // 计量单位 Map unitMap = getGoodsInfo(pkMaterial); - Map planMap = queryMaterialPlanInfoByPks(new String[]{pkMaterial}, pkOrg, + Map planMap = queryMaterialPlanInfoByPks(new String[]{pkMaterial}, orgId, new String[]{MaterialPlanVO.ISVIRTUAL, MaterialPlanVO.DEF1}); UFBoolean isvirtual = new UFBoolean(false); String drawingNumber = ""; @@ -273,6 +239,54 @@ public class MaterialToGyMesListener 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); + // 判断各个页签修改信息是否属于高压生产中心 + if (MMValueCheck.isNotEmpty(orgId) && !orgId.equals(pkOrg)) { + 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 Map getGoodsInfo(String pkMaterial) throws BusinessException { String sql = " select a.pk_measdoc, c.name unitname, b.pk_measdoc deputyUnit, d.name deputy_unitname, nvl(b.measrate, '1/1') measrate " + "from bd_material a " +