From e807d334fcc4aa05975115ffe2df74abec4c8567 Mon Sep 17 00:00:00 2001 From: liuy <37787198+LiuyCodes@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:38:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=96=B9=E6=B3=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BB=A5=E4=BF=AE=E5=A4=8D=E6=8E=A8=E9=80=81=E9=94=81?= =?UTF-8?q?=E5=AE=9A=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对`SoSaleOutPluginInitializerToB`和`SoSaleReturnPluginInitializerToB`中的方法进行同步修改,以解决在推送数据到U8C系统时潜在的并发问题。现在方法在执行数据推送及验证存在性之前会进行同步锁定,以防止多线程环境下的数据冲突。 同时,在`SoSaleOutPluginInitializerToBTest`中对测试代码进行了注释调整,以反映代码变更后的测试情况。 此次更改确保了在并发环境下,数据推送和验证操作的原子性,从而提高了系统稳定性和数据一致性。 --- .../sales/SoSaleOutPluginInitializerToB.java | 49 ++++++++++--------- .../SoSaleReturnPluginInitializerToB.java | 44 +++++++++-------- .../SoSaleOutPluginInitializerToBTest.java | 4 +- 3 files changed, 54 insertions(+), 43 deletions(-) diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java index f65464f0..896305d0 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToB.java @@ -395,18 +395,20 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity { * @author liuyang */ private List filterDataStock(List headerDetailsDtoList) throws Exception { - // List headerDetailsDtoList1 = new ArrayList<>(); - List allTocofsSaleoutDetailedEntityList = new ArrayList<>(); - if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List headerDetailsDtoList2 = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2); - List tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr); - allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList); + synchronized (PUSH_LOCK1) { + // List headerDetailsDtoList1 = new ArrayList<>(); + List allTocofsSaleoutDetailedEntityList = new ArrayList<>(); + if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) { + List> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100); + for (int i = 0; i < splitListByCount.size(); i++) { + List headerDetailsDtoList2 = splitListByCount.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2); + List 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 filterDataTran(List headerDetailsDtoList) throws Exception { - List allTocofsSaleoutDetailedEntityList = new ArrayList<>(); - if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List headerDetailsDtoList2 = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2); - List tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr); - allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList); + synchronized (PUSH_LOCK2) { + List allTocofsSaleoutDetailedEntityList = new ArrayList<>(); + if (headerDetailsDtoList != null && headerDetailsDtoList.size() > 0) { + List> splitListByCount = SplitListByCountUtil.splitListByCount(headerDetailsDtoList, 100); + for (int i = 0; i < splitListByCount.size(); i++) { + List headerDetailsDtoList2 = splitListByCount.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(headerDetailsDtoList2); + List tocofsSaleoutDetailedEntityList = queryStockTocOutLog(idStr); + allTocofsSaleoutDetailedEntityList.addAll(tocofsSaleoutDetailedEntityList); + } } + return filterDataRowsAsPushOrFailedTran(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList); } - return filterDataRowsAsPushOrFailedTran(allTocofsSaleoutDetailedEntityList, headerDetailsDtoList); } /** @@ -1894,7 +1898,7 @@ public class SoSaleOutPluginInitializerToB extends PluginBaseEntity { Map> 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"); diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java index 36d8ce55..af9dff51 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleReturnPluginInitializerToB.java @@ -403,18 +403,20 @@ public class SoSaleReturnPluginInitializerToB extends PluginBaseEntity { * @author liuyang */ private List filterDataStock(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - // List headerDetailsDtoList1 = new ArrayList<>(); - List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); - if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List stockinOrderList = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); - List tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr); - tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities); + synchronized (PUSH_LOCK1) { + // List headerDetailsDtoList1 = new ArrayList<>(); + List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); + if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { + List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); + for (int i = 0; i < splitListByCount.size(); i++) { + List stockinOrderList = splitListByCount.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); + List 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 filterDataTran(List returnGoodHeaderDetailsDataDtoArrayList) throws Exception { - // List headerDetailsDtoList1 = new ArrayList<>(); - List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); - if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { - List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); - for (int i = 0; i < splitListByCount.size(); i++) { - List stockinOrderList = splitListByCount.get(i); - String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); - List tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr); - tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities); + synchronized (PUSH_LOCK2) { + // List headerDetailsDtoList1 = new ArrayList<>(); + List tocofsReturngoodsDetailedEntityList = new ArrayList<>(); + if (returnGoodHeaderDetailsDataDtoArrayList != null && returnGoodHeaderDetailsDataDtoArrayList.size() > 0) { + List> splitListByCount = SplitListByCountUtil.splitListByCount(returnGoodHeaderDetailsDataDtoArrayList, 100); + for (int i = 0; i < splitListByCount.size(); i++) { + List stockinOrderList = splitListByCount.get(i); + String idStr = commaConcatenatedPrimaryKeyStock(stockinOrderList); + List tocofsReturngoodsDetailedEntities = queryStockTocOutLog(idStr); + tocofsReturngoodsDetailedEntityList.addAll(tocofsReturngoodsDetailedEntities); + } } + return filterDataRowsAsPushOrFailedTran(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList); } - return filterDataRowsAsPushOrFailedTran(tocofsReturngoodsDetailedEntityList, returnGoodHeaderDetailsDataDtoArrayList); } /** diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToBTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToBTest.java index b6b2126d..8dae366a 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToBTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/sales/SoSaleOutPluginInitializerToBTest.java @@ -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(); }