refactor(purchase): 优化采购入库确认单查询性能

- 新增批量查询 O 采购入库单 和 OFS 采购订单 的方法
- 在查询基本档案中集成批量查询逻辑,减少接口调用次数
- 优化代码结构,提高可读性和维护性
This commit is contained in:
liuy 2025-03-18 16:13:43 +08:00
parent 65b91a4d93
commit 8fca910ddc
4 changed files with 173 additions and 18 deletions

View File

@ -588,10 +588,19 @@ public class ConsignmachiningCinfurmIn extends PluginBaseEntity {
*
* @author liuyang
*/
private List<PurchaseReceiptConfirmationSonDto> queryBasicArchives(List<OFSReceiptConfirmSearchResponse.Order> returnGoodHeaderDetailsDataDtoList) {
private List<PurchaseReceiptConfirmationSonDto> queryBasicArchives(List<OFSReceiptConfirmSearchResponse.Order> returnGoodHeaderDetailsDataDtoList) throws Exception {
List<PurchaseReceiptConfirmationSonDto> consignmachiningInSonDtoArrayList = new ArrayList<>();
if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) {
try {
//批量查询O采购入库单
queryBatchOfsPoOrderIn(returnGoodHeaderDetailsDataDtoList);
//批量查询O采购订单
queryBatchOfsPoOrder(returnGoodHeaderDetailsDataDtoList);
} catch (Exception e) {
logger.error("方法queryBasicArchives抛出异常", e);
}
for (int i = 0; i < returnGoodHeaderDetailsDataDtoList.size(); i++) {
OFSReceiptConfirmSearchResponse.Order ofsWareConfirmaData = returnGoodHeaderDetailsDataDtoList.get(i);
OFSReceiptConfirmSearchResponse.Header header = ofsWareConfirmaData.getHeader();
@ -608,24 +617,33 @@ public class ConsignmachiningCinfurmIn extends PluginBaseEntity {
Assert.state(!"".equals(outBizCode), "采购入库确定单对应的采购入库单号不能为空 outBizCode字段;{}", outBizCode);
outBizCode = outBizCode.replace("-confirm", "");
List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>();
QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
queryOfsSoSaleOutVo.setClientCode("LETS");
queryOfsSoSaleOutVo.setPageNo(1L);
queryOfsSoSaleOutVo.setPageSize(50L);
queryOfsSoSaleOutVo.setCode(outBizCode);
queryOfsSoSaleOutVo.setInternalInstructionType("PURCHASE");
ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search");
if (returnGoodHeaderDetailsDataDtoArrayList == null || returnGoodHeaderDetailsDataDtoArrayList.size() == 0) {
Assert.state(false, "根据采购入库单号:{}无法查询到数据", outBizCode);
}
StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoArrayList.get(0);
// List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>();
// QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
// queryOfsSoSaleOutVo.setClientCode("LETS");
// queryOfsSoSaleOutVo.setPageNo(1L);
// queryOfsSoSaleOutVo.setPageSize(50L);
// queryOfsSoSaleOutVo.setCode(outBizCode);
// queryOfsSoSaleOutVo.setInternalInstructionType("PURCHASE");
// ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search");
// if (returnGoodHeaderDetailsDataDtoArrayList == null || returnGoodHeaderDetailsDataDtoArrayList.size() == 0) {
// Assert.state(false, "根据采购入库单号:{}无法查询到数据", outBizCode);
// }
// StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoArrayList.get(0);
// StockinOrderSearchResponse.StockinOrder.StockinH header1 = stockinOrder.getHeader();
// List<StockinOrderSearchResponse.StockinOrder.StockinB> details1 = stockinOrder.getDetails();
Assert.notNull(header.getOfsStockinOrder(), "无法查询到对应的O采购入库单!");
StockinOrderSearchResponse.StockinOrder stockinOrder = header.getOfsStockinOrder();
StockinOrderSearchResponse.StockinOrder.StockinH header1 = stockinOrder.getHeader();
List<StockinOrderSearchResponse.StockinOrder.StockinB> details1 = stockinOrder.getDetails();
//2024年8月25日 09:54:31 查询OFS采购订单
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header1.getRefOrderCode());
Assert.notNull(ofsPoOrderData, "无法查询到委外订单(OFS采购入库单->OSF采购订单->OFS采购订单主键->U8C委外订单自定义项20)");
// OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header1.getRefOrderCode());
// Assert.notNull(ofsPoOrderData, "无法查询到委外订单(OFS采购入库单->OSF采购订单->OFS采购订单主键->U8C委外订单自定义项20)");
// OfsPoOrderHeader ofsPoOrderDataHeader = ofsPoOrderData.getHeader();
// List<OfsPoOrderDetails> ofsPoOrderDataDetails = ofsPoOrderData.getDetails();
Assert.notNull(header.getOfsOrderData(), "没有查询到对应的O采购订单");
OfsPoOrderData ofsPoOrderData = header.getOfsOrderData();
OfsPoOrderHeader ofsPoOrderDataHeader = ofsPoOrderData.getHeader();
List<OfsPoOrderDetails> ofsPoOrderDataDetails = ofsPoOrderData.getDetails();
@ -1400,4 +1418,86 @@ public class ConsignmachiningCinfurmIn extends PluginBaseEntity {
}
return icGeneralHResultDto;
}
/**
* 批量查询O 采购入库单
*
* @author liuyang
*/
private void queryBatchOfsPoOrderIn(List<OFSReceiptConfirmSearchResponse.Order> purchaseReceiptConfirmationSonDtoList) throws Exception {
Set<String> codeSet = null;
if (purchaseReceiptConfirmationSonDtoList != null && purchaseReceiptConfirmationSonDtoList.size() > 0) {
codeSet = purchaseReceiptConfirmationSonDtoList.stream().filter(dto -> dto.getHeader() != null).filter(dto -> dto.getHeader().getCode() != null).map(dto -> dto.getHeader().getCode().replace("-confirm", "")).collect(Collectors.toSet());
}
if (codeSet != null && codeSet.size() > 0) {
for (String element : codeSet) {
List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList = new ArrayList<>();
QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
queryOfsSoSaleOutVo.setClientCode("LETS");
queryOfsSoSaleOutVo.setPageNo(1L);
queryOfsSoSaleOutVo.setPageSize(50L);
queryOfsSoSaleOutVo.setCode(element);
queryOfsSoSaleOutVo.setInternalInstructionType("PURCHASE");
ofsStandardUtil.queryOfsReturnGoods(queryOfsSoSaleOutVo, returnGoodHeaderDetailsDataDtoArrayList, 1L, "ofs.receipt.search");
if (returnGoodHeaderDetailsDataDtoArrayList.size() == 0) {
Assert.state(false, "根据采购入库单号:{}无法查询到数据", element);
}
//O采购入库确认单关联O采购入库单
StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoArrayList.get(0);
for (OFSReceiptConfirmSearchResponse.Order order : purchaseReceiptConfirmationSonDtoList) {
OFSReceiptConfirmSearchResponse.Header header = order.getHeader();
if (header.getCode() != null) {
String replace = header.getCode().replace("-confirm", "");
if (element.equals(replace)) {
header.setOfsStockinOrder(stockinOrder);
}
}
}
}
}
}
/**
* 批量查询 OFS 采购订单
*
* @param purchaseReceiptConfirmationSonDtoList O采购入库确认单
* @author liuyang
*/
private void queryBatchOfsPoOrder(List<OFSReceiptConfirmSearchResponse.Order> purchaseReceiptConfirmationSonDtoList) throws Exception {
Set<String> refOrderCodeSet = null;
if (purchaseReceiptConfirmationSonDtoList != null && purchaseReceiptConfirmationSonDtoList.size() > 0) {
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = new ArrayList<>();
for (OFSReceiptConfirmSearchResponse.Order purchaseReceiptConfirmationSonDto : purchaseReceiptConfirmationSonDtoList) {
OFSReceiptConfirmSearchResponse.Header header = purchaseReceiptConfirmationSonDto.getHeader();
if (header != null && header.getOfsStockinOrder() != null) {
stockinOrderList.add(header.getOfsStockinOrder());
}
}
if (stockinOrderList.size() > 0) {
refOrderCodeSet = Optional.ofNullable(stockinOrderList).orElseGet(Collections::emptyList).stream().filter(Objects::nonNull).map(StockinOrderSearchResponse.StockinOrder::getHeader).filter(Objects::nonNull).map(StockinOrderSearchResponse.StockinOrder.StockinH::getRefOrderCode).filter(Objects::nonNull).collect(Collectors.toSet());
}
}
if (refOrderCodeSet != null && refOrderCodeSet.size() > 0) {
for (String refOrderCode : refOrderCodeSet) {
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(refOrderCode);
Assert.notNull(ofsPoOrderData, "无法查询到O采购订单 编码:{}", refOrderCode);
for (OFSReceiptConfirmSearchResponse.Order purchaseReceiptConfirmationSonDto : purchaseReceiptConfirmationSonDtoList) {
if (purchaseReceiptConfirmationSonDto.getHeader() != null) {
OFSReceiptConfirmSearchResponse.Header header2 = purchaseReceiptConfirmationSonDto.getHeader();
//O采购入库单
Assert.notNull(header2.getOfsStockinOrder(), "O采购入库单不能为空");
StockinOrderSearchResponse.StockinOrder ofsStockinOrder = header2.getOfsStockinOrder();
StockinOrderSearchResponse.StockinOrder.StockinH header3 = ofsStockinOrder.getHeader();
if (header3.getRefOrderCode().equals(refOrderCode)) {
header2.setOfsOrderData(ofsPoOrderData);
}
}
}
}
}
}
}

View File

@ -653,6 +653,9 @@ public class ProxyPurchaseWarehousWarehouse extends PluginBaseEntity {
if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) {
try {
//批量查询O采购订单
queryBatchOfsPoOrder(returnGoodHeaderDetailsDataDtoList);
for (int i = 0; i < returnGoodHeaderDetailsDataDtoList.size(); i++) {
OFSReceiptConfirmSearchResponse.Order order = returnGoodHeaderDetailsDataDtoList.get(i);
OFSReceiptConfirmSearchResponse.Header header = order.getHeader();
@ -664,8 +667,10 @@ public class ProxyPurchaseWarehousWarehouse extends PluginBaseEntity {
generateBusinessDate = createGenerateBusinessDate(header);
//查询OFS采购订单
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header.getRefOrderCode());
Assert.notNull(ofsPoOrderData, "根据O表头编码{}无法匹配到OFS采购订单", header.getRefOrderCode());
// OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(header.getRefOrderCode());
// Assert.notNull(ofsPoOrderData, "根据O表头编码{}无法匹配到OFS采购订单", header.getRefOrderCode());
Assert.notNull(header.getOfsOrderData(), "确认单对应的采购订单不能为空!");
OfsPoOrderData ofsPoOrderData = header.getOfsOrderData();
boolean checkResult = onlyImplementProxyOrder.onlyImplementProxyOrder(ofsPoOrderData, "DLCG,CPCG");
if (!checkResult) {
continue;
@ -1146,4 +1151,41 @@ public class ProxyPurchaseWarehousWarehouse extends PluginBaseEntity {
logger.error("插件:{},打印拉取到的单据号出错", getPluginName(), e);
}
}
/**
* 批量查询 OFS 采购订单
*
* @param returnGoodHeaderDetailsDataDtoList O采购入库确认单
* @author liuyang
*/
private void queryBatchOfsPoOrder(List<OFSReceiptConfirmSearchResponse.Order> returnGoodHeaderDetailsDataDtoList) throws Exception {
Set<String> refOrderCodeSet = new HashSet<>();
if (returnGoodHeaderDetailsDataDtoList != null && returnGoodHeaderDetailsDataDtoList.size() > 0) {
for (OFSReceiptConfirmSearchResponse.Order purchaseReceiptConfirmationSonDto : returnGoodHeaderDetailsDataDtoList) {
if (purchaseReceiptConfirmationSonDto.getHeader() != null && purchaseReceiptConfirmationSonDto.getHeader().getRefOrderCode() != null) {
OFSReceiptConfirmSearchResponse.Header header = purchaseReceiptConfirmationSonDto.getHeader();
String refOrderCode = header.getRefOrderCode();
if (refOrderCode != null && !"".equals(refOrderCode)) {
refOrderCodeSet.add(refOrderCode);
}
}
}
}
if (refOrderCodeSet != null && refOrderCodeSet.size() > 0) {
for (String refOrderCode : refOrderCodeSet) {
OfsPoOrderData ofsPoOrderData = ofsStandardUtil.queryOfsPoOrder(refOrderCode);
Assert.notNull(ofsPoOrderData, "无法查询到O采购订单 编码:{}", refOrderCode);
for (OFSReceiptConfirmSearchResponse.Order purchaseReceiptConfirmationSonDto : returnGoodHeaderDetailsDataDtoList) {
if (purchaseReceiptConfirmationSonDto.getHeader() != null) {
OFSReceiptConfirmSearchResponse.Header header2 = purchaseReceiptConfirmationSonDto.getHeader();
if (header2.getRefOrderCode() != null && header2.getRefOrderCode().equals(refOrderCode)) {
header2.setOfsOrderData(ofsPoOrderData);
}
}
}
}
}
}
}

View File

@ -26,6 +26,9 @@ public class ProxyPurchaseWarehousWarehouseTest {
@Test
public void startImplementByCode() {
proxyPurchaseWarehousWarehouse.startImplementByCode("LETS-RE2025030400002125-confirm");
// proxyPurchaseWarehousWarehouse.startImplementByCode("LETS-RE2025030400002125-confirm");
String code = "LETS-RE2025022800002706-confirm";
proxyPurchaseWarehousWarehouse.startImplementByCode(code);
}
}

View File

@ -2,6 +2,8 @@ package com.hzya.frame.ttxofs.dto.ofsReceiptConfirmSearch;
import com.hzya.frame.ttxofs.basics.ReturnMessageBasics;
import com.hzya.frame.ttxofs.dto.ofsTransferOrderSearch.OFSAdjustOrderSearchResponse;
import com.hzya.frame.ttxofs.dto.ofspoorder.OfsPoOrderData;
import com.hzya.frame.ttxofs.dto.stock.StockinOrderSearchResponse;
import lombok.Data;
import java.util.List;
@ -167,6 +169,14 @@ public class OFSReceiptConfirmSearchResponse extends ReturnMessageBasics {
* 推送状态0-未推送1-已推送2-推送失败
*/
private String pushU8Status;
/**
* O采购入库单
*/
private StockinOrderSearchResponse.StockinOrder ofsStockinOrder;
/**
* O采购订单
*/
private OfsPoOrderData ofsOrderData;
}
@Data