diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncEpicMesRule.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncEpicMesRule.java index 8ef38fa..7e251ce 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncEpicMesRule.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveSyncEpicMesRule.java @@ -3,24 +3,28 @@ package nc.bs.mmpac.pmo.pac0002.bp.rule; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import nc.bs.dao.BaseDAO; import nc.bs.logging.Log; -import nc.bs.logging.Logger; import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.impl.pubapp.pattern.rule.IRule; import nc.itf.arap.goldentax.SysParaInitQuery; +import nc.jdbc.framework.processor.MapListProcessor; 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.FactoryVO; import nc.vo.pub.BusinessException; import nc.vo.pubapp.pattern.exception.ExceptionUtils; +import nc.vo.pubapp.pattern.pub.SqlBuilder; import nc.vo.scmpub.util.ArrayUtil; +import nccloud.commons.lang.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 流程生产订单审批后推送艾普MES @@ -30,12 +34,14 @@ import java.util.List; */ public class AfterApproveSyncEpicMesRule implements IRule { - private static final String LOG_INFO_NAME = "OALOG"; + private static final String LOG_INFO_NAME = "DLDZLOG"; private static final Log obmlog = Log.getInstance(LOG_INFO_NAME); private static final String MES_PMO_SYNC_URL = "/prj-v5-web/ext/api/wrokOrder"; + private static final BaseDAO dao = new BaseDAO(); + @Override public void process(PMOAggVO[] pmoAggVOS) { if (ArrayUtil.isEmpty(pmoAggVOS)) { @@ -44,13 +50,12 @@ public class AfterApproveSyncEpicMesRule implements IRule { try { List filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS); if (filteredOrders.isEmpty()) { - obmlog.debug("没有符合条件的生产订单需要同步到MES系统。"); + obmlog.debug("没有符合条件的生产订单需要同步到艾普MES系统。"); return; } - obmlog.info("开始同步生产订单到MES系统,符合条件的订单数量: " + filteredOrders.size()); - // 推送到MES系统 - JSONArray dataArr = new JSONArray(); + obmlog.info("开始同步生产订单到艾普MES系统,符合条件的订单数量: " + filteredOrders.size()); + // 推送到艾普MES系统 for (PMOAggVO aggVO : filteredOrders) { PMOHeadVO head = aggVO.getParentVO(); PMOItemVO[] bodys = aggVO.getChildrenVO(); @@ -59,17 +64,14 @@ public class AfterApproveSyncEpicMesRule implements IRule { obmlog.warn("生产订单 " + head.getVbillcode() + " 没有行信息,跳过同步。"); continue; } - JSONObject object = buildSyncData(aggVO); - dataArr.add(object); + JSONObject data = buildSyncData(aggVO); + pushData(data); } - JSONObject data = new JSONObject(); - data.put("workOrders", dataArr); - pushData(data); - obmlog.info("生产订单同步到MES系统处理完成。"); + obmlog.info("生产订单同步到艾普MES系统处理完成。"); } catch (Exception e) { - obmlog.error("同步生产订单到MES系统失败: " + e.getMessage(), e); + obmlog.error("同步生产订单到艾普MES系统失败: " + e.getMessage(), e); ExceptionUtils.wrappException(e); } } @@ -86,7 +88,7 @@ public class AfterApproveSyncEpicMesRule implements IRule { String baseUrl = SysParaInitQuery.getParaString("GLOBLE00000000000000", "EPICMESURL"); String requestUrl = baseUrl + MES_PMO_SYNC_URL; responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, param.toJSONString()); - obmlog.info(" MES系统原始返回: " + responseString); + obmlog.info(" 艾普MES系统原始返回: " + responseString); JSONObject jsonResponse = JSONObject.parseObject(responseString); } catch (Exception e) { @@ -108,18 +110,47 @@ public class AfterApproveSyncEpicMesRule implements IRule { aggvoList.add(aggVo); } } + // 按照部门区分生产订单,只传消弧车间、电容车间、成套车间(部门是配置项) + return aggvoList; } /** * 组装数据 */ - private JSONObject buildSyncData(PMOAggVO aggVO) { - PMOHeadVO headVo = aggVO.getParentVO(); - PMOItemVO[] pmoItems = aggVO.getChildrenVO(); + private JSONObject buildSyncData(PMOAggVO aggVO) throws BusinessException { JSONObject data = new JSONObject(); + PMOHeadVO headVo = aggVO.getParentVO(); + // PMOItemVO[] pmoItems = aggVO.getChildrenVO(); + JSONObject orderParam = new JSONObject(); + orderParam.put("id", null); // 唯一标识(主键) + orderParam.put("siteCode", null);// 工厂编码 + orderParam.put("contractNo", null);// 合同号 + orderParam.put("workOrderCode", headVo.getVbillcode());// 工单号 + orderParam.put("qty", null); // 计划数量,字符串类型 + orderParam.put("produCode", null); // 产品编码 + orderParam.put("produName", null); // 产品名称 + orderParam.put("bomCode", null); // BOM 编码 + orderParam.put("planBeginDate", null); // 计划开始时间(毫秒级时间戳) + orderParam.put("planEndDate", null); // 计划完成时间(毫秒级时间戳) + orderParam.put("endDate", null); // 试验结束时间(毫秒级时间戳) + orderParam.put("type", "I"); // 类型:I:新增 U:修改 D:删除 + orderParam.put("auditCode", "Y"); // 审核状态(Y:已审核 N:未审核) + orderParam.put("contractName", null); // 合同名称 + orderParam.put("transferPlanTime", null); // 生产转检计划时间(格式为YYYY-MM-DD) + orderParam.put("receiptScheduledTime", null); // 完工入库时间(格式为YYYY-MM-DD) + String pkOrg = headVo.getPk_org(); + String selectFields = FactoryVO.CODE + "," + FactoryVO.NAME; + Map orgMap = MyHelper.transferFields(FactoryVO.getDefaultTableName(), selectFields, FactoryVO.PK_FACTORY, pkOrg); + orderParam.put("companyCode", orgMap.get(FactoryVO.CODE)); // 公司编码 + orderParam.put("companyName", orgMap.get(FactoryVO.NAME)); // 公司名称 + JSONArray orderArr = new JSONArray(); + orderArr.add(orderParam); + // 流程生产订单 + data.put("workOrders", orderArr); + data.put("mrls", getPickmInfo(headVo.getPrimaryKey())); // 备料计划 // { - // "workOrders": [ + // "workOrders": [// 流程生产订单 // { // "id": null, // 唯一标识(主键) // "siteCode": "04", // 工厂编码 @@ -141,7 +172,7 @@ public class AfterApproveSyncEpicMesRule implements IRule { // "companyName": "泰开电力电子" // 公司名称 // } // ], - // "mrls": [ + // "mrls": [ 备料计划 // { // "workOrderCode": "DSF01-2501230028",// 工单号 // "mrlCode": "2305050447", // 物料编码 @@ -155,10 +186,43 @@ public class AfterApproveSyncEpicMesRule implements IRule { return data; } + /** + * 备料计划数据封装 + * + * @param sourceId 流程生产订单唯一标识 + * @return + * @throws BusinessException + */ + private JSONArray getPickmInfo(String sourceId) throws BusinessException { + JSONArray pickmArr = new JSONArray(); + if (StringUtils.isEmpty(sourceId) || "~".equals(sourceId)) { + return pickmArr; + } + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append(" select c.code mrlCode, c.name mrlName, d.name unit, b.nplanoutastnum qty"); + sqlBuilder.append(" from mm_pickm_b b"); + sqlBuilder.append(" left join mm_pickm a on b.cpickmid = a.cpickmid"); + sqlBuilder.append(" left join bd_material c on b.cbmaterialid = c.pk_material"); + sqlBuilder.append(" left join bd_measdoc d on b.cbastunitid = d.pk_measdoc"); + sqlBuilder.append(" where b.dr = 0"); + sqlBuilder.append(" and "); + sqlBuilder.append("a.csourcebillid", sourceId); + List> result = (List>) dao.executeQuery(sqlBuilder.toString(), new MapListProcessor()); + for (Map objectMap : result) { + JSONObject bodyJson = new JSONObject(); + bodyJson.put("mrlCode", objectMap.get("mrlCode"));// 物料编码 + bodyJson.put("mrlName", objectMap.get("mrlName"));// 物料名称 + bodyJson.put("qty", objectMap.get("qty"));// 数量 + bodyJson.put("unit", objectMap.get("unit"));// 单位 + pickmArr.add(bodyJson); + } + return pickmArr; + + } + /** * 转换特殊字段 如 1/1 转换为小数 1.0 */ - private String transferSpecialField(String field) { if (field == null || field.trim().isEmpty()) { return null;