流程生产订单审批后推送艾普MES

This commit is contained in:
mzr 2025-07-07 08:53:47 +08:00
parent 293768081c
commit 984df6027e
1 changed files with 84 additions and 20 deletions

View File

@ -3,24 +3,28 @@ package nc.bs.mmpac.pmo.pac0002.bp.rule;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import nc.bs.dao.BaseDAO;
import nc.bs.logging.Log; import nc.bs.logging.Log;
import nc.bs.logging.Logger;
import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.arap.goldentax.SysParaInitQuery; 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.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOHeadVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO; import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.org.FactoryVO; import nc.vo.org.FactoryVO;
import nc.vo.pub.BusinessException; import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.scmpub.util.ArrayUtil; import nc.vo.scmpub.util.ArrayUtil;
import nccloud.commons.lang.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 流程生产订单审批后推送艾普MES * 流程生产订单审批后推送艾普MES
@ -30,12 +34,14 @@ import java.util.List;
*/ */
public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> { public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
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 Log obmlog = Log.getInstance(LOG_INFO_NAME);
private static final String MES_PMO_SYNC_URL = "/prj-v5-web/ext/api/wrokOrder"; private static final String MES_PMO_SYNC_URL = "/prj-v5-web/ext/api/wrokOrder";
private static final BaseDAO dao = new BaseDAO();
@Override @Override
public void process(PMOAggVO[] pmoAggVOS) { public void process(PMOAggVO[] pmoAggVOS) {
if (ArrayUtil.isEmpty(pmoAggVOS)) { if (ArrayUtil.isEmpty(pmoAggVOS)) {
@ -44,13 +50,12 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
try { try {
List<PMOAggVO> filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS); List<PMOAggVO> filteredOrders = checkAndFilterBillSrcOrg(pmoAggVOS);
if (filteredOrders.isEmpty()) { if (filteredOrders.isEmpty()) {
obmlog.debug("没有符合条件的生产订单需要同步到MES系统。"); obmlog.debug("没有符合条件的生产订单需要同步到艾普MES系统。");
return; return;
} }
obmlog.info("开始同步生产订单到MES系统符合条件的订单数量: " + filteredOrders.size()); obmlog.info("开始同步生产订单到艾普MES系统符合条件的订单数量: " + filteredOrders.size());
// 推送到MES系统 // 推送到艾普MES系统
JSONArray dataArr = new JSONArray();
for (PMOAggVO aggVO : filteredOrders) { for (PMOAggVO aggVO : filteredOrders) {
PMOHeadVO head = aggVO.getParentVO(); PMOHeadVO head = aggVO.getParentVO();
PMOItemVO[] bodys = aggVO.getChildrenVO(); PMOItemVO[] bodys = aggVO.getChildrenVO();
@ -59,17 +64,14 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
obmlog.warn("生产订单 " + head.getVbillcode() + " 没有行信息,跳过同步。"); obmlog.warn("生产订单 " + head.getVbillcode() + " 没有行信息,跳过同步。");
continue; continue;
} }
JSONObject object = buildSyncData(aggVO); JSONObject data = buildSyncData(aggVO);
dataArr.add(object); pushData(data);
} }
JSONObject data = new JSONObject(); obmlog.info("生产订单同步到艾普MES系统处理完成。");
data.put("workOrders", dataArr);
pushData(data);
obmlog.info("生产订单同步到MES系统处理完成。");
} catch (Exception e) { } catch (Exception e) {
obmlog.error("同步生产订单到MES系统失败: " + e.getMessage(), e); obmlog.error("同步生产订单到艾普MES系统失败: " + e.getMessage(), e);
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
} }
} }
@ -86,7 +88,7 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
String baseUrl = SysParaInitQuery.getParaString("GLOBLE00000000000000", "EPICMESURL"); String baseUrl = SysParaInitQuery.getParaString("GLOBLE00000000000000", "EPICMESURL");
String requestUrl = baseUrl + MES_PMO_SYNC_URL; String requestUrl = baseUrl + MES_PMO_SYNC_URL;
responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, param.toJSONString()); responseString = ThirdPartyPostRequestUtil.sendPostRequest(requestUrl, param.toJSONString());
obmlog.info(" MES系统原始返回: " + responseString); obmlog.info(" 艾普MES系统原始返回: " + responseString);
JSONObject jsonResponse = JSONObject.parseObject(responseString); JSONObject jsonResponse = JSONObject.parseObject(responseString);
} catch (Exception e) { } catch (Exception e) {
@ -108,18 +110,47 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
aggvoList.add(aggVo); aggvoList.add(aggVo);
} }
} }
// 按照部门区分生产订单只传消弧车间电容车间成套车间部门是配置项
return aggvoList; return aggvoList;
} }
/** /**
* 组装数据 * 组装数据
*/ */
private JSONObject buildSyncData(PMOAggVO aggVO) { private JSONObject buildSyncData(PMOAggVO aggVO) throws BusinessException {
PMOHeadVO headVo = aggVO.getParentVO();
PMOItemVO[] pmoItems = aggVO.getChildrenVO();
JSONObject data = new JSONObject(); 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<String, Object> 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, // 唯一标识主键 // "id": null, // 唯一标识主键
// "siteCode": "04", // 工厂编码 // "siteCode": "04", // 工厂编码
@ -141,7 +172,7 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
// "companyName": "泰开电力电子" // 公司名称 // "companyName": "泰开电力电子" // 公司名称
// } // }
// ], // ],
// "mrls": [ // "mrls": [ 备料计划
// { // {
// "workOrderCode": "DSF01-2501230028",// 工单号 // "workOrderCode": "DSF01-2501230028",// 工单号
// "mrlCode": "2305050447", // 物料编码 // "mrlCode": "2305050447", // 物料编码
@ -155,10 +186,43 @@ public class AfterApproveSyncEpicMesRule implements IRule<PMOAggVO> {
return data; 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<Map<String, Object>> result = (List<Map<String, Object>>) dao.executeQuery(sqlBuilder.toString(), new MapListProcessor());
for (Map<String, Object> 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 * 转换特殊字段 1/1 转换为小数 1.0
*/ */
private String transferSpecialField(String field) { private String transferSpecialField(String field) {
if (field == null || field.trim().isEmpty()) { if (field == null || field.trim().isEmpty()) {
return null; return null;