feat(uapbd): 增加物料可见性分配后同步数据到艾普MES

- 新增对物料可见性分配后事件的处理逻辑
- 优化物料数据查询组织的逻辑
- 添加日志记录功能
- 修复了一些潜在的bug
This commit is contained in:
mzr 2025-08-06 08:38:33 +08:00
parent f9c9cbff0f
commit 6469ce7f6d
1 changed files with 35 additions and 9 deletions

View File

@ -3,22 +3,27 @@ package nccloud.api.uapbd.material.listener;
import com.alibaba.fastjson.JSON;
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.businessevent.IBusinessEvent;
import nc.bs.businessevent.IBusinessListener;
import nc.bs.businessevent.bd.BDCommonEvent;
import nc.bs.dao.BaseDAO;
import nc.bs.logging.Log;
import nc.bs.trade.business.HYPubBO;
import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.material.marbasclass.MarBasClassVO;
import nc.vo.bd.material.stock.MaterialStockVO;
import nc.vo.org.FactoryVO;
import nc.vo.org.OrgVO;
import nc.vo.pub.BusinessException;
import nccloud.baseapp.core.log.NCCForUAPLogger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -40,7 +45,7 @@ public class MaterialToEpicMesListener implements IBusinessListener {
Object[] objs = e.getObjs();
// EventType是事件编码 1002-新增后 1004-修改后 1071-状态由停用变为启用后 1069-状态由启用变为停用后
if ("1002".equals(eventType) || "1004".equals(eventType)) {
if ("1004".equals(eventType)) {
MaterialVO[] useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class);
configParams = MyHelper.getConfigParams("Dldz-config", null);
if (configParams.isEmpty()) {
@ -53,13 +58,32 @@ public class MaterialToEpicMesListener implements IBusinessListener {
if (configParams.isEmpty()) {
throw new BusinessException("电力电子的艾普MES接口缺少配置");
}
buildSyncData(useVOs, eventType);
} else if ("1009".equals(eventType)) {
Object[] newObjs = e.getNewObjs();
// ÎïÁϿɼûÐԷΧ-·ÖÅäºó
for (Object obj : newObjs) {
MaterialVO vo = (MaterialVO) obj;
String pkMaterial = vo.getPk_material();
// 物料可见性范围-分配后 1009
configParams = MyHelper.getConfigParams("Dldz-config", null);
if (configParams.isEmpty()) {
throw new BusinessException("电力电子的艾普MES接口缺少配置");
}
HYPubBO hyPub = new HYPubBO();
List<MaterialVO> voList = new ArrayList<>();
for (Object obj : objs) {
MultiOrgAssignVO vo = (MultiOrgAssignVO) obj;
String pkMaterial = vo.getPk_doc();
String pkOrg = vo.getPk_org();
String orgCode = (String) hyPub.findColValue(OrgVO.getDefaultTableName(), OrgVO.CODE, "dr =0 and pk_org = '" + pkOrg + "' ");
// 检查当前组织是否为电力电子
if (MyHelper.checkIfDldzOrg(orgCode, configParams)) {
continue;
}
MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pkMaterial);
voList.add(materialVO);
}
if (!voList.isEmpty()) {
MaterialVO[] useVOs = voList.toArray(new MaterialVO[0]);
buildSyncData(useVOs, eventType);
}
}
}
@ -70,8 +94,8 @@ public class MaterialToEpicMesListener implements IBusinessListener {
for (MaterialVO vo : useVOs) {
// 判断物料的业务单元是否是电力电子公司不是则跳过
String pkOrg = vo.getPk_org();
String orgCode = MyHelper.transferField(FactoryVO.getDefaultTableName(), FactoryVO.CODE, FactoryVO.PK_FACTORY, pkOrg);
if (MyHelper.checkIfDldzOrg(orgCode, configParams)) {
String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg);
if (!"1009".equals(eventType) && MyHelper.checkIfDldzOrg(orgCode, configParams)) {
continue;
}
// 字段值翻译
@ -116,6 +140,7 @@ public class MaterialToEpicMesListener implements IBusinessListener {
SerializerFeature.WriteNullStringAsEmpty
);
logDl.error("EpicMes-Material-param = " + jsonStr);
NCCForUAPLogger.debug("EpicMes-Material-param = " + jsonStr);
String baseUrl = configParams.get("epicMesUrl");
String requestUrl = baseUrl + reqUrl;
logDl.error("EpicMes-Material-url = " + requestUrl);
@ -133,6 +158,7 @@ public class MaterialToEpicMesListener implements IBusinessListener {
// 类型I:新增 U:修改 D:删除
Map<String, String> map = new HashMap<>();
map.put("1002", "I");
map.put("1009", "I");
map.put("1004", "U");
map.put("1069", "U");
map.put("1071", "U");