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