refactor(material):调整物料库存计划生产信息同步的组织判断逻辑并提取公共方法
This commit is contained in:
		
							parent
							
								
									d706eb9675
								
							
						
					
					
						commit
						9e170f6661
					
				|  | @ -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<String, String> 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<MaterialVO> 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<MaterialVO> 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<MaterialVO> 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<String, MaterialPlanVO> planMap = queryMaterialPlanInfoByPks(new String[]{pkMaterial}, pkOrg, | ||||
|             Map<String, MaterialPlanVO> 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 <T> void processMaterialChange(Object[] objs, List<MaterialVO> 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 " + | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue