refactor(sales): 优化销售和退货流程的并发控制

- 在 SoSaleOutPluginInitializerToC 和 SoSaleReturnPluginInitializerToC 类中添加了 ReentrantLock- 为 getSetStock 和 getSetTran 方法添加了并发控制逻辑
- 增加了异常捕获和日志记录,提高了系统的健壮性
This commit is contained in:
liuy 2024-10-28 14:56:02 +08:00
parent 329e9f01ea
commit 251930ad8f
2 changed files with 58 additions and 26 deletions

View File

@ -408,12 +408,19 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
* @author liuyang * @author liuyang
*/ */
private void getSetStock(List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList) throws Exception { private void getSetStock(List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList) throws Exception {
//过滤成功的数据 LOCK1.lock();
List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtos = filterDataStock(headerDetailsDtoList); try {
//保存到mysql底表 //过滤成功的数据
batchInsert(headerDetailsDtos); List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtos = filterDataStock(headerDetailsDtoList);
//执行推送主逻辑 //保存到mysql底表
implementStock(headerDetailsDtos); batchInsert(headerDetailsDtos);
//执行推送主逻辑
implementStock(headerDetailsDtos);
} catch (Exception e) {
logger.error("TOC销售-库存getSetStock方法抛出异常", e);
} finally {
LOCK1.unlock();
}
} }
/** /**
@ -422,13 +429,20 @@ public class SoSaleOutPluginInitializerToC extends PluginBaseEntity {
* @author liuyang * @author liuyang
*/ */
private void getSetTran(List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList) throws Exception { private void getSetTran(List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtoList) throws Exception {
//先过滤成功的数据再保存到低表 LOCK2.lock();
//headerDetailsDtos携带红蓝单据推送成功与否的明细行 try {
List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtos = filterDataTran(headerDetailsDtoList); //先过滤成功的数据再保存到低表
//保存到mysql底表 //headerDetailsDtos携带红蓝单据推送成功与否的明细行
batchInsert(headerDetailsDtos); List<com.hzya.frame.ttxofs.dto.ofssaleorderoutsearch.HeaderDetailsDto> headerDetailsDtos = filterDataTran(headerDetailsDtoList);
//执行推送主逻辑 //保存到mysql底表
implementTran(headerDetailsDtos); batchInsert(headerDetailsDtos);
//执行推送主逻辑
implementTran(headerDetailsDtos);
} catch (Exception e) {
logger.error("TOC销售-交易成功getSetTran方法抛出异常", e);
} finally {
LOCK2.unlock();
}
} }
/** /**

View File

@ -57,7 +57,11 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
Logger logger = LoggerFactory.getLogger(SoSaleReturnPluginInitializerToC.class); Logger logger = LoggerFactory.getLogger(SoSaleReturnPluginInitializerToC.class);
private static final ReentrantLock LOCK = new ReentrantLock(true); // private static final ReentrantLock LOCK = new ReentrantLock(true);
private static final ReentrantLock LOCK1 = new ReentrantLock(true);
private static final ReentrantLock LOCK2 = new ReentrantLock(true);
private static final String STOCK = "stock"; private static final String STOCK = "stock";
@ -333,12 +337,19 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
* @author liuyang * @author liuyang
*/ */
private void getSetStock(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception { private void getSetStock(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception {
//过滤成功的数据 LOCK1.lock();
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = filterDataStock(returnGoodHeaderDetailsDataDtoArrayList); try {
//保存到mysql //过滤成功的数据
batchInsert(stockinOrderList); List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = filterDataStock(returnGoodHeaderDetailsDataDtoArrayList);
//执行推送主逻辑 //保存到mysql
implementStock(stockinOrderList); batchInsert(stockinOrderList);
//执行推送主逻辑
implementStock(stockinOrderList);
} catch (Exception e) {
logger.error("TOC退货-库存getSetStock方法抛出异常", e);
} finally {
LOCK1.unlock();
}
} }
/** /**
@ -347,12 +358,19 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
* @author liuyang * @author liuyang
*/ */
private void getSetTran(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception { private void getSetTran(List<StockinOrderSearchResponse.StockinOrder> returnGoodHeaderDetailsDataDtoArrayList) throws Exception {
//过滤成功的数据 LOCK2.lock();
List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = filterDataTran(returnGoodHeaderDetailsDataDtoArrayList); try {
//保存到mysql //过滤成功的数据
batchInsert(stockinOrderList); List<StockinOrderSearchResponse.StockinOrder> stockinOrderList = filterDataTran(returnGoodHeaderDetailsDataDtoArrayList);
//执行推送主逻辑 //保存到mysql
implementTran(stockinOrderList); batchInsert(stockinOrderList);
//执行推送主逻辑
implementTran(stockinOrderList);
} catch (Exception e) {
logger.error("TOC退货-确认收入getSetTran方法抛出异常", e);
} finally {
LOCK2.unlock();
}
} }
/** /**