重构销售订单、盘点单、销售出库(含有前置收货单)、采购入库(含有前置收货单)的逻辑

This commit is contained in:
张明 2025-05-21 16:51:37 +08:00
parent 994b14b211
commit 2118f0e3b7
7 changed files with 133 additions and 104 deletions

View File

@ -50,7 +50,7 @@ public class SignBP implements ISignBP<PurchaseInVO>, ISignRuleProvider<Purchase
processor.addAfterRule(new MobAfterPurchaseInSign()); processor.addAfterRule(new MobAfterPurchaseInSign());
processor.addAfterRule(new SignM45AndRewriteCTPayPlan()); processor.addAfterRule(new SignM45AndRewriteCTPayPlan());
processor.addAfterRule(new SignInsertFeeDetailRule()); processor.addAfterRule(new SignInsertFeeDetailRule());
// 签字后推送至MES系统 // 签字后推送至MES系统 推送销售出库单之前 先推送前置通知单
processor.addAfterRule(new PurchaseReceiptRuleMES()); processor.addAfterRule(new PurchaseReceiptRuleMES());
processor.addAfterRule(new AfterSigningSynchronizeRuleMES()); processor.addAfterRule(new AfterSigningSynchronizeRuleMES());
} }

View File

@ -7,7 +7,6 @@ import nc.bs.logging.Log;
import nc.impl.pubapp.pattern.rule.IRule; import nc.impl.pubapp.pattern.rule.IRule;
import nc.jdbc.framework.processor.ColumnProcessor; import nc.jdbc.framework.processor.ColumnProcessor;
import nc.vo.bd.material.MaterialVO; import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.material.measdoc.MeasdocVO;
import nc.vo.bd.psn.PsndocVO; import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.rack.RackVO; import nc.vo.bd.rack.RackVO;
import nc.vo.bd.stordoc.StordocVO; import nc.vo.bd.stordoc.StordocVO;
@ -15,7 +14,6 @@ import nc.vo.bd.supplier.SupplierVO;
import nc.vo.ic.m45.entity.PurchaseInBodyVO; import nc.vo.ic.m45.entity.PurchaseInBodyVO;
import nc.vo.ic.m45.entity.PurchaseInHeadVO; import nc.vo.ic.m45.entity.PurchaseInHeadVO;
import nc.vo.ic.m45.entity.PurchaseInVO; import nc.vo.ic.m45.entity.PurchaseInVO;
import nc.vo.org.DeptVO;
import nc.vo.pub.BusinessException; import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate; import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDouble; import nc.vo.pub.lang.UFDouble;
@ -46,18 +44,20 @@ public class AfterSigningSynchronizeRuleMES implements IRule<PurchaseInVO> {
if (purchaseInVOs == null || purchaseInVOs.length == 0) { if (purchaseInVOs == null || purchaseInVOs.length == 0) {
return; return;
} }
// 检查并筛选组织为电缆的采购入库单
List<PurchaseInVO> filteredPurchaseInVOS = checkAndFilterBills(purchaseInVOs);
if (filteredPurchaseInVOS.isEmpty()) {
return;
}
// 初始化HTTP请求工具类 // 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
for (PurchaseInVO purchaseInVO : purchaseInVOs) { for (PurchaseInVO purchaseInVO : filteredPurchaseInVOS) {
PurchaseInHeadVO hvo = (PurchaseInHeadVO) purchaseInVO.getParentVO(); PurchaseInHeadVO hvo = (PurchaseInHeadVO) purchaseInVO.getParentVO();
PurchaseInBodyVO[] bvos = (PurchaseInBodyVO[]) purchaseInVO.getChildrenVO(); PurchaseInBodyVO[] bvos = (PurchaseInBodyVO[]) purchaseInVO.getChildrenVO();
// 构建请求参数 // 构建请求参数
JSONObject syncData = buildSyncData(hvo, bvos); JSONObject syncData = buildSyncData(hvo, bvos);
if (syncData != null) {
httpPostOtherSys.sendToExternalSystem(ADD_URL, syncData); httpPostOtherSys.sendToExternalSystem(ADD_URL, syncData);
} }
}
} catch (Exception e) { } catch (Exception e) {
obmlog.error("采购入库同步MES-处理异常:" + e.getMessage(), e); obmlog.error("采购入库同步MES-处理异常:" + e.getMessage(), e);
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
@ -69,19 +69,12 @@ public class AfterSigningSynchronizeRuleMES implements IRule<PurchaseInVO> {
*/ */
private JSONObject buildSyncData(PurchaseInHeadVO hvo, PurchaseInBodyVO[] bvos) throws BusinessException { private JSONObject buildSyncData(PurchaseInHeadVO hvo, PurchaseInBodyVO[] bvos) throws BusinessException {
obmlog.debug("采购入库同步MES-开始构建数据: " + hvo.getVbillcode()); obmlog.debug("采购入库同步MES-开始构建数据: " + hvo.getVbillcode());
// if (!hvo.getPk_org().equals("0001A110000000000677")) {
// obmlog.debug("AfterSigningSynchronizeRule-跳过处理销售出库单,因为此单据组织非电缆: " + hvo.getVbillcode());
// return null;
// }
JSONObject requestData = new JSONObject(); JSONObject requestData = new JSONObject();
// 设置操作类型 // 设置操作类型
requestData.put("operation_type", "I"); // 签字为新增操作 requestData.put("operation_type", "I"); // 签字为新增操作
// 构建data数组 // 构建data数组
List<JSONObject> dataList = new ArrayList<>(); List<JSONObject> dataList = new ArrayList<>();
JSONObject dataObj = new JSONObject(); JSONObject dataObj = new JSONObject();
// 设置入库单基本信息 // 设置入库单基本信息
UFDate billDate = hvo.getDbilldate(); UFDate billDate = hvo.getDbilldate();
dataObj.put("orderDate", billDate != null ? billDate.toString().substring(0, 10) : ""); // 入库日期 - 格式yyyy-MM-dd dataObj.put("orderDate", billDate != null ? billDate.toString().substring(0, 10) : ""); // 入库日期 - 格式yyyy-MM-dd
@ -89,7 +82,6 @@ public class AfterSigningSynchronizeRuleMES implements IRule<PurchaseInVO> {
// 仓库编码 - 使用正确的仓库字段(cwarehouseid) // 仓库编码 - 使用正确的仓库字段(cwarehouseid)
dataObj.put("warehouseId", transferCodeByPk(StordocVO.getDefaultTableName(), dataObj.put("warehouseId", transferCodeByPk(StordocVO.getDefaultTableName(),
StordocVO.CODE, StordocVO.PK_STORDOC, hvo.getCwarehouseid())); // 仓库编码 StordocVO.CODE, StordocVO.PK_STORDOC, hvo.getCwarehouseid())); // 仓库编码
// 部门ID - 采购部门最新版本(cdptid)而非cdptvidcdptvid是部门版本信息 // 部门ID - 采购部门最新版本(cdptid)而非cdptvidcdptvid是部门版本信息
dataObj.put("departmentId", transferCodeByPk(DeptVersionVO.getDefaultTableName(), dataObj.put("departmentId", transferCodeByPk(DeptVersionVO.getDefaultTableName(),
DeptVersionVO.CODE, DeptVersionVO.PK_VID, hvo.getCdptvid())); // 部门编码 DeptVersionVO.CODE, DeptVersionVO.PK_VID, hvo.getCdptvid())); // 部门编码
@ -141,14 +133,28 @@ public class AfterSigningSynchronizeRuleMES implements IRule<PurchaseInVO> {
detailsList.add(detailMap); detailsList.add(detailMap);
} }
} }
dataObj.put("details", detailsList); dataObj.put("details", detailsList);
dataList.add(dataObj); dataList.add(dataObj);
requestData.put("data", dataList); requestData.put("data", dataList);
return requestData; return requestData;
} }
/**
* 检查并筛选需要同步的单据
*/
private List<PurchaseInVO> checkAndFilterBills(PurchaseInVO[] purchaseInVOS) throws BusinessException {
List<PurchaseInVO> result = new ArrayList<>();
for (PurchaseInVO vo : purchaseInVOS) {
// 检查组织是否为电缆组织
if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) {
result.add(vo);
}
}
return result;
}
/** /**
* 根据主键查询对应的编码 * 根据主键查询对应的编码
*/ */

View File

@ -42,24 +42,20 @@ public class PurchaseReceiptRuleMES implements IRule<PurchaseInVO> {
@Override @Override
public void process(PurchaseInVO[] purchaseInVOS) { public void process(PurchaseInVO[] purchaseInVOS) {
try { try {
// 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
if (purchaseInVOS == null || purchaseInVOS.length == 0) { if (purchaseInVOS == null || purchaseInVOS.length == 0) {
return; return;
} }
// 检查并筛选组织为电缆的采购收货单
// 쇱꿴깻<EFBFBD>朞꽃뭔澗새데
List<PurchaseInVO> filteredPurchaseInVOS = checkAndFilterBills(purchaseInVOS); List<PurchaseInVO> filteredPurchaseInVOS = checkAndFilterBills(purchaseInVOS);
if (filteredPurchaseInVOS.isEmpty()) { if (filteredPurchaseInVOS.isEmpty()) {
return; return;
} }
// 놓迦뺏HTTP헝헹묏야잚
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
// 处理每个采购收货单 // 处理每个采购收货单
for (PurchaseInVO purchaseInVO : filteredPurchaseInVOS) { for (PurchaseInVO purchaseInVO : filteredPurchaseInVOS) {
PurchaseInHeadVO head = purchaseInVO.getHead(); PurchaseInHeadVO head = purchaseInVO.getHead();
PurchaseInBodyVO[] bodys = purchaseInVO.getBodys(); PurchaseInBodyVO[] bodys = purchaseInVO.getBodys();
// 每次新增采购收货单前先删除第三方系统中已有的数据再进行新增 // 每次新增采购收货单前先删除第三方系统中已有的数据再进行新增
String orderNo = head.getVbillcode(); String orderNo = head.getVbillcode();
boolean deleteSuccess = deletePurchaseReceipt(orderNo); boolean deleteSuccess = deletePurchaseReceipt(orderNo);
@ -128,18 +124,15 @@ public class PurchaseReceiptRuleMES implements IRule<PurchaseInVO> {
*/ */
private List<PurchaseInVO> checkAndFilterBills(PurchaseInVO[] purchaseInVOS) throws BusinessException { private List<PurchaseInVO> checkAndFilterBills(PurchaseInVO[] purchaseInVOS) throws BusinessException {
List<PurchaseInVO> result = new ArrayList<>(); List<PurchaseInVO> result = new ArrayList<>();
for (PurchaseInVO vo : purchaseInVOS) { for (PurchaseInVO vo : purchaseInVOS) {
// 检查组织是否为电缆组织 // 检查组织是否为电缆组织
if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) { if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) {
result.add(vo); result.add(vo);
} }
} }
return result; return result;
} }
/** /**
* 构建符合MES系统接口规范的请求数据 * 构建符合MES系统接口规范的请求数据
*/ */

View File

@ -15,6 +15,7 @@ import nc.vo.bd.material.measdoc.MeasdocVO;
import nc.vo.bd.psn.PsndocVO; import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.rack.RackVO; import nc.vo.bd.rack.RackVO;
import nc.vo.bd.supplier.SupplierVO; import nc.vo.bd.supplier.SupplierVO;
import nc.vo.ic.m45.entity.PurchaseInVO;
import nc.vo.ic.m4c.entity.SaleOutBodyVO; import nc.vo.ic.m4c.entity.SaleOutBodyVO;
import nc.vo.ic.m4c.entity.SaleOutHeadVO; import nc.vo.ic.m4c.entity.SaleOutHeadVO;
import nc.vo.ic.m4c.entity.SaleOutVO; import nc.vo.ic.m4c.entity.SaleOutVO;
@ -29,6 +30,8 @@ import net.sf.mpxj.primavera.schema.CurrencyType;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/** /**
@ -46,22 +49,24 @@ public class AfterSigningSynchronizeRuleMES implements IRule<SaleOutVO> {
@Override @Override
public void process(SaleOutVO[] saleOutVOS) { public void process(SaleOutVO[] saleOutVOS) {
try { try {
// 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
if (saleOutVOS == null || saleOutVOS.length == 0) { if (saleOutVOS == null || saleOutVOS.length == 0) {
return; return;
} }
// 初始化HTTP请求工具类 // 检查并筛选组织为电缆的销售出库单
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); List<SaleOutVO> filteredSaleOutVOS = checkAndFilterBills(saleOutVOS);
if (filteredSaleOutVOS.isEmpty()) {
return;
}
// 处理每个销售出库单 // 处理每个销售出库单
for (SaleOutVO saleOutVO : saleOutVOS) { for (SaleOutVO saleOutVO : filteredSaleOutVOS) {
SaleOutHeadVO hvo = (SaleOutHeadVO) saleOutVO.getParentVO(); SaleOutHeadVO hvo = (SaleOutHeadVO) saleOutVO.getParentVO();
SaleOutBodyVO[] bvos = (SaleOutBodyVO[]) saleOutVO.getChildrenVO(); SaleOutBodyVO[] bvos = (SaleOutBodyVO[]) saleOutVO.getChildrenVO();
// 构建要发送的数据 // 构建要发送的数据
JSONObject syncData = buildSyncData(hvo, bvos); JSONObject syncData = buildSyncData(hvo, bvos);
if (syncData != null) {
// 发送数据到金思维系统使用HttpPostOtherSysImpl处理网络请求
httpPostOtherSys.sendToExternalSystem(SALE_OUT_URL, syncData); httpPostOtherSys.sendToExternalSystem(SALE_OUT_URL, syncData);
} }
}
} catch (Exception e) { } catch (Exception e) {
obmlog.error("AfterSigningSynchronizeRule-处理异常:" + e.getMessage(), e); obmlog.error("AfterSigningSynchronizeRule-处理异常:" + e.getMessage(), e);
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
@ -74,10 +79,6 @@ public class AfterSigningSynchronizeRuleMES implements IRule<SaleOutVO> {
*/ */
private JSONObject buildSyncData(SaleOutHeadVO hvo, SaleOutBodyVO[] bvos) throws BusinessException { private JSONObject buildSyncData(SaleOutHeadVO hvo, SaleOutBodyVO[] bvos) throws BusinessException {
obmlog.debug("AfterSigningSynchronizeRule-开始处理销售出库单: " + hvo.getVbillcode()); obmlog.debug("AfterSigningSynchronizeRule-开始处理销售出库单: " + hvo.getVbillcode());
// if (!hvo.getPk_org().equals("0001A110000000000677")) {
// obmlog.debug("AfterSigningSynchronizeRule-跳过处理销售出库单,因为此单据组织非电缆: " + hvo.getVbillcode());
// return null;
// }
JSONObject requestData = new JSONObject(); JSONObject requestData = new JSONObject();
JSONObject dataObj = new JSONObject(); JSONObject dataObj = new JSONObject();
@ -177,6 +178,21 @@ public class AfterSigningSynchronizeRuleMES implements IRule<SaleOutVO> {
return requestData; return requestData;
} }
/**
* 检查并筛选需要同步的单据
*/
private List<SaleOutVO> checkAndFilterBills(SaleOutVO[] saleOutVOS) throws BusinessException {
List<SaleOutVO> result = new ArrayList<>();
for (SaleOutVO vo : saleOutVOS) {
// 检查组织是否为电缆组织
if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) {
result.add(vo);
}
}
return result;
}
private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException {
if (nc.vo.cmp.util.StringUtils.isEmpty(pk)) { if (nc.vo.cmp.util.StringUtils.isEmpty(pk)) {
return null; return null;

View File

@ -13,6 +13,7 @@ import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.material.measdoc.MeasdocVO; import nc.vo.bd.material.measdoc.MeasdocVO;
import nc.vo.bd.psn.PsndocVO; import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.stordoc.StordocVO; import nc.vo.bd.stordoc.StordocVO;
import nc.vo.ic.m45.entity.PurchaseInVO;
import nc.vo.ic.m4c.entity.SaleOutBodyVO; import nc.vo.ic.m4c.entity.SaleOutBodyVO;
import nc.vo.ic.m4c.entity.SaleOutHeadVO; import nc.vo.ic.m4c.entity.SaleOutHeadVO;
import nc.vo.ic.m4c.entity.SaleOutVO; import nc.vo.ic.m4c.entity.SaleOutVO;
@ -24,6 +25,8 @@ import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
/** /**
@ -40,21 +43,22 @@ public class SalesDeliveryOrderRuleMES implements IRule<SaleOutVO> {
@Override @Override
public void process(SaleOutVO[] saleOutVOS) { public void process(SaleOutVO[] saleOutVOS) {
try { try {
// 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
if (saleOutVOS == null || saleOutVOS.length == 0) { if (saleOutVOS == null || saleOutVOS.length == 0) {
return; return;
} }
// 检查并筛选组织为电缆的采购收货单
// 놓迦뺏HTTP헝헹묏야잚 List<SaleOutVO> filteredSaleOutVOS = checkAndFilterBills(saleOutVOS);
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); if (filteredSaleOutVOS.isEmpty()) {
return;
}
// 处理每个销售交货单 // 处理每个销售交货单
for (SaleOutVO saleOutVO : saleOutVOS) { for (SaleOutVO saleOutVO : filteredSaleOutVOS) {
SaleOutHeadVO hvo = (SaleOutHeadVO) saleOutVO.getParentVO(); SaleOutHeadVO hvo = (SaleOutHeadVO) saleOutVO.getParentVO();
SaleOutBodyVO[] bvos = (SaleOutBodyVO[]) saleOutVO.getChildrenVO(); SaleOutBodyVO[] bvos = (SaleOutBodyVO[]) saleOutVO.getChildrenVO();
// 构建要发送的数据 // 构建要发送的数据
JSONObject syncData = buildSyncData(hvo, bvos); JSONObject syncData = buildSyncData(hvo, bvos);
if (syncData != null) {
// 每次新增销售交货单之前 先删除 然后再新增 // 每次新增销售交货单之前 先删除 然后再新增
String orderNo = hvo.getVbillcode(); String orderNo = hvo.getVbillcode();
boolean flag = deleteSalesDeliveryOrder(orderNo); boolean flag = deleteSalesDeliveryOrder(orderNo);
@ -64,7 +68,6 @@ public class SalesDeliveryOrderRuleMES implements IRule<SaleOutVO> {
httpPostOtherSys.sendToExternalSystem(MES_API_URL, syncData); httpPostOtherSys.sendToExternalSystem(MES_API_URL, syncData);
} }
} }
}
} catch (Exception e) { } catch (Exception e) {
obmlog.error("SalesDeliveryOrderRuleMES-处理异常:" + e.getMessage(), e); obmlog.error("SalesDeliveryOrderRuleMES-处理异常:" + e.getMessage(), e);
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
@ -230,6 +233,20 @@ public class SalesDeliveryOrderRuleMES implements IRule<SaleOutVO> {
} }
} }
/**
* 检查并筛选需要同步的单据
*/
private List<SaleOutVO> checkAndFilterBills(SaleOutVO[] saleOutVOS) throws BusinessException {
List<SaleOutVO> result = new ArrayList<>();
for (SaleOutVO vo : saleOutVOS) {
// 检查组织是否为电缆组织
if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) {
result.add(vo);
}
}
return result;
}
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;

View File

@ -13,6 +13,7 @@ import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.rack.RackVO; import nc.vo.bd.rack.RackVO;
import nc.vo.bd.stordoc.StordocVO; import nc.vo.bd.stordoc.StordocVO;
import nc.vo.bd.supplier.SupplierVO; import nc.vo.bd.supplier.SupplierVO;
import nc.vo.ic.m4c.entity.SaleOutVO;
import nc.vo.ic.m4r.entity.InvCountBillVO; import nc.vo.ic.m4r.entity.InvCountBillVO;
import nc.vo.ic.m4r.entity.InvCountBodyVO; import nc.vo.ic.m4r.entity.InvCountBodyVO;
import nc.vo.ic.m4r.entity.InvCountHeaderVO; import nc.vo.ic.m4r.entity.InvCountHeaderVO;
@ -25,6 +26,9 @@ import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.vorg.DeptVersionVO; import nc.vo.vorg.DeptVersionVO;
import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys; import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys;
import java.util.ArrayList;
import java.util.List;
/** /**
* 盘点审批后传MES * 盘点审批后传MES
@ -41,25 +45,24 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<InvCountBillVO> {
@Override @Override
public void process(InvCountBillVO[] invCountBillVOs) { public void process(InvCountBillVO[] invCountBillVOs) {
try { try {
// 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
if (invCountBillVOs == null || invCountBillVOs.length == 0) { if (invCountBillVOs == null || invCountBillVOs.length == 0) {
return; return;
} }
// 筛选需要处理的单据
// 初始化HTTP请求工具类 List<InvCountBillVO> filteredBillVOS = checkAndFilterBills(invCountBillVOs);
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); if (filteredBillVOS.isEmpty()) {
return;
}
// 处理每个盘点单 // 处理每个盘点单
for (InvCountBillVO invCountBillVO : invCountBillVOs) { for (InvCountBillVO invCountBillVO : filteredBillVOS) {
InvCountHeaderVO hvo = invCountBillVO.getParentVO(); InvCountHeaderVO hvo = invCountBillVO.getParentVO();
InvCountBodyVO[] bvos = invCountBillVO.getChildrenVO(); InvCountBodyVO[] bvos = invCountBillVO.getChildrenVO();
// 构建要发送的数据 // 构建要发送的数据
JSONObject syncData = buildSyncData(hvo, bvos); JSONObject syncData = buildSyncData(hvo, bvos);
if (syncData != null) {
// 发送数据到金思维系统使用HttpPostOtherSysImpl处理网络请求 // 发送数据到金思维系统使用HttpPostOtherSysImpl处理网络请求
httpPostOtherSys.sendToExternalSystem(INV_COUNT_URL, syncData); httpPostOtherSys.sendToExternalSystem(INV_COUNT_URL, syncData);
}
} }
} catch (Exception e) { } catch (Exception e) {
obmlog.error("AfterApprovingSynchronizeRule-处理异常:" + e.getMessage(), e); obmlog.error("AfterApprovingSynchronizeRule-处理异常:" + e.getMessage(), e);
@ -67,34 +70,39 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<InvCountBillVO> {
} }
} }
/**
* 检查并筛选需要同步的单据
*/
private List<InvCountBillVO> checkAndFilterBills(InvCountBillVO[] invCountBillVOS) throws BusinessException {
List<InvCountBillVO> result = new ArrayList<>();
for (InvCountBillVO vo : invCountBillVOS) {
// 检查组织是否为电缆组织
if (vo.getHead() != null && "0001A110000000000677".equals(vo.getHead().getPk_org())) {
result.add(vo);
}
}
return result;
}
/** /**
* 构建符合金思维系统接口规范的请求数据 * 构建符合金思维系统接口规范的请求数据
* 按照接口文档要求构建JSON结构 * 按照接口文档要求构建JSON结构
*/ */
private JSONObject buildSyncData(InvCountHeaderVO hvo, InvCountBodyVO[] bvos) throws BusinessException { private JSONObject buildSyncData(InvCountHeaderVO hvo, InvCountBodyVO[] bvos) throws BusinessException {
obmlog.debug("AfterApprovingSynchronizeRule-开始处理盘点单: " + hvo.getVbillcode()); obmlog.debug("AfterApprovingSynchronizeRule-开始处理盘点单: " + hvo.getVbillcode());
if (!hvo.getPk_org().equals("0001A110000000000677")) {
obmlog.debug("AfterApprovingSynchronizeRule-跳过处理销售出库单,因为此单据组织非电缆: " + hvo.getVbillcode());
return null;
}
// 按照新规范构建请求数据 // 按照新规范构建请求数据
JSONObject requestBody = new JSONObject(); JSONObject requestBody = new JSONObject();
JSONObject requestData = new JSONObject(); JSONObject requestData = new JSONObject();
// 盘点主信息 盘点单号 为空时自动生成 // 盘点主信息 盘点单号 为空时自动生成
requestData.put("PDDH", null); requestData.put("PDDH", null);
// 获取仓库编码 // 获取仓库编码
String warehouseCode = transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.CODE, StordocVO.PK_STORDOC, hvo.getCwarehouseid()); String warehouseCode = transferCodeByPk(StordocVO.getDefaultTableName(), StordocVO.CODE, StordocVO.PK_STORDOC, hvo.getCwarehouseid());
requestData.put("CKID", warehouseCode); requestData.put("CKID", warehouseCode);
// 盘点部门编码 // 盘点部门编码
String deptCode = transferCodeByPk(DeptVersionVO.getDefaultTableName(), DeptVersionVO.CODE, DeptVersionVO.PK_VID, hvo.getCdptvid()); String deptCode = transferCodeByPk(DeptVersionVO.getDefaultTableName(), DeptVersionVO.CODE, DeptVersionVO.PK_VID, hvo.getCdptvid());
requestData.put("BMID", deptCode); requestData.put("BMID", deptCode);
// 盘点人 // 盘点人
requestData.put("PDR", getStringValue(hvo.getCountoperator())); requestData.put("PDR", getStringValue(hvo.getCountoperator()));
// 日期处理 - 盘点日期 // 日期处理 - 盘点日期
UFDate dcountdate = hvo.getDcountdate(); UFDate dcountdate = hvo.getDcountdate();
if (dcountdate != null) { if (dcountdate != null) {
@ -104,7 +112,6 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<InvCountBillVO> {
} }
// 备注 // 备注
requestData.put("BZ", getStringValue(hvo.getVnote())); requestData.put("BZ", getStringValue(hvo.getVnote()));
// 构建明细数组 // 构建明细数组
JSONArray details = new JSONArray(); JSONArray details = new JSONArray();
if (bvos != null) { if (bvos != null) {
@ -154,7 +161,6 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<InvCountBillVO> {
detail.put("KHID", transferCodeByPk(CustomerVO.getDefaultTableName(), CustomerVO.CODE, CustomerVO.PK_CUSTOMER, bvo.getCasscustid())); detail.put("KHID", transferCodeByPk(CustomerVO.getDefaultTableName(), CustomerVO.CODE, CustomerVO.PK_CUSTOMER, bvo.getCasscustid()));
// 供应商编码 // 供应商编码
detail.put("GYSID", transferCodeByPk(SupplierVO.getDefaultTableName(), SupplierVO.CODE, SupplierVO.PK_SUPPLIER, bvo.getCvendorid())); detail.put("GYSID", transferCodeByPk(SupplierVO.getDefaultTableName(), SupplierVO.CODE, SupplierVO.PK_SUPPLIER, bvo.getCvendorid()));
details.add(detail); details.add(detail);
} }
} }

View File

@ -14,6 +14,7 @@ import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.material.measdoc.MeasdocVO; import nc.vo.bd.material.measdoc.MeasdocVO;
import nc.vo.bd.psn.PsndocVO; import nc.vo.bd.psn.PsndocVO;
import nc.vo.cmp.util.StringUtils; import nc.vo.cmp.util.StringUtils;
import nc.vo.ic.m4c.entity.SaleOutVO;
import nc.vo.org.DeptVO; import nc.vo.org.DeptVO;
import nc.vo.pub.BusinessException; import nc.vo.pub.BusinessException;
import nc.vo.pub.billtype.BilltypeVO; import nc.vo.pub.billtype.BilltypeVO;
@ -30,7 +31,9 @@ import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 销售订单审批后推送MES金思维系统 * 销售订单审批后推送MES金思维系统
@ -47,24 +50,22 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
@Override @Override
public void process(SaleOrderVO[] saleOrderVOs) { public void process(SaleOrderVO[] saleOrderVOs) {
try { try {
// 初始化HTTP请求工具类
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class);
if (saleOrderVOs == null || saleOrderVOs.length == 0) { if (saleOrderVOs == null || saleOrderVOs.length == 0) {
return; return;
} }
// 初始化HTTP请求工具类 // 筛选组织为电缆的销售订单
IHttpPostOtherSys httpPostOtherSys = NCLocator.getInstance().lookup(IHttpPostOtherSys.class); List<SaleOrderVO> filteredSaleOrderVOS = checkAndFilterBills(saleOrderVOs);
// 处理每个销售订单 // 处理每个销售订单
for (SaleOrderVO saleOrderVO : saleOrderVOs) { for (SaleOrderVO saleOrderVO : filteredSaleOrderVOS) {
SaleOrderHVO head = saleOrderVO.getParentVO(); SaleOrderHVO head = saleOrderVO.getParentVO();
SaleOrderBVO[] bodys = saleOrderVO.getChildrenVO(); SaleOrderBVO[] bodys = saleOrderVO.getChildrenVO();
// 构建要发送的数据 // 构建要发送的数据
JSONObject syncData = buildSyncData(head, bodys); JSONObject syncData = buildSyncData(head, bodys);
if (syncData != null) {
// 发送数据到金思维系统 // 发送数据到金思维系统
httpPostOtherSys.sendToExternalSystem(SALE_ORDER_URL, syncData); httpPostOtherSys.sendToExternalSystem(SALE_ORDER_URL, syncData);
} }
}
} catch (Exception e) { } catch (Exception e) {
obmlog.error("AfterApprovingSynchronizeRuleMES-处理异常:" + e.getMessage(), e); obmlog.error("AfterApprovingSynchronizeRuleMES-处理异常:" + e.getMessage(), e);
ExceptionUtils.wrappException(e); ExceptionUtils.wrappException(e);
@ -76,12 +77,6 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
*/ */
private JSONObject buildSyncData(SaleOrderHVO head, SaleOrderBVO[] bodys) throws BusinessException { private JSONObject buildSyncData(SaleOrderHVO head, SaleOrderBVO[] bodys) throws BusinessException {
obmlog.debug("AfterApprovingSynchronizeRuleMES-开始处理销售订单: " + head.getVbillcode()); obmlog.debug("AfterApprovingSynchronizeRuleMES-开始处理销售订单: " + head.getVbillcode());
// 检查组织单据类型等限制条件
if (!checkOrderValidForSync(head)) {
obmlog.debug("AfterApprovingSynchronizeRule-跳过处理销售订单,因为此单据组织非电缆: " + head.getVbillcode());
return null;
}
// 创建请求数据 // 创建请求数据
JSONObject requestData = new JSONObject(); JSONObject requestData = new JSONObject();
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
@ -137,7 +132,6 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
data.put("contractType", null); data.put("contractType", null);
data.put("deliveryRemarks", null); data.put("deliveryRemarks", null);
data.put("remarks", head.getVnote()); data.put("remarks", head.getVnote());
// 构建明细数据 - 只填必填字段 // 构建明细数据 - 只填必填字段
JSONArray details = new JSONArray(); JSONArray details = new JSONArray();
if (bodys != null) { if (bodys != null) {
@ -153,8 +147,6 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
data.put("deliveryDate", dsenddate != null ? dsenddate.toString().substring(0, 10) : null); data.put("deliveryDate", dsenddate != null ? dsenddate.toString().substring(0, 10) : null);
// 汇率 表体nexchangerate // 汇率 表体nexchangerate
data.put("exchangeRate", body.getVchangerate() != null ? transferSpecialField(body.getVchangerate()) : null); data.put("exchangeRate", body.getVchangerate() != null ? transferSpecialField(body.getVchangerate()) : null);
// 以下表体所需字段 // 以下表体所需字段
// 序号 // 序号
detailItem.put("sequenceNum", body.getCrowno()); detailItem.put("sequenceNum", body.getCrowno());
@ -200,27 +192,28 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
detailItem.put("customNo", null); detailItem.put("customNo", null);
detailItem.put("customSN", null); detailItem.put("customSN", null);
detailItem.put("remarks", null); detailItem.put("remarks", null);
details.add(detailItem); details.add(detailItem);
} }
} }
data.put("DETAILS", details); data.put("DETAILS", details);
requestData.put("Data", data); requestData.put("Data", data);
return requestData; return requestData;
} }
/** /**
* 检查订单是否符合同步条件 * 检查订单是否符合同步条件
*/ */
private boolean checkOrderValidForSync(SaleOrderHVO head) { private List<SaleOrderVO> checkAndFilterBills(SaleOrderVO[] saleOutVOS) {
if (!head.getPk_org().equals("0001A110000000000677")) { List<SaleOrderVO> result = new ArrayList<>();
obmlog.debug("AfterApprovingSynchronizeRule-跳过处理销售出库单,因为此单据组织非电缆: " + head.getVbillcode()); for (SaleOrderVO vo : saleOutVOS) {
return true; // 检查组织是否为电缆组织
if (vo.getParentVO().getPk_org() != null && "0001A110000000000677".equals(vo.getParentVO().getPk_org())) {
result.add(vo);
} }
return false;
} }
return result;
}
/** /**
* 转换特殊字段 1/1 转换为小数 1.0 * 转换特殊字段 1/1 转换为小数 1.0
@ -234,11 +227,9 @@ public class AfterApprovingSynchronizeRuleMES implements IRule<SaleOrderVO> {
if (split.length == 2) { if (split.length == 2) {
String numStr = split[0].trim(); String numStr = split[0].trim();
String denStr = split[1].trim(); String denStr = split[1].trim();
if (denStr.equals("0")) { if (denStr.equals("0")) {
return "0.00"; // 分母不能为零 return "0.00"; // 分母不能为零
} }
try { try {
BigDecimal numerator = new BigDecimal(numStr); BigDecimal numerator = new BigDecimal(numStr);
BigDecimal denominator = new BigDecimal(denStr); BigDecimal denominator = new BigDecimal(denStr);