同步方法修改以修复推送锁定问题
对`SoSaleOutPluginInitializerToB`和`SoSaleReturnPluginInitializerToB`中的方法进行同步修改,以解决在推送数据到U8C系统时潜在的并发问题。现在方法在执行数据推送及验证存在性之前会进行同步锁定,以防止多线程环境下的数据冲突。 同时,在`SoSaleOutPluginInitializerToBTest`中对测试代码进行了注释调整,以反映代码变更后的测试情况。 此次更改确保了在并发环境下,数据推送和验证操作的原子性,从而提高了系统稳定性和数据一致性。
This commit is contained in:
parent
55b1df7d3c
commit
e807d334fc
|
@ -395,18 +395,20 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
|
|||
* @author liuyang
|
||||
*/
|
||||
private List<HeaderDetailsDto> filterDataStock(List<HeaderDetailsDto> headerDetailsDtoList) throws Exception {
|
||||
// List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsSaleoutDetailedEntity> allTocofsSaleoutDetailedEntityList = new ArrayList<>();
|
||||
if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) {
|
||||
List<List<HeaderDetailsDto>> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<HeaderDetailsDto> headerDetailsDtoList2 = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2);
|
||||
List<TocofsSaleoutDetailedEntity> tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr);
|
||||
allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList);
|
||||
synchronized (PUSH_LOCK1) {
|
||||
// List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsSaleoutDetailedEntity> allTocofsSaleoutDetailedEntityList = new ArrayList<>();
|
||||
if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) {
|
||||
List<List<HeaderDetailsDto>> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<HeaderDetailsDto> headerDetailsDtoList2 = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2);
|
||||
List<TocofsSaleoutDetailedEntity> tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr);
|
||||
allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList);
|
||||
}
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedStock(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList);
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedStock(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -509,17 +511,19 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
|
|||
* @author liuyang
|
||||
*/
|
||||
private List<HeaderDetailsDto> filterDataTran(List<HeaderDetailsDto> headerDetailsDtoList) throws Exception {
|
||||
List<TocofsSaleoutDetailedEntity> allTocofsSaleoutDetailedEntityList = new ArrayList<>();
|
||||
if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) {
|
||||
List<List<HeaderDetailsDto>> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<HeaderDetailsDto> headerDetailsDtoList2 = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2);
|
||||
List<TocofsSaleoutDetailedEntity> tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr);
|
||||
allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList);
|
||||
synchronized (PUSH_LOCK2) {
|
||||
List<TocofsSaleoutDetailedEntity> allTocofsSaleoutDetailedEntityList = new ArrayList<>();
|
||||
if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) {
|
||||
List<List<HeaderDetailsDto>> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<HeaderDetailsDto> headerDetailsDtoList2 = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2);
|
||||
List<TocofsSaleoutDetailedEntity> tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr);
|
||||
allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList);
|
||||
}
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedTran(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList);
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedTran(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1894,7 +1898,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
|
|||
|
||||
Map<String, List<SalesInvoiceDto>> stringListMap = new HashMap<>();
|
||||
stringListMap.put("billvos", salesInvoiceDtoList);
|
||||
|
||||
|
||||
//推送到U8C之前,再次验证,在U8C是否已经存在
|
||||
synchronized (PUSH_LOCK2) {
|
||||
Boolean aBoolean = checkTobSalesInvoice(header.getId(), header.getCode());
|
||||
|
@ -2062,9 +2066,10 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity {
|
|||
* @author liuyang
|
||||
*/
|
||||
private Boolean checkTobOrder(String ofsId, String ofsCode) throws Exception {
|
||||
Assert.notNull(ofsId, "ofsId不能为空");
|
||||
Assert.notNull(ofsCode, "ofsCode不能为空");
|
||||
synchronized (checkTobOrderLock) {
|
||||
Assert.notNull(ofsId, "ofsId不能为空");
|
||||
Assert.notNull(ofsCode, "ofsCode不能为空");
|
||||
|
||||
SoSaleEntity soSaleEntity = new SoSaleEntity();
|
||||
soSaleEntity.setDr(0L);
|
||||
soSaleEntity.setDataSourceCode("lets_u8c");
|
||||
|
|
|
@ -403,18 +403,20 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
|
|||
* @author liuyang
|
||||
*/
|
||||
private List<StockinOrderSearchResponse.StockinOrder> filterDataStock(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception {
|
||||
// List<StockinOrderSearchResponse.StockinOrder> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntityList = new ArrayList<>();
|
||||
if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) {
|
||||
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList);
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr);
|
||||
tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities);
|
||||
synchronized (PUSH_LOCK1) {
|
||||
// List<StockinOrderSearchResponse.StockinOrder> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntityList = new ArrayList<>();
|
||||
if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) {
|
||||
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList);
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr);
|
||||
tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities);
|
||||
}
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedStock(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList);
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedStock(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -567,18 +569,20 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity {
|
|||
* @author liuyang
|
||||
*/
|
||||
private List<StockinOrderSearchResponse.StockinOrder> filterDataTran(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception {
|
||||
// List<StockinOrderSearchResponse.StockinOrder> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntityList = new ArrayList<>();
|
||||
if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) {
|
||||
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList);
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr);
|
||||
tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities);
|
||||
synchronized (PUSH_LOCK2) {
|
||||
// List<StockinOrderSearchResponse.StockinOrder> headerDetailsDtoList1 = new ArrayList<>();
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntityList = new ArrayList<>();
|
||||
if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) {
|
||||
List<List<StockinOrderSearchResponse.StockinOrder>> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100);
|
||||
for (int i = 0; i < splitListByCount.size(); i++) {
|
||||
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = splitListByCount.get(i);
|
||||
String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList);
|
||||
List<TocofsReturngoodsDetailedEntity> tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr);
|
||||
tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities);
|
||||
}
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedTran(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList);
|
||||
}
|
||||
return filterDataRowsAsPushOrFailedTran(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -62,7 +62,9 @@ public class SoSaleOutPluginInitializerToBTest {
|
|||
|
||||
try {
|
||||
// soSaleOutPluginInitializerToB.startImplementByTranTime("2024-09-12 14:04:00","2024-09-12 14:12:00");
|
||||
soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2024092000000003", "stock");
|
||||
// soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2024092000000003", "stock");
|
||||
|
||||
soSaleOutPluginInitializerToB.startImplementByCode("LETS-SH2024092600000009","stock");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue