From 4d1cf632e74893178626df89eb313b7d7e0ad90b Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 16 Sep 2025 13:56:53 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor(mmpac):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=87=BA=E5=8E=82=E7=BC=96=E7=A0=81=E7=9A=84=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nc/bs/mmpac/pmo/pac0002/bp/rule/util/SyncEpicMesUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/util/SyncEpicMesUtil.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/util/SyncEpicMesUtil.java index 50b7426..ee79efd 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/util/SyncEpicMesUtil.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/util/SyncEpicMesUtil.java @@ -339,7 +339,7 @@ public class SyncEpicMesUtil { if (jsonArray.isEmpty()) { return null; } - obj.put("releaseNo", jsonArray.toString()); + obj.put("releaseNo", jsonArray); return obj; } From 974720f4fd0f86811eff9f771450268076b0a3fb Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 16 Sep 2025 16:56:43 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=A0=E9=99=A4=E5=90=8E=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=89=BE=E6=99=AEMES-V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bp/rule/AfterDelSyncEpicMesRule.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java 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 new file mode 100644 index 0000000..5e70a85 --- /dev/null +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterDelSyncEpicMesRule.java @@ -0,0 +1,104 @@ +package nc.bs.mmpac.pmo.pac0002.bp.rule; + + +import com.alibaba.fastjson.JSONArray; +import nc.bs.dao.BaseDAO; +import nc.bs.logging.Log; +import nc.bs.uapbd.util.MyHelper; +import nc.impl.pubapp.pattern.rule.ICompareRule; +import nc.util.mmf.framework.base.MMArrayUtil; +import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO; +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 + * + * @author mzr + * @date 2025/9/16 + */ +public class AfterDelSyncEpicMesRule implements ICompareRule { + + private static final String LOG_INFO_NAME = "dldzlog"; + + private static final Log logDl = Log.getInstance(LOG_INFO_NAME); + private static final String pmoUrl = "/prj-v5-web/ext/api/workOrder"; + private Map configParams; + private Map deptParams; + + private static final BaseDAO dao = new BaseDAO(); + + @Override + public void process(PMOAggVO[] pmoAggVOS, PMOAggVO[] originVOs) { + if (MMArrayUtil.isEmpty(pmoAggVOS)) { + return; + } + try { + configParams = MyHelper.getConfigParams("Dldz-config", null); + if (configParams.isEmpty()) { + // throw new BusinessException("电力电子的艾普MES接口缺少配置"); + logDl.error("电力电子的艾普MES接口缺少配置"); + return; + } + deptParams = MyHelper.getConfigParams("Dldz-dept", null); + if (deptParams.isEmpty()) { + // throw new BusinessException("电力电子的艾普MES接口缺少部门编码映射配置"); + logDl.error("电力电子的艾普MES接口缺少部门编码映射配置"); + return; + } + String deptRange = String.join(",", deptParams.keySet()); + configParams.put("deptRange", deptRange); + List filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS); + if (filteredOrders.isEmpty()) { + logDl.error("没有符合条件的生产订单需要同步到艾普MES系统。"); + return; + } + logDl.info("开始同步生产订单到艾普MES系统,符合条件的订单数量: " + filteredOrders.size()); + JSONArray jsonArray = new JSONArray(); + // 推送到艾普MES系统 + for (PMOAggVO aggVO : filteredOrders) { + + } + } catch (Exception e) { + logDl.error("删除同步生产订单到艾普MES系统失败: " + e.getMessage(), e); + ExceptionUtils.wrappException(e); + } + } + + + /** + * 检查并筛选需要同步的单据 + */ + private List checkAndFilterBillSrcOrg(PMOAggVO[] pmoAggVOS) throws BusinessException { + List aggvoList = new ArrayList<>(); + for (PMOAggVO aggVo : pmoAggVOS) { + String pkOrg = aggVo.getParentVO().getPk_org(); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); + // 检查当前组织是否为电力电子 + if (MyHelper.checkIfDldzOrg(orgCode, configParams)) { + continue; + } + // 按照部门筛选生产订单,只传消弧车间、电容车间、成套车间(部门是配置项) + PMOItemVO childrenVO = aggVo.getChildrenVO()[0]; + String cdeptid = childrenVO.getCdeptid(); + String deptCode = MyHelper.transferField(DeptVO.getDefaultTableName(), DeptVO.CODE, DeptVO.PK_DEPT, cdeptid); + // 如果部门不在范围内则跳过本次循环 + String deptRange = configParams.get("deptRange"); + if (deptCode == null || !deptRange.contains(deptCode)) { + continue; + } + aggvoList.add(aggVo); + } + + return aggvoList; + } + + +} 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 3/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=90=8C=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); + } + } + + + + /** * 检查并筛选需要同步的单据 */ From d12c8a47a74784801598c08e4416ea6ca793ce68 Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 16 Sep 2025 19:40:15 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=86=85=E9=85=8D=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8E=A8PLM-=E4=BC=A0=E8=BE=93=E6=A0=87=E5=BF=97=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=B5=8B=E5=80=BC=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/client/nccloud/web/mmpac/pmo/action/PmoToPlmAction.java | 2 +- .../bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncPLMRule.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToPlmAction.java b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToPlmAction.java index 2427292..21c1d95 100644 --- a/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToPlmAction.java +++ b/mmpac/src/client/nccloud/web/mmpac/pmo/action/PmoToPlmAction.java @@ -173,7 +173,7 @@ public class PmoToPlmAction implements ICommonAction { throw new BusinessException(result.get("msg") + ""); } else { // 调整PLM传输状态 - String updateSql = "update mm_mo set vdef13 = '是' where cpmohid = '[cpmohid]'"; + String updateSql = "update mm_mo set vdef13 = 'Y' where cpmohid = '[cpmohid]'"; updateSql = updateSql.replace("[cpmohid]", parentVO.getPrimaryKey()); getDao().executeUpdate(updateSql); resultList.add(result); diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncPLMRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncPLMRule.java index a81b93f..ce225d9 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncPLMRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncPLMRule.java @@ -165,7 +165,7 @@ public class AfterApproveSyncPLMRule implements IRule { throw new BusinessException(result.get("msg").toString()); } else { // 璋冩暣PLM浼犺緭鐘舵 - String updateSql = "update mm_mo set vdef13 = '鏄' where cpmohid = '[cpmohid]'"; + String updateSql = "update mm_mo set vdef13 = 'Y' where cpmohid = '[cpmohid]'"; updateSql = updateSql.replace("[cpmohid]", parentVO.getPrimaryKey()); getDao().executeUpdate(updateSql); } From 18d2fd8bbfc7828ceca4c27c54339cda8cdf7e49 Mon Sep 17 00:00:00 2001 From: mzr Date: Tue, 16 Sep 2025 20:02:45 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8E=A8=E8=89=BE?= =?UTF-8?q?=E6=99=AEMES-=E7=89=A9=E6=96=99=E7=B1=BB=E5=9E=8B=E8=B5=8B?= =?UTF-8?q?=E5=80=BC=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/MaterialToEpicMesListener.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java index 4a361de..94432cc 100644 --- a/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java +++ b/uapbd/src/private/nccloud/api/uapbd/material/listener/MaterialToEpicMesListener.java @@ -13,10 +13,12 @@ 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.ColumnProcessor; 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.fi.pub.SqlUtils; import nc.vo.org.OrgVO; import nc.vo.pub.BusinessException; @@ -183,11 +185,22 @@ public class MaterialToEpicMesListener implements IBusinessListener { } private String getGoodsType(String pkMaterial) throws BusinessException { + String targetCode = configParams.get("dldzOrg"); + String[] orgItem = targetCode.split(","); + String inStr = SqlUtils.getInStr("b.code", orgItem, Boolean.TRUE); // 物料-库存信息-物料类型 DR=分销补货;FR=工厂补货;MR=制造件;PR=采购件;OT=委外件;ET=其他 - // mes物料类型 制造1 其它0 + // mes物料类型 制造1 其它0(ERP多个组织中如果有一个是制造件就传1) String mesType = "0"; - String martype = MyHelper.transferField(MaterialStockVO.getDefaultTableName(), MaterialStockVO.MARTYPE, MaterialStockVO.PK_MATERIAL, pkMaterial); - if ("MR".equals(martype)) { + // String martype = MyHelper.transferField(MaterialStockVO.getDefaultTableName(), MaterialStockVO.MARTYPE, MaterialStockVO.PK_MATERIAL, pkMaterial); + String countSql = "SELECT count(1)" + + " FROM bd_materialstock a" + + " LEFT JOIN org_stockorg b ON a.pk_org = b.pk_stockorg" + + " WHERE a.dr = 0 AND a.martype = 'MR' " + + " AND a.pk_material = '[pkMaterial]'" + + " AND " + inStr; + countSql = countSql.replace("[pkMaterial]", pkMaterial); + Integer num = (Integer) new BaseDAO().executeQuery(countSql, new ColumnProcessor()); + if (num > 0) { mesType = "1"; } return mesType; From 306a703fe00de97206de516cf796e9d694afb330 Mon Sep 17 00:00:00 2001 From: mzr Date: Wed, 17 Sep 2025 09:03:50 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=A0=E9=99=A4-=E6=8E=A8=E8=89=BE?= =?UTF-8?q?=E6=99=AEMES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bs/mmpac/pmo/pac0002/bp/PMODeleteBP.java | 2 + .../bp/rule/AfterDelSyncEpicMesRule.java | 85 +++++-------------- 2 files changed, 21 insertions(+), 66 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMODeleteBP.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMODeleteBP.java index 6dfe476..44a5472 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMODeleteBP.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/PMODeleteBP.java @@ -5,6 +5,7 @@ package nc.bs.mmpac.pmo.pac0002.bp; +import nc.bs.mmpac.pmo.pac0002.bp.rule.AfterDelSyncEpicMesRule; import nc.bs.mmpac.pmo.pac0002.bp.rule.WithUpdatePickmRule; import nc.bs.mmpac.pmo.pac0002.pluginpoint.PMOPluginPoint; import nc.bs.mmpac.pmo.pac0002.rule.PMOATPUpdateWithParaRule; @@ -98,5 +99,6 @@ public class PMODeleteBP { IRule billcoderule = new ReturnBillCodeRule("55A2", "vbillcode", "pk_group", "pk_org"); processer.addAfterRule(billcoderule); processer.addAfterRule(new WithUpdatePickmRule()); + processer.addAfterRule(new AfterDelSyncEpicMesRule()); } } 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 ca370aa..105459e 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 @@ -5,14 +5,11 @@ 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.impl.pubapp.pattern.rule.IRule; 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; @@ -21,21 +18,17 @@ 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 * * @author mzr * @date 2025/9/16 */ -public class AfterDelSyncEpicMesRule implements ICompareRule { +public class AfterDelSyncEpicMesRule implements IRule { private static final String LOG_INFO_NAME = "dldzlog"; @@ -44,12 +37,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 - public void process(PMOAggVO[] pmoAggVOS, PMOAggVO[] originVOs) { + public void process(PMOAggVO[] pmoAggVOS) { if (MMArrayUtil.isEmpty(pmoAggVOS)) { return; } @@ -70,23 +59,19 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { configParams.put("deptRange", deptRange); List filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS); if (filteredOrders.isEmpty()) { - logDl.error("没有符合条件的生产订单需要同步到艾普MES系统。"); + // logDl.error("没有符合条件的生产订单需要同步到艾普MES系统。"); return; } - logDl.info("开始同步生产订单到艾普MES系统,符合条件的订单数量: " + filteredOrders.size()); + // logDl.info("开始同步生产订单到艾普MES系统,符合条件的订单数量: " + filteredOrders.size()); 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); - + buildSyncData(aggVO, jsonArray); + } + if (!jsonArray.isEmpty()) { + JSONObject data = new JSONObject(); + data.put("workOrders", jsonArray); + pushData(pmoUrl, data); } } catch (Exception e) { logDl.error("删除同步生产订单到艾普MES系统失败: " + e.getMessage(), e); @@ -95,50 +80,20 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { } - /** * 组装数据-流程生产订单+备料计划 */ - private JSONObject buildSyncData(PMOAggVO aggVO) throws BusinessException { + private void buildSyncData(PMOAggVO aggVO, JSONArray orderArr) 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); + String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); // 组装数据 - JSONObject data = new JSONObject(); JSONObject orderParam = new JSONObject(); - orderParam.put("type", "D"); // 唯一标识(主键) - // orderParam.put("siteCode", deptParams.getOrDefault(deptCode, ""));// 工厂编码 - orderParam.put("companyCode",deptCode);//公司编码 - - + orderParam.put("type", "D"); // 删除标识 + orderParam.put("companyCode", orgCode);// 公司编码 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; } @@ -153,16 +108,16 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { try { // 转json字符串的时候保留null值 String jsonStr = JSON.toJSONString(param, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); - logDl.error("EpicMes-PMO-param = " + jsonStr); + logDl.error("EpicMes-PMO-del-param = " + jsonStr); String baseUrl = configParams.get("epicMesUrl"); String requestUrl = baseUrl + reqUrl; - logDl.error(" EpicMes-PMO-url = " + requestUrl); + logDl.error(" EpicMes-PMO-del-url = " + requestUrl); responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, jsonStr); - logDl.error(" EpicMes-PMO-res = " + responseString); + logDl.error(" EpicMes-PMO-del-res = " + responseString); JSONObject resultObj = JSONObject.parseObject(responseString); if (!"1".equals(resultObj.getString("flag"))) { - logDl.error("EpicMes-PMO-error,result[" + resultObj.toJSONString() + "]"); + logDl.error("EpicMes-PMO-del-error,result[" + resultObj.toJSONString() + "]"); throw new BusinessException("艾普MES返回错误信息:" + resultObj.getString("msg")); } } catch (Exception e) { @@ -172,8 +127,6 @@ public class AfterDelSyncEpicMesRule implements ICompareRule { } - - /** * 检查并筛选需要同步的单据 */ From 5ac6837ef4ab00f93777c28ebc068b2894fbb710 Mon Sep 17 00:00:00 2001 From: mzr Date: Wed, 17 Sep 2025 09:24:53 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E9=A2=86=E6=96=99-?= =?UTF-8?q?=E6=89=93=E5=8D=B0V1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mmpac/issue/action/IssuePrintAction.java | 18 +++++ .../mmpac/issue/config/action/action.xml | 74 +++++++++++++++++++ .../service/IssuePickmPrintOperator.java | 52 +++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 mmpac/src/client/nccloud/web/mmpac/issue/action/IssuePrintAction.java create mode 100644 mmpac/src/client/yyconfig/modules/mmpac/issue/config/action/action.xml create mode 100644 mmpac/src/private/nccloud/pubimpl/mmpac/issue/service/IssuePickmPrintOperator.java diff --git a/mmpac/src/client/nccloud/web/mmpac/issue/action/IssuePrintAction.java b/mmpac/src/client/nccloud/web/mmpac/issue/action/IssuePrintAction.java new file mode 100644 index 0000000..50b6830 --- /dev/null +++ b/mmpac/src/client/nccloud/web/mmpac/issue/action/IssuePrintAction.java @@ -0,0 +1,18 @@ +package nccloud.web.mmpac.issue.action; + +import nccloud.web.platform.print.AbstractPrintAction; + +/** + * 生产领料-备料计划列表打印 + */ +public class IssuePrintAction extends AbstractPrintAction { + @Override + public String getPrintServiceModule() { + return "mmpac"; + } + + @Override + public String getPrintServiceName() { + return "nccloud.pubimpl.mmpac.issue.service.IssuePickmPrintOperator"; + } +} diff --git a/mmpac/src/client/yyconfig/modules/mmpac/issue/config/action/action.xml b/mmpac/src/client/yyconfig/modules/mmpac/issue/config/action/action.xml new file mode 100644 index 0000000..8c800c8 --- /dev/null +++ b/mmpac/src/client/yyconfig/modules/mmpac/issue/config/action/action.xml @@ -0,0 +1,74 @@ + + + + mmpac.issue.issuepickmquery + + nccloud.web.mmpac.issue.action.IssuePickmQueryAction + + + mmpac.issue.issuereqpickmquery + + nccloud.web.mmpac.issue.action.IssueReqPickmQueryAction + + + mmpac.issue.queryIssueObtainStockAccountNum + + nccloud.web.mmpac.issue.action.IssueObtainStockAccountNumAction + + + mmpac.issue.issueDestIssueAction + + nccloud.web.mmpac.issue.action.IssueDestIssueAction + + + mmpac.issue.issueReserveMaterialAction + + nccloud.web.mmpac.issue.action.IssueReserveMaterialAction + + + mmpac.issue.issueQueryFromPickm + + nccloud.web.mmpac.issue.action.IssueQueryFromPickmAction + + + mmpac.issue.isseQueryFromReqPickm + + nccloud.web.mmpac.issue.action.IssueQueryFromReqPickmAction + + + mmpac.issue.isseQueryFromPutPlan + + nccloud.web.mmpac.issue.action.IssueQueryFromPutPlanAction + + + mmpac.issue.isseQueryFromDispatchlist + + nccloud.web.mmpac.issue.action.IssueQueryFromDispatchlistAction + + + mmpac.issue.issueQueryFromDirectTrans + + nccloud.web.mmpac.issue.action.IssueQueryFromDirectTrans + + + mmpac.issue.issueDirectTransQuery + + nccloud.web.mmpac.issue.action.IssueDirectTransQueryAction + + + mmpac.issue.issueDirectTransAction + + nccloud.web.mmpac.issue.action.IssueDirectTransAction + + + mmpac.issue.issueQueryFromPutPlanDirectTrans + + nccloud.web.mmpac.issue.action.IssueQueryFromPutPlanDirectTrans + + + mmpac.issue.checkIsNccNative + + nccloud.web.mmpac.issue.action.IssueCheckIsNccNative + + + \ No newline at end of file diff --git a/mmpac/src/private/nccloud/pubimpl/mmpac/issue/service/IssuePickmPrintOperator.java b/mmpac/src/private/nccloud/pubimpl/mmpac/issue/service/IssuePickmPrintOperator.java new file mode 100644 index 0000000..5daf0d0 --- /dev/null +++ b/mmpac/src/private/nccloud/pubimpl/mmpac/issue/service/IssuePickmPrintOperator.java @@ -0,0 +1,52 @@ +package nccloud.pubimpl.mmpac.issue.service; + +import nc.impl.pubapp.pattern.data.bill.BillQuery; +import nc.vo.mmpac.reqpickm.consts.ReqPickmLangConsts; +import nc.vo.mmpac.reqpickm.entity.AggReqPickmVO; +import nc.vo.mmpac.reqpickm.entity.ReqPickmItemVO; +import nc.vo.mmpac.reqpickm.entity.ReqPickmSumVO; +import nc.vo.mmpub.util.BillBodySortUtils; +import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nccloud.pubitf.mmpub.pub.print.BaseMetaPrintService; + +import java.util.ArrayList; +import java.util.List; + +/** + * 生产领料-备料计划列表打印服务类 + */ +public class IssuePickmPrintOperator extends BaseMetaPrintService { + @Override + public Object[] getDatas(String[] ids) { + BillQuery query = new BillQuery(AggReqPickmVO.class); + String[] uniqueIds = this.removeDuplicates(ids); + AggReqPickmVO[] vos = query.query(uniqueIds); + if (null == vos || vos.length == 0) { + ExceptionUtils.wrappBusinessException(ReqPickmLangConsts.getEdit_msg()); + } + + BillBodySortUtils.sort(vos, "vrowno", ReqPickmItemVO.class); + BillBodySortUtils.sort(vos, "vrowno", ReqPickmSumVO.class); + return vos; + } + + private String[] removeDuplicates(String[] ids) { + if (null == ids) { + return new String[0]; + } else if (ids.length <= 1) { + return ids; + } else { + List uniqueIdList = new ArrayList(); + + for (int i = 0; i < ids.length; ++i) { + String id = ids[i]; + if (!uniqueIdList.contains(id)) { + uniqueIdList.add(id); + } + } + + String[] uniqueIds = (String[]) uniqueIdList.toArray(new String[0]); + return uniqueIds; + } + } +}