From 40c7ca78eee49c3e3235b0ad8910d7675573f720 Mon Sep 17 00:00:00 2001 From: rbw <2051606263@qq.com> Date: Tue, 16 Sep 2025 19:19:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bp/rule/AfterDelSyncEpicMesRule.java | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java index 5e70a85..ca370aa 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java @@ -1,23 +1,34 @@ package nc.bs.mmpac.pmo.pac0002.bp.rule; +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.logging.Log; import nc.bs.uapbd.util.MyHelper; +import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.impl.pubapp.pattern.rule.ICompareRule; import nc.util.mmf.framework.base.MMArrayUtil; +import nc.vo.bd.bom.bom0202.entity.BomVO; +import nc.vo.bd.material.MaterialVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; import nc.vo.org.DeptVO; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; import nc.vo.pubapp.pattern.exception.ExceptionUtils; + + import java.util.ArrayList; import java.util.List; import java.util.Map; + + /** * 流程生产订单删除后同步艾普MES * @@ -33,6 +44,8 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { private Map configParams; private Map deptParams; + private static String auditCode = "Y"; + private static final BaseDAO dao = new BaseDAO(); @Override @@ -64,6 +77,15 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { JSONArray jsonArray = new JSONArray(); // 推送到艾普MES系统 for (PMOAggVO aggVO : filteredOrders) { + PMOHeadVO head = aggVO.getParentVO(); + PMOItemVO[] bodys = aggVO.getChildrenVO(); + if(bodys == null || bodys.length == 0){ + logDl.error("生产订单"+head.getVbillcode()+"没有行信息,跳过同步"); + continue; + } + + JSONObject data = buildSyncData(aggVO); + pushData(pmoUrl, data); } } catch (Exception e) { @@ -73,6 +95,85 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { } + + /** + * 组装数据-流程生产订单+备料计划 + */ + private JSONObject buildSyncData(PMOAggVO aggVO) throws BusinessException { + PMOHeadVO headVo = aggVO.getParentVO(); + // 目前电力电子只做一个表体的订单,故只处理的流程生产订单第一个子表行 + PMOItemVO pmoItem = aggVO.getChildrenVO()[0]; + // 翻译字段值 + // 组织 + String pkOrg = headVo.getPk_org(); + String selectFields = OrgVO.CODE + "," + OrgVO.NAME; + Map orgMap = MyHelper.transferFields(OrgVO.getDefaultTableName(), selectFields, OrgVO.PK_ORG, pkOrg); + // 物料 + String cmaterialid = pmoItem.getCmaterialid(); + selectFields = MaterialVO.CODE + "," + MaterialVO.NAME; + Map goodsMap = MyHelper.transferFields(MaterialVO.getDefaultTableName(), selectFields, MaterialVO.PK_MATERIAL, cmaterialid); + // 项目 + // String cprojectid = pmoItem.getCprojectid(); + // selectFields = ProjectHeadVO.PROJECT_CODE + "," + ProjectHeadVO.PROJECT_NAME; + // Map projectMap = MyHelper.transferFields(ProjectHeadVO.getDefaultTableName(), selectFields, ProjectHeadVO.PK_PROJECT, cprojectid); + // 生产部门 cdeptid + String cdeptid = pmoItem.getCdeptid(); + String deptCode = MyHelper.transferField(DeptVO.getDefaultTableName(), DeptVO.CODE, DeptVO.PK_DEPT, cdeptid); + // 生产BOM版本 + String cbomversionid = pmoItem.getCbomversionid(); + String bomCode = MyHelper.transferField(BomVO.TABLE_NAME, BomVO.HVERSION, BomVO.CBOMID, cbomversionid); + // 组装数据 + JSONObject data = new JSONObject(); + JSONObject orderParam = new JSONObject(); + orderParam.put("type", "D"); // 唯一标识(主键) + // orderParam.put("siteCode", deptParams.getOrDefault(deptCode, ""));// 工厂编码 + orderParam.put("companyCode",deptCode);//公司编码 + + + orderParam.put("workOrderCode", headVo.getVbillcode());// 工单号 + orderParam.put("qty", String.valueOf(pmoItem.getNastnum())); // 计划数量,字符串类型 + + JSONArray orderArr = new JSONArray(); + orderArr.add(orderParam); + // 流程生产订单 + data.put("workOrders", orderArr); + + return data; + } + + + /** + * 调用MES的生产工单接口推送ERP的流程生产订单和备料计划或推送出厂编号 + * + * @param param 请求体 + * @throws BusinessException 如果发生非特定可忽略的错误 + */ + private void pushData(String reqUrl, Object param) throws BusinessException { + String responseString = null; + try { + // 转json字符串的时候保留null值 + String jsonStr = JSON.toJSONString(param, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); + logDl.error("EpicMes-PMO-param = " + jsonStr); + String baseUrl = configParams.get("epicMesUrl"); + String requestUrl = baseUrl + reqUrl; + logDl.error(" EpicMes-PMO-url = " + requestUrl); + responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); + logDl.error(" EpicMes-PMO-res = " + responseString); + + JSONObject resultObj = JSONObject.parseObject(responseString); + if (!"1".equals(resultObj.getString("flag"))) { + logDl.error("EpicMes-PMO-error,result[" + resultObj.toJSONString() + "]"); + throw new BusinessException("艾普MES返回错误信息:" + resultObj.getString("msg")); + } + } catch (Exception e) { + logDl.error(" 调用MES或处理响应时发生错误。原始响应: " + responseString + " 错误: " + e.getMessage(), e); + throw new BusinessException("调用艾普MES或处理响应时发生错误:" + e.getMessage(), e); + } + } + + + + /** * 检查并筛选需要同步的单据 */