refactor(sales): 优化售后订单查询逻辑

- 去除无效的售后订单号,避免不必要的查询
- 优化批量查询逻辑,提高查询效率
-修复可能的空指针异常,提升代码稳定性
This commit is contained in:
liuy 2024-10-26 13:36:24 +08:00
parent f7210e574d
commit 29a17362b2
2 changed files with 137 additions and 54 deletions

View File

@ -1664,26 +1664,51 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchDataList = new ArrayList<>(); List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchDataList = new ArrayList<>();
if (returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) { if (returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) {
try { try {
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoList1, 50); //完成去重
for (int i = 0; i < splitListByCount.size(); i++) { Set<String> refOrderCodeSet = new HashSet<>();
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i); // List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoList1, 50);
//50个原始一个批次进行分割 // for (int i = 0; i < splitListByCount.size(); i++) {
StringBuffer idStr = new StringBuffer(); // List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
for (int j = 0; j < stockinOrderList.size(); j++) { // //50个原始一个批次进行分割
StockinOrderSearchResponse.StockinOrder stockinOrder = stockinOrderList.get(j); // StringBuffer idStr = new StringBuffer();
// for (int j = 0; j < stockinOrderList.size(); j++) {
// StockinOrderSearchResponse.StockinOrder stockinOrder = stockinOrderList.get(j);
// StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
//// List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails();
// idStr.append(header.getRefOrderCode());
// idStr.append(",");
// }
// String idsStr = idStr.substring(0, idStr.length() - 1);
//
// QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
// queryOfsSoSaleOutVo.setCode(idsStr);
// afterSalesOrderUtil.getBatchOfsRertunOrder(queryOfsSoSaleOutVo, rerturnGoodsOrderSearchDataList, 1L);
// }
//已经和万万确认售后入库单明细行不会有合单的情况
for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) {
StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i);
StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
// List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails(); List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails();
idStr.append(header.getRefOrderCode()); String refOrderCode = header.getRefOrderCode();
idStr.append(","); if (refOrderCode != null && !"".equals(refOrderCode.trim())) {
refOrderCodeSet.add(refOrderCode.trim());
} }
String idsStr = idStr.substring(0, idStr.length() - 1); }
if (refOrderCodeSet.size() > 0) {
List<String> stringList = refOrderCodeSet.stream().collect(Collectors.toList());
List<List<String>> lists = SplitListByCountUtil.splitListByCount(stringList, 100);
for (int i = 0; i < lists.size(); i++) {
List<String> strings = lists.get(i);
String result = strings.stream().map(s -> s.trim()).collect(Collectors.joining(","));
if (result != null && result.length() > 0) {
QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo(); QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
queryOfsSoSaleOutVo.setCode(idsStr); queryOfsSoSaleOutVo.setCode(result);
afterSalesOrderUtil.getBatchOfsRertunOrder(queryOfsSoSaleOutVo, rerturnGoodsOrderSearchDataList, 1L); afterSalesOrderUtil.getBatchOfsRertunOrder(queryOfsSoSaleOutVo, rerturnGoodsOrderSearchDataList, 1L);
} }
}
}
} catch (Exception e) { } catch (Exception e) {
logger.error("批量查询售后订单", e); logger.error("批量查询关联售后订单抛出异常", e);
} }
} }
return rerturnGoodsOrderSearchDataList; return rerturnGoodsOrderSearchDataList;
@ -1699,17 +1724,32 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
private void findAfterSalesOrder(List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchDataList, List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoList1) throws Exception { private void findAfterSalesOrder(List<RerturnGoodsOrderSearchData> rerturnGoodsOrderSearchDataList, List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoList1) throws Exception {
if (rerturnGoodsOrderSearchDataList != null && rerturnGoodsOrderSearchDataList.size() > 0 && returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) { if (rerturnGoodsOrderSearchDataList != null && rerturnGoodsOrderSearchDataList.size() > 0 && returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) {
try { try {
//如果id为空则这里会报错所以把id设置为""
rerturnGoodsOrderSearchDataList.forEach(dto -> {
if (dto.getHeader() != null && dto.getHeader().getId() == null) {
dto.getHeader().setId("");
}
});
Map<String, RerturnGoodsOrderSearchData> collect = rerturnGoodsOrderSearchDataList.stream().collect(Collectors.toMap(dto -> dto.getHeader().getId(), dto -> dto));
for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) { for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) {
StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i); StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i);
StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails(); List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails();
Assert.notNull(header.getId(), "OFS售后入库单主键不能为空"); // Assert.notNull(header.getId(), "OFS售后入库单主键不能为空");
for (int j = 0; j < rerturnGoodsOrderSearchDataList.size(); j++) { // for (int j = 0; j < rerturnGoodsOrderSearchDataList.size(); j++) {
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = rerturnGoodsOrderSearchDataList.get(j); // RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = rerturnGoodsOrderSearchDataList.get(j);
RerturnGoodsOrderSearchHeader header1 = rerturnGoodsOrderSearchData.getHeader(); // RerturnGoodsOrderSearchHeader header1 = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> details1 = rerturnGoodsOrderSearchData.getDetails(); // List<RerturnGoodsOrderSearchDetails> details1 = rerturnGoodsOrderSearchData.getDetails();
if (header.getRefOrderId().equals(header1.getId())) { // if (header.getRefOrderId().equals(header1.getId())) {
// header.setRerturnGoodsOrderSearchData(rerturnGoodsOrderSearchData);
// }
// }
String id = header.getId();
if (id != null && !"".equals(id)) {
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = collect.get(id);
if (rerturnGoodsOrderSearchData != null) {
header.setRerturnGoodsOrderSearchData(rerturnGoodsOrderSearchData); header.setRerturnGoodsOrderSearchData(rerturnGoodsOrderSearchData);
} }
} }
@ -1749,7 +1789,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
} }
/** /**
* 通过售后订单匹配OFS销售订单 * 通过售后入库单对应的售后订单查询OFS销售订单
* *
* @param returnGoodHeaderDetailsDataDtoList1 OFS售后入库单集合 * @param returnGoodHeaderDetailsDataDtoList1 OFS售后入库单集合
* @author liuyang * @author liuyang
@ -1759,30 +1799,61 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
if (returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) { if (returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) {
try { try {
//每50个作为一批拆分 Set<String> refOrderCodeSet = new HashSet<>();
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoList1, 50); for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) {
for (int i = 0; i < splitListByCount.size(); i++) { StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i);
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
StringBuffer codes = new StringBuffer();
for (int j = 0; j < stockinOrderList.size(); j++) {
StockinOrderSearchResponse.StockinOrder stockinOrder = stockinOrderList.get(j);
StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails(); List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails();
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData1 = header.getRerturnGoodsOrderSearchData();//OFS售后订单 if (header.getRerturnGoodsOrderSearchData() != null) {
if (rerturnGoodsOrderSearchData1 != null) { RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = header.getRerturnGoodsOrderSearchData();//OFS售后入库单对应的售后订单
RerturnGoodsOrderSearchHeader header1 = rerturnGoodsOrderSearchData1.getHeader(); RerturnGoodsOrderSearchHeader header1 = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> details1 = rerturnGoodsOrderSearchData1.getDetails(); List<RerturnGoodsOrderSearchDetails> details1 = rerturnGoodsOrderSearchData.getDetails();
codes.append(header1.getRefOrderCode()); //得到售后订单关联的销售订单号
codes.append(","); if (header1.getRefOrderCode() != null && !"".equals(header1.getRefOrderCode())) {
refOrderCodeSet.add(header1.getRefOrderCode().trim());
}
} }
} }
String codesStr = codes.substring(0, codes.length() - 1);
//每50个作为一批拆分
// List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoList1, 50);
// for (int i = 0; i < splitListByCount.size(); i++) {
// List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
//
// StringBuffer codes = new StringBuffer();
// for (int j = 0; j < stockinOrderList.size(); j++) {
// StockinOrderSearchResponse.StockinOrder stockinOrder = stockinOrderList.get(j);
// StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
// List<StockinOrderSearchResponse.StockinOrder.StockinB> details = stockinOrder.getDetails();
// RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData1 = header.getRerturnGoodsOrderSearchData();//OFS售后订单
// if (rerturnGoodsOrderSearchData1 != null) {
// RerturnGoodsOrderSearchHeader header1 = rerturnGoodsOrderSearchData1.getHeader();
// List<RerturnGoodsOrderSearchDetails> details1 = rerturnGoodsOrderSearchData1.getDetails();
// codes.append(header1.getRefOrderCode());
// codes.append(",");
// }
// }
// String codesStr = codes.substring(0, codes.length() - 1);
//
// QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
// queryOfsSoSaleOutVo.setCode(codesStr);
// ofsStandardUtil.getOfsSaleOrder(queryOfsSoSaleOutVo, headerDetailsDtoArrayList, 1L);
// }
//Set集合转List集合
if (refOrderCodeSet.size() > 0) {
List<String> stringList = refOrderCodeSet.stream().collect(Collectors.toList());
List<List<String>> lists = SplitListByCountUtil.splitListByCount(stringList, 100);
for (int i = 0; i < lists.size(); i++) {
List<String> strings = lists.get(i);
String result = strings.stream().map(s -> s.trim()).collect(Collectors.joining(","));
if (result != null && result.length() > 0) {
QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo(); QueryOfsSoSaleOutVo queryOfsSoSaleOutVo = new QueryOfsSoSaleOutVo();
queryOfsSoSaleOutVo.setCode(codesStr); queryOfsSoSaleOutVo.setCode(result);
ofsStandardUtil.getOfsSaleOrder(queryOfsSoSaleOutVo, headerDetailsDtoArrayList, 1L); ofsStandardUtil.getOfsSaleOrder(queryOfsSoSaleOutVo, headerDetailsDtoArrayList, 1L);
} }
}
}
} catch (Exception e) { } catch (Exception e) {
logger.error("queryBatchOfsOrder方法抛出异常", e); logger.error("queryBatchOfsOrder方法抛出异常", e);
} }
@ -1800,6 +1871,13 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
private void findOfsOrder(List<com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto> headerDetailsDtoList, List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoList1) { private void findOfsOrder(List<com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto> headerDetailsDtoList, List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoList1) {
if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0 && returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) { if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0 && returnGoodHeaderDetailsDataDtoList1 != null && returnGoodHeaderDetailsDataDtoList1.size() > 0) {
try { try {
headerDetailsDtoList.forEach(dto -> {
if (dto.getHeader() != null && dto.getHeader().getId() == null) {
dto.getHeader().setId("");
}
});
Map<String, com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto> collect = headerDetailsDtoList.stream().collect(Collectors.toMap(dto -> dto.getHeader().getId(), dto -> dto));
for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) { for (int i = 0; i < returnGoodHeaderDetailsDataDtoList1.size(); i++) {
StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i); StockinOrderSearchResponse.StockinOrder stockinOrder = returnGoodHeaderDetailsDataDtoList1.get(i);
StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader(); StockinOrderSearchResponse.StockinOrder.StockinH header = stockinOrder.getHeader();
@ -1808,12 +1886,17 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = header.getRerturnGoodsOrderSearchData();//OFS售后订单 RerturnGoodsOrderSearchData rerturnGoodsOrderSearchData = header.getRerturnGoodsOrderSearchData();//OFS售后订单
RerturnGoodsOrderSearchHeader header2 = rerturnGoodsOrderSearchData.getHeader(); RerturnGoodsOrderSearchHeader header2 = rerturnGoodsOrderSearchData.getHeader();
List<RerturnGoodsOrderSearchDetails> details2 = rerturnGoodsOrderSearchData.getDetails(); List<RerturnGoodsOrderSearchDetails> details2 = rerturnGoodsOrderSearchData.getDetails();
// for (int j = 0; j < headerDetailsDtoList.size(); j++) {
for (int j = 0; j < headerDetailsDtoList.size(); j++) { // com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto headerDetailsDto = headerDetailsDtoList.get(j);
com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto headerDetailsDto = headerDetailsDtoList.get(j); // com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDto header1 = headerDetailsDto.getHeader();
com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDto header1 = headerDetailsDto.getHeader(); // List<DetailsDto> details1 = headerDetailsDto.getDetails();
List<DetailsDto> details1 = headerDetailsDto.getDetails(); // if (header2.getRefOrderId().equals(header1.getId())) {
if (header2.getRefOrderId().equals(header1.getId())) { // header.setHeaderDetailsDto(headerDetailsDto);
// }
// }
if (header2.getRefOrderId() != null && !"".equals(header2.getRefOrderId().trim())) {
com.hzya.frame.ttxofs.dto.ofssalesordersearch.HeaderDetailsDto headerDetailsDto = collect.get(header2.getRefOrderId().trim());
if (headerDetailsDto != null) {
header.setHeaderDetailsDto(headerDetailsDto); header.setHeaderDetailsDto(headerDetailsDto);
} }
} }

View File

@ -80,10 +80,10 @@ public class SoSaleOutPluginInitializerToBTest {
try { try {
// soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2024101800025544", "stock"); // soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2024101800025544", "stock");
// soSaleOutPluginInitializerToB.startImplementByStockTime("2024-10-18 00:00:00", "2024-10-18 23:59:59"); soSaleOutPluginInitializerToB.startImplementByStockTime("2024-10-23 16:09:59", "2024-10-23 16:10:01");
String aaa = "LETS-RE2024102200000018"; // String aaa = "LETS-SH2024102300043720";
soSaleOutPluginInitializerToB.startImplementByCode(aaa, "stock"); // soSaleOutPluginInitializerToB.startImplementByCode(aaa, "stock");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }