添加删除同步

This commit is contained in:
rbw 2025-09-16 19:19:57 +08:00
parent 974720f4fd
commit 40c7ca78ee
1 changed files with 101 additions and 0 deletions

View File

@ -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<PMOAggVO> {
private Map<String, String> configParams;
private Map<String, String> deptParams;
private static String auditCode = "Y";
private static final BaseDAO dao = new BaseDAO();
@Override
@ -64,6 +77,15 @@ public class AfterDelSyncEpicMesRule implements ICompareRule<PMOAggVO> {
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<PMOAggVO> {
}
/**
* 组装数据-流程生产订单+备料计划
*/
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<String, Object> orgMap = MyHelper.transferFields(OrgVO.getDefaultTableName(), selectFields, OrgVO.PK_ORG, pkOrg);
// 物料
String cmaterialid = pmoItem.getCmaterialid();
selectFields = MaterialVO.CODE + "," + MaterialVO.NAME;
Map<String, Object> goodsMap = MyHelper.transferFields(MaterialVO.getDefaultTableName(), selectFields, MaterialVO.PK_MATERIAL, cmaterialid);
// 项目
// String cprojectid = pmoItem.getCprojectid();
// selectFields = ProjectHeadVO.PROJECT_CODE + "," + ProjectHeadVO.PROJECT_NAME;
// Map<String, Object> 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);
}
}
/**
* 检查并筛选需要同步的单据
*/