From 3a38ee354c388278230dfe5e90347b20b2c94795 Mon Sep 17 00:00:00 2001 From: mzr Date: Thu, 16 Oct 2025 19:40:41 +0800 Subject: [PATCH 1/5] =?UTF-8?q?MyHelper=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- uapbd/src/public/nc/bs/uapbd/util/MyHelper.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java b/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java index 0a157b8d..9edcb8f3 100644 --- a/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java +++ b/uapbd/src/public/nc/bs/uapbd/util/MyHelper.java @@ -153,8 +153,7 @@ public class MyHelper { DefdocVO[] defdocVOs = (DefdocVO[]) new HYSuperDMO().queryByWhereClause(DefdocVO.class, strWhere); if (defdocVOs != null) { for (DefdocVO defdocVO : defdocVOs) { - String value = StringUtils.isEmpty(defdocVO.getMemo()) ? defdocVO.getName() : defdocVO.getMemo(); - map.put(defdocVO.getCode().trim(), value); + map.put(defdocVO.getCode().trim(), defdocVO.getName()); } } } catch (DAOException e) { From 7d2d0abed815385cc90cff4a6c8d8aea6442fc9d Mon Sep 17 00:00:00 2001 From: mzr Date: Thu, 16 Oct 2025 21:06:45 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=B2=BE=E5=AF=86=E9=AB=98=E5=8E=8B?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8E=A8=E9=80=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pfxx/plugin/MaterialPlanPfxxPlugin.java | 299 ------------------ .../listener/MaterialToGyMesListener.java | 20 +- .../listener/MaterialToJmQmsListener.java | 149 +++++---- 3 files changed, 92 insertions(+), 376 deletions(-) delete mode 100644 uapbd/src/private/nc/bs/bd/pfxx/plugin/MaterialPlanPfxxPlugin.java diff --git a/uapbd/src/private/nc/bs/bd/pfxx/plugin/MaterialPlanPfxxPlugin.java b/uapbd/src/private/nc/bs/bd/pfxx/plugin/MaterialPlanPfxxPlugin.java deleted file mode 100644 index cd67832a..00000000 --- a/uapbd/src/private/nc/bs/bd/pfxx/plugin/MaterialPlanPfxxPlugin.java +++ /dev/null @@ -1,299 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - -package nc.bs.bd.pfxx.plugin; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.serializer.SerializerFeature; -import nc.bs.dao.BaseDAO; -import nc.bs.dao.DAOException; -import nc.bs.framework.common.NCLocator; -import nc.bs.logging.Log; -import nc.bs.pfxx.ISwapContext; -import nc.bs.pfxx.plugin.AbstractPfxxPlugin; -import nc.bs.trade.business.HYPubBO; -import nc.bs.trade.business.HYSuperDMO; -import nc.bs.uapbd.util.MyHelper; -import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; -import nc.itf.bd.material.assign.IMaterialAssignService; -import nc.itf.bd.material.plan.IMaterialPlanQueryService; -import nc.itf.bd.material.plan.IMaterialPlanService; -import nc.jdbc.framework.processor.MapProcessor; -import nc.pubitf.uapbd.IMaterialPubService; -import nc.util.mmf.framework.base.MMValueCheck; -import nc.vo.bd.defdoc.DefdocVO; -import nc.vo.bd.errorlog.ErrLogReturnValue; -import nc.vo.bd.material.MaterialVO; -import nc.vo.bd.material.plan.MaterialPlanVO; -import nc.vo.bd.material.stock.MaterialReplVO; -import nc.vo.bd.material.stock.MaterialStockVO; -import nc.vo.pfxx.auxiliary.AggxsysregisterVO; -import nc.vo.pfxx.util.PfxxPluginUtils; -import nc.vo.pub.BusinessException; - -import java.util.*; -import java.util.stream.Stream; - -public class MaterialPlanPfxxPlugin extends AbstractPfxxPlugin { - IMaterialPlanQueryService materialplanqueryservice = null; - IMaterialPlanService materialplanservice = null; - IMaterialAssignService assignservice = null; - - private static final String LOG_INFO_NAME = "qyMesLog"; - private static final Log logger = Log.getInstance(LOG_INFO_NAME); - private static final String reqUrl = "/IF_QyErpApi.ashx?action=addwlxx"; - private Map configParams; - - public MaterialPlanPfxxPlugin() { - } - - protected Object processBill(Object vo, ISwapContext swapContext, AggxsysregisterVO aggvo) throws BusinessException { - MaterialPlanVO planvo = (MaterialPlanVO) vo; - MaterialPlanVO[] pvos = this.getMaterialPlanQueryService().queryMaterialPlanVOs(new String[]{planvo.getPk_org()}, planvo.getPk_material()); - if (pvos != null && pvos.length != 0) { - planvo = this.updateMaterialPlan(pvos, planvo); - } else { - planvo = this.insertMaterialPlan(planvo); - PfxxPluginUtils.addDocIDVsPKContrast(swapContext.getBilltype(), swapContext.getDocID(), planvo.getPrimaryKey()); - } - - return planvo.getPrimaryKey(); - } - - private MaterialPlanVO insertMaterialPlan(MaterialPlanVO planvo) throws BusinessException { - ErrLogReturnValue value = this.getService().assignByPks(new String[]{planvo.getPk_material()}, new String[]{planvo.getPk_org()}, true); - MaterialPlanVO[] pvos = this.getMaterialPlanQueryService().queryMaterialPlanVOs(new String[]{planvo.getPk_org()}, planvo.getPk_material()); - if (pvos != null && pvos.length > 0) { - planvo = this.updateMaterialPlan(pvos, planvo); - } - - return planvo; - } - - private MaterialPlanVO updateMaterialPlan(MaterialPlanVO[] pvos, MaterialPlanVO planvo) throws BusinessException { - List list = new ArrayList(); - MaterialPlanVO vo = pvos[0]; - String[] attrs = planvo.getAttributeNames(); - - for (String attr : attrs) { - if (planvo.getAttributeValue(attr) != null && !"materialrepl".equals(attr)) { - vo.setAttributeValue(attr, planvo.getAttributeValue(attr)); - } - } - - if (vo.getMaterialrepl() != null && vo.getMaterialrepl().length > 0) { - for (MaterialReplVO replvo : vo.getMaterialrepl()) { - replvo.setStatus(3); - list.add(replvo); - } - } - - if (planvo.getMaterialrepl() != null && planvo.getMaterialrepl().length > 0) { - for (MaterialReplVO replvo : planvo.getMaterialrepl()) { - replvo.setStatus(2); - list.add(replvo); - } - } - - vo.setMaterialrepl((MaterialReplVO[]) list.toArray(new MaterialReplVO[0])); - vo = this.getMaterialPlanService().updateMaterialPlanVO(vo); - syncQMS(vo); - return vo; - } - - private IMaterialPlanQueryService getMaterialPlanQueryService() { - if (this.materialplanqueryservice == null) { - this.materialplanqueryservice = (IMaterialPlanQueryService) NCLocator.getInstance().lookup(IMaterialPlanQueryService.class); - } - - return this.materialplanqueryservice; - } - - private IMaterialPlanService getMaterialPlanService() { - if (this.materialplanservice == null) { - this.materialplanservice = (IMaterialPlanService) NCLocator.getInstance().lookup(IMaterialPlanService.class); - } - - return this.materialplanservice; - } - - private IMaterialAssignService getService() { - if (this.assignservice == null) { - this.assignservice = (IMaterialAssignService) NCLocator.getInstance().lookup(IMaterialAssignService.class); - } - - return this.assignservice; - } - - private void syncQMS(MaterialPlanVO planVO) throws BusinessException { - // 修改物料计划信息的接口执行之后同步修改启源物料 - configParams = MyHelper.getConfigParams("jm-config", null); - buildSyncData(planVO); - } - - /** - * 构建同步数据 - */ - private void buildSyncData(MaterialPlanVO planVO) throws BusinessException { - String pkMaterial = planVO.getPk_material(); - String pkOrg = planVO.getPk_org(); - HYPubBO hyPub = new HYPubBO(); - MaterialVO vo = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pkMaterial); - // 判断物料的业务单元是否是精密公司,不是则跳过 - Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "jmOrg"); - if (num <= 0) { - return; - } - // 字段值翻译 - // 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, - new String[]{MaterialPlanVO.DEF2}); - // 计划信息自定义项2(原系统编码)BIP传启源物料档案的物料编码,BIP中物料编码传启源自定义字段“BIP物料编码” - String qyCode = ""; - if (MMValueCheck.isNotEmpty(planMap) && - MMValueCheck.isNotEmpty(planMap.get(pkMaterial))) { - qyCode = planMap.get(pkMaterial).getDef2(); - } else { - qyCode = vo.getCode(); - } - // 1=未启用;2=已启用;3=已停用; - Integer enablestate = vo.getEnablestate(); - String statusCode = (3 == enablestate) ? "1" : "0"; - Map stockMap = MyHelper.getMapValByCondition(MaterialStockVO.getDefaultTableName(), "def3,def4,martype", - MaterialStockVO.PK_MATERIAL + " = '" + pkMaterial + "' and pk_org = '" + pkOrg + "'"); - // 制造件传启源 - if (!"MR".equals(stockMap.get("martype"))) { - return; - } - // 物料标志和产品分类字段在库存信息页签中,分配物料的时候没有默认值,需要在此处设置 - // 物料标志 - String wlbz = "产品"; - String wlbzId = stockMap.get("def3") + ""; - String defName = getDefName("zdy-jmzz001", wlbzId); - if (MMValueCheck.isNotEmpty(defName)) { - wlbz = defName; - } - // 产品分类 - String cpfl; - String cpflId = stockMap.get("def4") + ""; - String defName1 = getDefName("zdy-jmzz002", cpflId); - if (MMValueCheck.isEmpty(defName1)) { - return;// 缺少产品分类则跳过同步启源 - } - cpfl = defName1; - // 组装数据 - JSONObject singleObj = new JSONObject(); - // 批次编号,用于唯一标识当前传输的物料数据批次,便于追溯和批量处理 - long cts = System.currentTimeMillis(); - singleObj.put("batchid", cts); - JSONObject contentObj = new JSONObject(); - contentObj.put("meswlbh", qyCode); // 启源物料编码 - contentObj.put("bipwlbh", vo.getCode()); // BIP物料编码 - contentObj.put("wlmc", vo.getName()); // 物料名称 - String wlxhgg = MyHelper.skipNull(vo.getMaterialtype()) + MyHelper.skipNull(vo.getMaterialspec()); - contentObj.put("wlxhgg", wlxhgg); // 物料型号规格 - contentObj.put("wlfl", ""); // 物料分类 - contentObj.put("cpfl", cpfl); // 产品分类 - contentObj.put("wlbz", wlbz); // 物料标志 - contentObj.put("sjjldw", unitMap.get("unitname")); // 设计计量单位 - contentObj.put("cgjldw", unitMap.get("deputy_unitname")); // 采购计量单位 - contentObj.put("zhxs", unitMap.getOrDefault("convertRate", "1.00")); // 转换系数 - contentObj.put("flag_fq", statusCode); // 1/0 传递1代表物料废弃 - contentObj.put("bz", vo.getMemo()); // 备注信息 - JSONArray contentArr = new JSONArray(); - contentArr.add(contentObj); - singleObj.put("Content", contentArr); - pushData(singleObj); - } - - /** - * 推送同步数据 - */ - private void pushData(JSONObject param) throws BusinessException { - // String jsonString = param.toJSONString(); - // 转json字符串的时候保留null值 - String jsonStr = JSON.toJSONString(param, - SerializerFeature.WriteMapNullValue, - SerializerFeature.WriteNullStringAsEmpty - ); - logger.error("QMS-Material-param = " + jsonStr); - // NCCForUAPLogger.debug("QMS-Material-param = " + jsonStr); - String baseUrl = configParams.get("qmsBaseUrl"); - String requestUrl = baseUrl + reqUrl; - logger.error("QMS-Material-url = " + requestUrl); - String result = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); - JSONObject resultObj = JSONObject.parseObject(result); - logger.error("QMS-Material-res = " + result); - - if (!"true".equals(resultObj.getString("success"))) { - logger.error("QMS-Material-error,result[" + resultObj.toJSONString() + "]"); - throw new BusinessException("QMS-Material-error:" + resultObj.getString("message")); - } - } - - 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 " + - "left join bd_materialconvert b on a.pk_material = b.pk_material " + - "left join bd_measdoc c on a.pk_measdoc = c.pk_measdoc " + - "left join bd_measdoc d on b.pk_measdoc = d.pk_measdoc " + - "where a.pk_material = '" + pkMaterial + "' "; - Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor()); - map.put("convertRate", MyHelper.transferSpecialField(map.get("measrate") + "")); - return map; - } - - private boolean checkIfOrg(String code, Map configParams) throws BusinessException { - String targetCode = configParams.get("jmOrg"); - if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { - throw new BusinessException("未配置组织参数"); - } - String[] orgItem = targetCode.split(","); - for (String orgCode : orgItem) { - if (!orgCode.isEmpty() && orgCode.equals(code)) { - return false; - } - } - return true; - } - - public Map queryMaterialPlanInfoByPks(String[] pks, String pk_stockorg, - String[] fields) throws BusinessException { - Map map = null; - List vids = Stream.of(pks).filter(Objects::nonNull).distinct().toList(); - if (vids.isEmpty()) { - map = new HashMap<>(); - } else { - map = NCLocator.getInstance().lookup(IMaterialPubService.class) - .queryMaterialPlanInfoByPks(vids.toArray(new String[0]), pk_stockorg, fields); - } - - return map; - } - - /** - * 获取自定义项信息 - */ - private String getDefName(String code, String pk_defdoc) { - String res = ""; - String strWhere = " pk_defdoclist in (select pk_defdoclist from bd_defdoclist where code='" + code + "' and dr=0 ) and dr = 0 and pk_defdoc = '" + pk_defdoc + "'"; - try { - DefdocVO[] defdocVOs = (DefdocVO[]) new HYSuperDMO().queryByWhereClause(DefdocVO.class, strWhere); - if (defdocVOs != null && defdocVOs.length > 0) { - res = defdocVOs[0].getName().trim(); - } - } catch (DAOException e) { - logger.error("gyMes-SaleOrder-error,getDefName[" + e.getMessage() + "]"); - } - return res; - } -} 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 6b447b35..0246ab3b 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java @@ -51,14 +51,17 @@ public class MaterialToGyMesListener implements IBusinessListener { BDCommonEvent e = (BDCommonEvent) event; String eventType = event.getEventType(); Object[] objs = e.getObjs(); + if (objs == null || objs.length == 0) { + return; + } + 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'"); HYPubBO hyPub = new HYPubBO(); // EventType是事件编码 1002-新增后 1004-修改后 1071-状态由停用变为启用后 1069-状态由启用变为停用后 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[]) { // 库存信息修改后 @@ -88,11 +91,6 @@ public class MaterialToGyMesListener implements IBusinessListener { } } else if ("1009".equals(eventType)) { // 物料可见性范围-分配后 1009 - 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 voList = new ArrayList<>(); for (Object obj : objs) { MultiOrgAssignVO vo = (MultiOrgAssignVO) obj; @@ -242,7 +240,7 @@ public class MaterialToGyMesListener implements IBusinessListener { /** * 处理物料VO的通用方法 */ - private void processMaterialChange(Object[] objs, List list) throws BusinessException { + private void processMaterialChange(Object[] objs, List list) throws BusinessException { HYPubBO hyPub = new HYPubBO(); for (Object newVO : objs) { String pk_material = getPkMaterialFromVO(newVO); diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToJmQmsListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToJmQmsListener.java index 77f146c2..0449cc61 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToJmQmsListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToJmQmsListener.java @@ -23,6 +23,7 @@ import nc.util.mmf.framework.base.MMValueCheck; import nc.vo.bd.defdoc.DefdocVO; 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.org.OrgVO; import nc.vo.pub.BusinessException; @@ -41,58 +42,50 @@ public class MaterialToJmQmsListener implements IBusinessListener { private static final Log logger = Log.getInstance(LOG_INFO_NAME); private static final String reqUrl = "/IF_QyErpApi.ashx?action=addwlxx"; private Map configParams; + private String pkOrg1 = ""; @Override public void doAction(IBusinessEvent event) throws BusinessException { BDCommonEvent e = (BDCommonEvent) event; String eventType = event.getEventType(); Object[] objs = e.getObjs(); + if (objs == null || objs.length == 0) { + return; + } + configParams = MyHelper.getConfigParams("jm-config", null); + if (configParams.isEmpty()) { + throw new BusinessException("精密的QMS接口缺少配置"); + } + pkOrg1 = MyHelper.getStrValByCondition(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE + " = 'C038' and ISBUSINESSUNIT = 'Y'"); HYPubBO hyPub = new HYPubBO(); - // EventType是事件编码 1002-新增后 1004-修改后 1071-状态由停用变为启用后 1069-状态由启用变为停用后 MaterialStockVO + // EventType是事件编码 1002-新增后 1004-修改后 1071-状态由停用变为启用后 1069-状态由启用变为停用后 if ("1004".equals(eventType) || "1071".equals(eventType) || "1069".equals(eventType)) { - MaterialVO[] useVOs = null; - if (objs == null) { - return; - } else if (objs instanceof MaterialVO[]) { - useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); + List list = new ArrayList<>(); + if (objs instanceof MaterialVO[]) { + // 基本信息修改后/停用启用 + MaterialVO[] useVOs = ArrayClassConvertUtil.convert(objs, MaterialVO.class); + for (MaterialVO materialVO : useVOs) { + String pkMaterial = materialVO.getPk_material(); + // 如果修改基本信息,判断物料所属组织中是否存在精密铸造,不存在则跳过 + Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "jmOrg"); + if (num <= 0) { + continue; + } + list.add(materialVO); + } } else if (objs instanceof MaterialStockVO[]) { - List list = new ArrayList<>(); // 库存信息修改 - MaterialStockVO[] materialStockVOS = ArrayClassConvertUtil.convert(objs, MaterialStockVO.class); - for (MaterialStockVO stockVO : materialStockVOS) { - String pkMaterial = stockVO.getPk_material(); - if (MMValueCheck.isEmpty(pkMaterial)) { - continue; - } - MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pkMaterial); - list.add(materialVO); - } - useVOs = list.toArray(new MaterialVO[0]); + processMaterialChange(objs, list); } else if (objs instanceof MaterialPlanVO[]) { - List list = new ArrayList<>(); // 计划信息修改 - MaterialPlanVO[] planVOS = ArrayClassConvertUtil.convert(objs, MaterialPlanVO.class); - for (MaterialPlanVO planVO : planVOS) { - String pkMaterial = planVO.getPk_material(); - if (MMValueCheck.isEmpty(pkMaterial)) { - continue; - } - MaterialVO materialVO = (MaterialVO) hyPub.queryByPrimaryKey(MaterialVO.class, pkMaterial); - list.add(materialVO); - } - useVOs = list.toArray(new MaterialVO[0]); + processMaterialChange(objs, list); } - configParams = MyHelper.getConfigParams("jm-config", null); - if (configParams.isEmpty()) { - throw new BusinessException("精密的QMS接口缺少配置"); + if (!list.isEmpty()) { + MaterialVO[] useVOs = list.toArray(new MaterialVO[0]); + buildSyncData(useVOs, eventType); } - buildSyncData(useVOs, eventType); } else if ("1009".equals(eventType)) { // 物料可见性范围-分配后 1009 - configParams = MyHelper.getConfigParams("jm-config", null); - if (configParams.isEmpty()) { - throw new BusinessException("精密的QMS接口缺少配置"); - } List voList = new ArrayList<>(); for (Object obj : objs) { MultiOrgAssignVO vo = (MultiOrgAssignVO) obj; @@ -119,19 +112,8 @@ public class MaterialToJmQmsListener implements IBusinessListener { */ private void buildSyncData(MaterialVO[] useVOs, String eventType) throws BusinessException { for (MaterialVO vo : useVOs) { - // 判断物料的业务单元是否是精密公司,不是则跳过 - String pkOrg = vo.getPk_org(); String pkMaterial = vo.getPk_material(); - String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); - String pkOrg1 = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE, "C038"); - Integer num = MyHelper.checkIfOrg(configParams, pkMaterial, "jmOrg"); - 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}, pkOrg1, @@ -188,28 +170,15 @@ public class MaterialToJmQmsListener implements IBusinessListener { contentObj.put("zhxs", unitMap.getOrDefault("convertRate", "1.00")); // 转换系数 contentObj.put("flag_fq", statusCode); // 1/0 传递1代表物料废弃 contentObj.put("bz", vo.getMemo()); // 备注信息 + contentObj.put("djzl", vo.getDef28()); // 单台重量(净重) + contentObj.put("djzl_mz", vo.getDef27()); // 单件重量(毛重) + contentObj.put("jmkzl_bkhs", vo.getDef32()); // 不可回收浇冒口重量 + contentObj.put("jmkzl_khs", vo.getDef33()); // 可回收浇冒口重量 + contentObj.put("lxzl", vo.getDef31()); // 铝屑重量 + contentObj.put("cz", vo.getDef5()); // 材质 JSONArray contentArr = new JSONArray(); contentArr.add(contentObj); singleObj.put("Content", contentArr); - /* - { - "batchid": "10001", - "Content": [ - { - "meswlbh": "ACC26711", 启源物料编码 - "bipwlbh": "ACC26711", BIP物料编码 - "wlmc": "铜排",物料名称 - "wlxhgg": "15558190831", 物料型号规格 - "wlfl": "铜排", 物料分类 - "cpfl": "", 如果物料是产品需要填写产品分类 - "sjjldw": "根", 设计计量单位 - "cgjldw": "KG", 采购计量单位 - "zhxs": "6", 转换系数,用于实物单位与采购单位的换算(即 1 根铜排的长度为 6.00 米),精确到两位小数,提升换算准确性 - "bz": "备注" 备注信息 - } - ] - } - */ pushData(singleObj); } } @@ -251,6 +220,54 @@ public class MaterialToJmQmsListener implements IBusinessListener { return map; } + /** + * 处理物料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(pkOrg1) && !pkOrg1.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 boolean checkIfOrg(String code, Map configParams) throws BusinessException { String targetCode = configParams.get("jmOrg"); if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { From c9f416977b2452bb88afc49ab97bd21d527f0608 Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 17 Oct 2025 08:41:55 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=B2=BE=E5=AF=86=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95-=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=90=8C=E6=AD=A5=E5=90=AF=E6=BA=90=E3=80=81?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=90=AF=E6=BA=90=E6=97=B6=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/pmo/pac0002/bp/PMOAdjustBP.java | 3 ++ .../bp/rule/AfterPmoSyncJmQMSRule.java | 40 ++++++++++++++----- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOAdjustBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOAdjustBP.java index 8dea3733..d2b1ef2c 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOAdjustBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMOAdjustBP.java @@ -5,6 +5,7 @@ import java.util.List; import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApproveSyncEpicMesRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterApprovingSynchronizeRuleRZ; +import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterPmoSyncJmQMSRule; import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateRule; import nc.bs.mmpac.pmo.pac0002.rule.PMOAdjustReserveRule; @@ -254,6 +255,8 @@ public class PMOAdjustBP { processer.addAfterFinalRule(pushRZRule); // 变更后推送流程生产订单到艾普MES processer.addAfterRule(new AfterApproveSyncEpicMesRule()); + // 变更后推送流程生产订单到启源(精密铸造) + processer.addAfterRule(new AfterPmoSyncJmQMSRule()); } // 挪退料建议 diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java index f57c0afd..96e492a0 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java @@ -13,6 +13,7 @@ import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.impl.pubapp.pattern.rule.IRule; import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.MapProcessor; +import nc.util.mmf.framework.base.MMValueCheck; import nc.vo.bc.pmpub.project.ProjectHeadVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; @@ -23,6 +24,7 @@ import nc.vo.pub.lang.UFDateTime; import nc.vo.sm.UserVO; import java.util.Map; +import java.util.Set; /** * 精密-流程生产订单投放后推送QMS @@ -70,19 +72,18 @@ public class AfterPmoSyncJmQMSRule implements IRule { if (checkIfOrg(orgCode, configParams)) { continue; } - - if(vo.getChildrenVO().length >=0 ){ - if(vo.getChildrenVO()[0].getAttributeValue("vdef32").equals("Y")){ - // continue; - } - } - // 组装数据 - JSONObject singleObj = new JSONObject(); PMOHeadVO pmoHeadVO = vo.getParentVO(); PMOItemVO[] itemVOS = vo.getChildrenVO(); + + // 判断单据类型,部分类型的生产订单跳过推送 + String vtrantypecode = pmoHeadVO.getVtrantypecode(); + if (checkBillType(vtrantypecode)) continue; + String sql = " select user_name from sm_user where dr = 0 and cuserid = '" + pmoHeadVO.getBillmaker() + "' "; String billmakerName = (String) baseDAO.executeQuery(sql, new ColumnProcessor()); + // 组装数据 + JSONObject singleObj = new JSONObject(); singleObj.put("batchid", System.currentTimeMillis()); singleObj.put("bipzyid", pmoHeadVO.getCpmohid());// BIP订单主键 singleObj.put("scdh", pmoHeadVO.getVbillcode()); @@ -115,12 +116,12 @@ public class AfterPmoSyncJmQMSRule implements IRule { String wlxhgg = MyHelper.skipNull(mrlmap.get("materialspec")) + MyHelper.skipNull(mrlmap.get("materialtype")); itemObj.put("wlxhgg", wlxhgg);// 产品型号规格 itemObj.put("jhsl", item.getNastnum().toString());// 计划数量,该产品的生产计划数量 - UFDateTime tplanendtime = item.getTplanendtime(); + UFDateTime tplanendtime = item.getTplanendtime(); // 计划完工时间 String tplanendtimeStr = ""; if (tplanendtime != null) { tplanendtimeStr = tplanendtime.toString(); } - itemObj.put("jhrq", tplanendtimeStr);// 计划数量,该产品的生产计划数量 + itemObj.put("jhrq", tplanendtimeStr);// 计划日期,该产品的计划生产日期 int flag_wg = 0; int flag_jqbz = 0; if (fitemstatus == 2) { @@ -174,6 +175,24 @@ public class AfterPmoSyncJmQMSRule implements IRule { } } + /** + * 判断单据类型 + * + * @param vtrantypecode 单据类型编码 + */ + private boolean checkBillType(String vtrantypecode) { + String typeCodeStr = configParams.get("MMleixingCode"); + if (MMValueCheck.isNotEmpty(typeCodeStr)) { + if (typeCodeStr.contains(",")) { + Set codeSet = Set.of(typeCodeStr.split(",", -1)); + return codeSet.contains(vtrantypecode); + } else { + return typeCodeStr.equals(vtrantypecode); + } + } + return false; + } + private boolean checkIfOrg(String code, Map configParams) throws BusinessException { String targetCode = configParams.get("xbOrg"); if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { @@ -187,6 +206,7 @@ public class AfterPmoSyncJmQMSRule implements IRule { } return true; } + private void updatePmo(String cpmohid) throws DAOException { BaseDAO dao = new BaseDAO(); String sql = "update mm_mo set vdef32='Y' where cpmohid='" From 138fdad30f71fe26cd0add05c304433e7b198d36 Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 17 Oct 2025 09:49:23 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=9B=9E=E9=80=80=E4=BB=A3=E7=A0=81-AfterP?= =?UTF-8?q?moSyncJmQMSRule=E6=98=AF=E7=B2=BE=E5=AF=86=E7=9A=84=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=AE=A2=E5=8D=95=E6=8E=A8=E9=80=81=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E6=9D=8E=E6=98=8A=E6=8A=8A=E7=AE=B1=E5=8F=98=E8=A6=81=E6=B1=82?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=87=E5=BF=97=E5=AD=97=E6=AE=B5=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=A2=9E=E5=8A=A0=E5=88=B0=E6=AD=A4=E5=A4=84?= =?UTF-8?q?=EF=BC=8C=E7=B2=BE=E5=AF=86=E5=AE=A2=E6=88=B7=E6=9C=AA=E6=8F=90?= =?UTF-8?q?=E5=8F=8A=E6=AD=A4=E9=9C=80=E6=B1=82=E5=9B=A0=E6=AD=A4=E5=9B=9E?= =?UTF-8?q?=E9=80=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java index 96e492a0..002f16bd 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterPmoSyncJmQMSRule.java @@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import nc.bs.dao.BaseDAO; -import nc.bs.dao.DAOException; import nc.bs.logging.Log; import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; @@ -146,7 +145,6 @@ public class AfterPmoSyncJmQMSRule implements IRule { singleObj.put("Content", contentArray); pushData(singleObj); - updatePmo(vo.getParentVO().getCpmohid()); } } @@ -171,7 +169,7 @@ public class AfterPmoSyncJmQMSRule implements IRule { if (!"true".equals(resultObj.getString("success"))) { logger.error("QMS-PMO-JM-error,result[" + resultObj.toJSONString() + "]"); - throw new BusinessException("QMS-PMO-JM-error:" + resultObj.getString("message")); + throw new BusinessException("启源错误信息:" + resultObj.getString("message")); } } @@ -194,7 +192,7 @@ public class AfterPmoSyncJmQMSRule implements IRule { } private boolean checkIfOrg(String code, Map configParams) throws BusinessException { - String targetCode = configParams.get("xbOrg"); + String targetCode = configParams.get("jmOrg"); if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { throw new BusinessException("未配置组织参数"); } @@ -207,12 +205,4 @@ public class AfterPmoSyncJmQMSRule implements IRule { return true; } - private void updatePmo(String cpmohid) throws DAOException { - BaseDAO dao = new BaseDAO(); - String sql = "update mm_mo set vdef32='Y' where cpmohid='" - + cpmohid + "'"; - dao.executeUpdate(sql); - } - - } From c6ccaf79e9f46530cf3361eba853984c78802a70 Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 17 Oct 2025 11:03:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(material):=20=E9=AB=98=E5=8E=8BMES?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=9F=A5=E8=AF=A2=E5=BA=93=E5=AD=98=E5=92=8C?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E4=BF=A1=E6=81=AF=E6=97=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=BB=84=E7=BB=87ID=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/bd/material/baseinfo/MaterialToGyMesListener.java | 7 ++++--- .../uapbd/material/listener/MaterialToGyMesListener.java | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/uapbd/src/private/nc/impl/bd/material/baseinfo/MaterialToGyMesListener.java b/uapbd/src/private/nc/impl/bd/material/baseinfo/MaterialToGyMesListener.java index 941e82db..460922c9 100644 --- a/uapbd/src/private/nc/impl/bd/material/baseinfo/MaterialToGyMesListener.java +++ b/uapbd/src/private/nc/impl/bd/material/baseinfo/MaterialToGyMesListener.java @@ -42,6 +42,7 @@ public class MaterialToGyMesListener implements IBusinessListener { private static final String updateUrl = "/bip/order/materialUpdate"; private Map configParams; private BaseDAO baseDAO = new BaseDAO(); + private String orgId = ""; public void doAction(IBusinessEvent event) throws BusinessException { BDCommonEvent e = (BDCommonEvent) event; @@ -52,7 +53,7 @@ public class MaterialToGyMesListener implements IBusinessListener { if (configParams.isEmpty()) { throw new BusinessException("高压的gymes接口缺少配置"); } - + orgId = MyHelper.getStrValByCondition(OrgVO.getDefaultTableName(), OrgVO.PK_ORG, OrgVO.CODE + " = 'C046' and ISBUSINESSUNIT = 'Y'"); HYPubBO hyPub = new HYPubBO(); List voList = new ArrayList<>(); for (Object obj : objs) { @@ -217,7 +218,7 @@ public class MaterialToGyMesListener implements IBusinessListener { private Map getStockInfo(String pkMaterial) throws BusinessException { String sql = " select martype, wholemanaflag, outpriority, remain,bd_stordoc.code as pk_stordoc" + " from bd_materialstock left join bd_stordoc on bd_stordoc.pk_stordoc = bd_materialstock.pk_stordoc " + - " where pk_material = '" + pkMaterial + "' "; + " where pk_material = '" + pkMaterial + "' " + " and bd_materialstock.pk_org = '" + orgId + "' "; Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor()); return map; } @@ -228,7 +229,7 @@ public class MaterialToGyMesListener implements IBusinessListener { "FROM " + " bd_materialprod a" + " left join org_dept b on a.pk_prodeptdoc = b.pk_dept " + - " where a.pk_material = '" + pkMaterial + "' "; + " where a.pk_material = '" + pkMaterial + "' " + " and a.pk_org = '" + orgId + "' "; Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor()); return map; } 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 0246ab3b..cb81fabe 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToGyMesListener.java @@ -300,7 +300,7 @@ public class MaterialToGyMesListener implements IBusinessListener { private Map getStockInfo(String pkMaterial) throws BusinessException { String sql = " select martype, wholemanaflag, outpriority, remain,bd_stordoc.code as pk_stordoc" + " from bd_materialstock left join bd_stordoc on bd_stordoc.pk_stordoc = bd_materialstock.pk_stordoc " + - " where pk_material = '" + pkMaterial + "' "; + " where pk_material = '" + pkMaterial + "' " + " and bd_materialstock.pk_org = '" + orgId + "' "; Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor()); return map; } @@ -311,7 +311,7 @@ public class MaterialToGyMesListener implements IBusinessListener { "FROM " + " bd_materialprod a" + " left join org_dept b on a.pk_prodeptdoc = b.pk_dept " + - " where a.pk_material = '" + pkMaterial + "' "; + " where a.pk_material = '" + pkMaterial + "' " + " and a.pk_org = '" + orgId + "' "; Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor()); return map; }