From e8598a7d0097e1c3b5d56416bcaa6607b75956e2 Mon Sep 17 00:00:00 2001 From: PigBaoBei <2739175034@qq.com> Date: Sat, 11 May 2024 11:11:22 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E9=85=8D=E9=80=81=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E8=A3=85=E8=BD=A6=E3=80=81=E7=AD=BE=E6=94=B6=E8=AF=AD=E9=9F=B3?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DistributionDeliveryListServiceImpl.java | 7 ++++++- .../service/impl/DistributionSignforServiceImpl.java | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java index 2b57aed87..9a936dc4b 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java @@ -600,9 +600,14 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl distributionDeliveryListEntity.getId().equals(a.getDeliveryListId()) ); + if (flag){ + return Resp.scanFail("包件已存在异常", "包件已存在异常"); + } String collect = abnormalEntities.stream().map(DistributionLoadscanAbnormalEntity::getTrainNumber).collect(Collectors.joining(",")); log.info("包件已在其他车次存在异常 >>>>当前车次:{},其他车次:{}",distributionDeliveryListEntity.getTrainNumber(),collect); - return Resp.scanFail("包件已在其他车次存在异常", "包件已在其他车次存在异常"); + return Resp.scanFail("包件在其他车次存在异常", "包件在其他车次存在异常"); } //异步确认包条扫描信息 // distributionAsyncService.changeOrderSignforStatus(distrilbutionloadingscanDTO.getBarcode()); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java index e924b2ab6..17d9cfd16 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java @@ -724,7 +724,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl distributionDeliveryListEntity.getId().equals(a.getDeliveryListId()) ); + if (flag){ + return Resp.scanFail("包件已存在异常", "包件已存在异常"); + } String collect = abnormalEntities.stream().map(DistributionLoadscanAbnormalEntity::getTrainNumber).collect(Collectors.joining(",")); log.info("包件已在其他车次存在异常 >>>>当前车次:{},其他车次:{}",deliveryListEntity.getTrainNumber(),collect); return Resp.scanFail("包件已在其他车次存在异常", "包件已在其他车次存在异常"); From b66612cdbf850016cbac3393eafa519cfbe34898 Mon Sep 17 00:00:00 2001 From: "pref_mail@163.com" Date: Sat, 11 May 2024 11:45:27 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotations/LogpmAsync.java | 12 +++++ .../aspect/AsyncAnnotationAspect.java | 4 +- .../impl/AftersalesWorkOrderServiceImpl.java | 5 +- .../basic/aspect/AsyncAnnotationAspect.java | 4 +- .../aspect/AsyncAnnotationAspect.java | 4 +- .../aspect/AsyncAnnotationAspect.java | 20 +++++--- .../impl/DistributionAsyncServiceImpl.java | 49 ++++++++++--------- .../jinpai/aspect/AnnotationAspect.java | 4 +- .../factorydata/jinpai/job/AdvanceJob.java | 3 +- .../jinpai/mq/FactoryOrderListener.java | 3 +- .../olo/aspect/AnnotationAspect.java | 4 +- .../olo/mq/FactoryOrderListener.java | 3 +- .../suofeiya/aspect/AnnotationAspect.java | 4 +- .../suofeiya/mq/FactoryOrderListener.java | 3 +- .../zbom/aspect/AnnotationAspect.java | 4 +- .../zbom/mq/ZbomFactoryOrderListener.java | 3 +- .../LocalServerTenantIdAnnotationAspect.java | 4 +- .../service/impl/AsyncDataServiceImpl.java | 9 ++-- .../OpFailRetryPushPackageServiceImpl.java | 3 +- .../service/impl/AsyncDataServiceImpl.java | 3 +- .../aspect/AsyncAnnotationAspect.java | 4 +- .../aspect/AsyncAnnotationAspect.java | 4 +- .../service/impl/AsyncServiceImpl.java | 5 +- .../impl/CarsLoadAsyncServiceImpl.java | 19 +++---- .../impl/OpenOrderAsyncServiceImpl.java | 15 +++--- .../impl/PackageTrackLogAsyncServiceImpl.java | 5 +- .../aspect/AsyncAnnotationAspect.java | 4 +- .../service/impl/AsyncDataServiceImpl.java | 3 +- 28 files changed, 119 insertions(+), 88 deletions(-) create mode 100644 blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java diff --git a/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java b/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java new file mode 100644 index 000000000..e70510bbf --- /dev/null +++ b/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java @@ -0,0 +1,12 @@ +package org.springblade.common.annotations; + +import org.springframework.scheduling.annotation.Async; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +@Async("asyncExecutor") +public @interface LogpmAsync { + String value(); +} diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java index 8c63fd073..c0f7f2712 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java @@ -36,8 +36,8 @@ public class AsyncAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java index 9718ab4e6..4e5036448 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java @@ -44,6 +44,7 @@ import com.logpm.distribution.vo.DistributionDeliveryListVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.DictBizConstant; import org.springblade.common.constant.DictTimeoutEnum; import org.springblade.common.constant.aftersales.*; @@ -1932,7 +1933,7 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -41,9 +47,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java index dc487270c..9f0e90ce0 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java @@ -37,6 +37,7 @@ import com.logpm.warehouse.feign.IWarehouseUpdownTypeClient; import com.logpm.warehouse.feign.IWarehouseWaybillClient; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.DistributionTypeConstant; import org.springblade.common.constant.Inventory.InventoryLoadingStatusConstant; import org.springblade.common.constant.Inventory.InventoryPackageStatusConstant; @@ -121,7 +122,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { // private final @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void makeSureByPackage(DistrilbutionloadingscanDTO distrilbutionloadingscanDTO) { log.info("[makeSureByPackage]线程开启>>>>>>>>>>>>>>>>>>>>>>>>{}", distrilbutionloadingscanDTO); @@ -176,7 +177,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * @return */ @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional(rollbackFor = Exception.class) public Boolean getSelfPickup(Long id) { DistributionParcelListEntity entity = new DistributionParcelListEntity(); @@ -192,7 +193,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * @return */ @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional(rollbackFor = Exception.class) public Boolean getOrderSelfPickup(Long id) { DistributionStockArticleEntity entity = new DistributionStockArticleEntity(); @@ -202,7 +203,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional(rollbackFor = Exception.class) public Boolean getInventorySelfPickup(Long id) { DistributionStockEntity distributionStock = new DistributionStockEntity(); @@ -213,7 +214,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional(rollbackFor = Exception.class) public Boolean getInventoryOrderSelfPickup(Long id) { DistributionDeliveryDetailsEntity deliveryDetails = new DistributionDeliveryDetailsEntity(); @@ -241,7 +242,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * * @param id 订单ID */ - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void updateStockArticleStock(Long id) { log.debug("###查询订单备货状态"); @@ -269,7 +270,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * * @param ids 订单ID */ - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void updateParcelListReservation(List ids) { log.debug("####修改包件预约状态"); @@ -294,7 +295,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public Boolean getInventoryNumUpdate(Long id, Integer num, Integer type) { //查询 @@ -317,7 +318,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void changeOrderSignforStatus(DistributionParcelListEntity parcelListEntity) { @@ -338,7 +339,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void changeDiscussDeliveryListStatus(String barcode, Long deliveryId) { @@ -398,7 +399,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { }); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void changeMarketDeliveryListStatus(String barcode, Long deliveryId, Long reservationId) { @@ -444,7 +445,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { checkReservationAndDeliveryLoadingStatus(deliveryId, reservationId); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void checkDeliverySignStatus(String barcode, Long deliveryId) { @@ -635,7 +636,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { distributionDeliveryListMapper.updateById(deliveryListEntity); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void checkDeliverySignStatusByReservation(Long deliveryId) { @@ -1441,7 +1442,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void sendFactory(DistributionParcelListEntity distributionParcelListEntity, String signingTime, Long reservationId, String reservationCode, String warehouseName, String userName) { DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(distributionParcelListEntity.getStockArticleId()); log.info(">>>>>>>>>>> 签收推送 对象 {}", distributionParcelListEntity); @@ -1475,7 +1476,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { @Override @Transactional(rollbackFor = Exception.class) - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void sendReviewFactory(Long signingId, String warehouseName, Long warehouseId) { String brands = "梦天,欧派,志邦";//可追加 log.info(">>>>>>>>>>> 签收推送 对象 {}", "signingId:=" + signingId + "warehouseName:=" + warehouseName + "warehouseId:=" + warehouseId); @@ -1628,7 +1629,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Transactional public void maintenanceOrderStatus(String orderCode, Long warehouseId) { distributionStockArticleService.updateOrderInfo(orderCode, warehouseId); @@ -1636,7 +1637,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { @Override @Transactional - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void releaseSource(Long reservationId, Long warehouseId) { String method = "##########################DistributionAsyncServiceImpl.releaseSource"; DistributionReservationEntity reservationEntity = distributionReservationMapper.selectById(reservationId); @@ -1828,7 +1829,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * @param stockupDTO */ @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void updateStockupDate(StockupDTO stockupDTO) { Integer scanType = stockupDTO.getScanType();//扫码类型 1 包件 2库存品 @@ -1957,7 +1958,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { * 备货库存品备货时间回显 */ @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void updateStockupStockListDate(StockupDTO stockupDTO) { Integer scanType = stockupDTO.getScanType();//扫码类型 1 包件 2库存品 Long reservationId = stockupDTO.getReservationId();//预约ID @@ -2179,7 +2180,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { /** * 自提签收片段是否签收完全 */ - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(rollbackFor = Exception.class) public void getStockUPstate(Long billLadingId) { @@ -2265,7 +2266,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void checkStockArticleSignStatus(DistributionParcelListEntity parcelListEntity) { @@ -2322,7 +2323,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void changeOrderStatus(String barcode, Long deliveryId) { @@ -2341,7 +2342,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { distributionStockArticleService.updateById(stockArticleEntity); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void changeDeliverySignforListStatus(Long deliveryId, DistributionParcelListEntity parcelListEntity) { @@ -2465,7 +2466,7 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { distributionStockArticleService.updateById(stockArticleEntity); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override @Transactional(isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Exception.class) public void checkStockArticleLoadingStatus(DistributionParcelListEntity parcelListEntity) { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java index e3414918c..d7a77fc0f 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java @@ -37,8 +37,8 @@ public class AnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/job/AdvanceJob.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/job/AdvanceJob.java index 27eb6003b..592b1f3c0 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/job/AdvanceJob.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/job/AdvanceJob.java @@ -28,6 +28,7 @@ import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.factorydata.FactoryDataConstants; import org.springblade.common.model.IDict; @@ -116,7 +117,7 @@ public class AdvanceJob { return ReturnT.SUCCESS; } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void buildAdvance(Map> packageMap, Map deliveryMap, Map orderInfoMap) { // 新起线程构建暂存单发送mq diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/mq/FactoryOrderListener.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/mq/FactoryOrderListener.java index a72ca15a7..4836e8e22 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/mq/FactoryOrderListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/mq/FactoryOrderListener.java @@ -42,6 +42,7 @@ import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.factorydata.FactoryDataConstants; import org.springblade.core.redis.cache.BladeRedis; @@ -184,7 +185,7 @@ public class FactoryOrderListener { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void buildAdvance(PushOrderVO vo) { // 新起线程构建暂存单发送mq Long startWarehouseId = null; diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java index 76f6235b2..c9b546289 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/FactoryOrderListener.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/FactoryOrderListener.java index b697f2d21..107b56005 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/FactoryOrderListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/mq/FactoryOrderListener.java @@ -29,6 +29,7 @@ import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.factorydata.FactoryDataConstants; import org.springblade.core.redis.cache.BladeRedis; @@ -173,7 +174,7 @@ public class FactoryOrderListener { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void buildAdvance(List vos) { // 新起线程构建暂存单发送mq // ThreadPoolUtil.getThreadPool().submit(() -> { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java index 8a8b9f354..9a262a914 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/FactoryOrderListener.java b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/FactoryOrderListener.java index 9a336b699..9404ecde7 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/FactoryOrderListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/mq/FactoryOrderListener.java @@ -31,6 +31,7 @@ import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.factorydata.FactoryDataConstants; import org.springblade.core.redis.cache.BladeRedis; @@ -150,7 +151,7 @@ public class FactoryOrderListener { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void buildAdvance(DeliveryNoteVO vo) { // 新起线程构建暂存单发送mq Long startWarehouseId = null; diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java index 6dafedc97..3265b3946 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java index fd49d73cc..9ddd2a182 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/mq/ZbomFactoryOrderListener.java @@ -37,6 +37,7 @@ import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import com.logpm.trunkline.entity.TrunklineDetailProductEntity; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.PatternConstant; import org.springblade.common.constant.TenantNum; @@ -195,7 +196,7 @@ public class ZbomFactoryOrderListener { buildAdvance(zbReceiptDTO, packageCode); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void buildAdvance(ZBReceiptDTO zbReceiptDTO, Set packageCode) { // 新起线程构建暂存单发送mq Long startWarehouseId = null; diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/LocalServerTenantIdAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/LocalServerTenantIdAnnotationAspect.java index 6e41c6cbb..76b675a71 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/LocalServerTenantIdAnnotationAspect.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/LocalServerTenantIdAnnotationAspect.java @@ -25,8 +25,8 @@ // // // /** -// * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 -// * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 +// * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 +// * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 // */ // // // 定义一个 diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/comfac/service/impl/AsyncDataServiceImpl.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/comfac/service/impl/AsyncDataServiceImpl.java index 78eed4fca..2f17982a0 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/comfac/service/impl/AsyncDataServiceImpl.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/comfac/service/impl/AsyncDataServiceImpl.java @@ -62,6 +62,7 @@ import com.logpm.trunkline.entity.TrunklineDetailProductEntity; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; import org.jetbrains.annotations.Nullable; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.HttpConstants; import org.springblade.common.constant.PackagesTypeEnum; import org.springblade.common.constant.PatternConstant; @@ -141,7 +142,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { * 处理皮阿诺数据推送到汇通老库 */ @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void handlerPanDataToHt(Long id) { log.info("################handlerDataToHt: 处理皮阿诺订单数据到"); //查询需要同步的订单 @@ -336,7 +337,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void handlerPanDataToHtNew(Long id) { log.info("################handlerPanDataToHtNew: 处理皮阿诺订单数据到"); //查询需要同步的订单 @@ -520,7 +521,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void handlerMtDataToHt(Long mainId) { log.info("################handlerMtDataToHt: 处理梦天订单数据到"); //查询需要同步的订单 @@ -599,7 +600,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { } @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void handlerMtDataToHtNew(Long mainId) { log.info("################handlerMtDataToHtNew: 处理梦天订单数据到"); //查询需要同步的订单 diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/oupai/service/impl/OpFailRetryPushPackageServiceImpl.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/oupai/service/impl/OpFailRetryPushPackageServiceImpl.java index 2918146ce..2f11acf81 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/oupai/service/impl/OpFailRetryPushPackageServiceImpl.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/oupai/service/impl/OpFailRetryPushPackageServiceImpl.java @@ -8,6 +8,7 @@ import com.logpm.factory.oupai.service.IOuPaiFactoryService; import com.logpm.factory.oupai.service.OpFailRetryPushPackageService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -31,7 +32,7 @@ public class OpFailRetryPushPackageServiceImpl implements OpFailRetryPushPackage protected final int MAX_RETRY_TIMES = 7; - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void retry(List waitData){ ArrayList completeIds = new ArrayList<>(); diff --git a/blade-service/logpm-patch/src/main/java/com/logpm/patch/service/impl/AsyncDataServiceImpl.java b/blade-service/logpm-patch/src/main/java/com/logpm/patch/service/impl/AsyncDataServiceImpl.java index 643f71d33..81483d604 100644 --- a/blade-service/logpm-patch/src/main/java/com/logpm/patch/service/impl/AsyncDataServiceImpl.java +++ b/blade-service/logpm-patch/src/main/java/com/logpm/patch/service/impl/AsyncDataServiceImpl.java @@ -13,6 +13,7 @@ import com.logpm.patch.service.ISyncOrderInfoService; import com.logpm.patch.service.IWarehouseMappingDataService; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.exception.CustomerException; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -40,7 +41,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void syncInventoryToPlatform(SyncInventoryEntity syncInventoryEntity) { Integer pageSize = 500;//处理的每页条数 diff --git a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java index f5f0be02b..d88742f92 100644 --- a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AsyncAnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java index e06a9efc8..f34a3b551 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AsyncAnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java index a2db2bd8a..e9d916f24 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/AsyncServiceImpl.java @@ -5,6 +5,7 @@ import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import com.logpm.trunkline.service.IAsyncService; import com.logpm.trunkline.service.ITrunklineAdvanceDetailService; import com.logpm.trunkline.service.ITrunklineAdvanceService; +import org.springblade.common.annotations.LogpmAsync; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -20,7 +21,7 @@ public class AsyncServiceImpl implements IAsyncService { @Autowired private ITrunklineAdvanceDetailService advanceDetailService; - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public CompletableFuture getResponseFromCp(List list, int queryType) { return CompletableFuture @@ -29,7 +30,7 @@ public class AsyncServiceImpl implements IAsyncService { ); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public CompletableFuture saveAdvanceEntity(List list, int queryType) { return CompletableFuture diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/CarsLoadAsyncServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/CarsLoadAsyncServiceImpl.java index c4cd092a9..d8cf20ae1 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/CarsLoadAsyncServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/CarsLoadAsyncServiceImpl.java @@ -15,6 +15,7 @@ import com.logpm.trunkline.vo.UnloadReportVO; import com.logpm.warehouse.entity.WarehouseWaybillEntity; import com.logpm.warehouse.feign.IWarehouseWaybillClient; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.DictBizConstant; import org.springblade.common.constant.RabbitConstant; import org.springblade.common.constant.TenantNum; @@ -61,7 +62,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { @Autowired private RabbitTemplate rabbitTemplate; - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveLog(TrunklineCarsLoadEntity carsLoadEntity, TrunklineCarsLoadLineEntity carsLoadLineEntity, int cardLoadType,String nickName,Long userId) { String nodeName = null; @@ -171,7 +172,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { trunklineCarsLoadLogService.save(carsLoadLogEntity); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveCostShareRecord(Long loadId, TrunklineCarsLoadEntity carsLoadEntity, Long userId, String tenantId, String deptIds) { Long deptId = null; @@ -256,7 +257,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void costShareByLoadId(Long loadId,TrunklineCarsLoadEntity carsLoadEntity) { @@ -337,7 +338,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void abnormalListStartCarByLoadIdAndWarehouseId(Long loadId, Long warehouseId,Long userId,Long deptId,String nickName,String tenantId,String warehouseName) { @@ -378,7 +379,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void abnormalListUnloadByLoadIdAndWarehouseId(Long loadId, Long warehouseId, String warehouseName, Long loadScanId, String tenantId, Long userId, String nickName, Long deptId) { TrunklineCarsLoadScanEntity carsLoadScanEntity = trunklineCarsLoadScanService.getById(loadScanId); @@ -413,7 +414,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void abnormalListUnloadCheckByLoadIdAndWarehouseId(Long loadId, Long warehouseId, String warehouseName, String tenantId, Long userId, String nickName, Long deptId) { @@ -494,7 +495,7 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void dealwithAfterAbnormalPackage(String orderPackageCode, Long warehouseId, String warehouseName, String carsNo, Long userId, Long aLong, String nickName) { @@ -517,13 +518,13 @@ public class CarsLoadAsyncServiceImpl implements ICarsLoadAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void savaUnloadLogBatch(List unloadLogList) { trunklineCarsUnloadLogService.savaUnloadLogBatch(unloadLogList); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void sendRabbitMessageLoadScanData(List data) { String queue = RabbitConstant.INCOMING_TO_LOAD_QUEUE; diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderAsyncServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderAsyncServiceImpl.java index 8c96245cb..3fcba9ff6 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderAsyncServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderAsyncServiceImpl.java @@ -9,6 +9,7 @@ import com.logpm.trunkline.vo.LoadScanWaybillVO; import com.logpm.warehouse.entity.WarehouseWaybillEntity; import com.logpm.warehouse.feign.IWarehouseWaybillClient; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.utils.CommonUtil; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; @@ -42,7 +43,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { @Autowired private IInComingService inComingService; - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveLog(Long waybillId, String waybillNo, String trackType, String refer, String operationRemark, String nickName,Long userId,Long warehouseId,String warehouseName) { // String tenantId = AuthUtil.getTenantId(); @@ -65,7 +66,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { // DynamicDataSourceContextHolder.clear(); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveStartCarLog(TrunklineCarsLoadLineEntity carsLoadLineEntity,String nickName,Long userId) { Long loadId = carsLoadLineEntity.getLoadId(); @@ -135,7 +136,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveCancelStartCarLog(TrunklineCarsLoadLineEntity carsLoadLineEntity, String nickName,Long userId) { Long loadId = carsLoadLineEntity.getLoadId(); @@ -165,7 +166,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveArriveCarLog(TrunklineCarsLoadLineEntity carsLoadLineEntity, String nickName,Long userId) { Long loadId = carsLoadLineEntity.getLoadId(); @@ -195,7 +196,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveCancelArriveCarLog(TrunklineCarsLoadLineEntity carsLoadLineEntity, String nickName,Long userId) { Long loadId = carsLoadLineEntity.getLoadId(); @@ -225,7 +226,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void saveUnloadStartCarLog(TrunklineCarsLoadLineEntity carsLoadLineEntity, String nickName,Long userId) { Long loadId = carsLoadLineEntity.getLoadId(); @@ -257,7 +258,7 @@ public class OpenOrderAsyncServiceImpl implements IOpenOrderAsyncService { } } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void incomingPackageBatch(List advanceIds, Long userId, Long deptId, String tenantId, String nickName,Integer incomingType,Long warehouseId,String warehouseName) { InComingDTO inComingDTO = new InComingDTO(); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/PackageTrackLogAsyncServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/PackageTrackLogAsyncServiceImpl.java index 4533b5d49..e95a0e6d5 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/PackageTrackLogAsyncServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/PackageTrackLogAsyncServiceImpl.java @@ -6,6 +6,7 @@ import com.logpm.warehouse.entity.WarehousePackageTrackLogEntity; import com.logpm.warehouse.feign.IWarehousePackageTrackLogClient; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.annotations.LogpmAsync; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -21,7 +22,7 @@ public class PackageTrackLogAsyncServiceImpl implements IPackageTrackLogAsyncSer private final IWarehousePackageTrackLogClient warehousePackageTrackLogClient; private final ITrunklineWaybillPackageService waybillPackageService; - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void addPackageTrackLog(String tenantId, Long userId, Long deptId, String nickName, List orderPackageCodes, Long warehouseId, String warehouseName, Integer workNode, String content) { List list = new ArrayList<>(); @@ -49,7 +50,7 @@ public class PackageTrackLogAsyncServiceImpl implements IPackageTrackLogAsyncSer waybillPackageService.updatePackageStatus(orderPackageCodes, workNode); } - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") @Override public void addBatchPackageTrackLog(List addPackageTrackLogList, List orderPackageCodes, Integer workNode) { warehousePackageTrackLogClient.addLogList(addPackageTrackLogList); diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java index 2b99cee7d..8f7dd766c 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java @@ -17,8 +17,8 @@ import java.lang.reflect.Method; public class AsyncAnnotationAspect { /** - * 定义一个切点,匹配所有带有@Async("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@Async("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ @Around("@annotation(org.springframework.scheduling.annotation.Async)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/AsyncDataServiceImpl.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/AsyncDataServiceImpl.java index 7b477be11..e1e8168e9 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/AsyncDataServiceImpl.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/AsyncDataServiceImpl.java @@ -21,6 +21,7 @@ import com.logpm.warehouse.service.*; import com.logpm.warehouse.vo.QuestDetailVO; import com.logpm.warehouse.vo.TrayTypeDataVO; import lombok.extern.log4j.Log4j2; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.constant.TenantNum; import org.springblade.common.exception.CustomerException; import org.springblade.core.tool.api.R; @@ -79,7 +80,7 @@ public class AsyncDataServiceImpl implements IAsyncDataService { private ISyncTaskErrorLogService syncTaskErrorLogService; @Override - @Async("asyncExecutor") + @LogpmAsync("asyncExecutor") public void syncTaskData(String questNum, Long warehouseId,String tenantId,Long userId,String nickName,Long deptId) { log.info("###############syncTaskData: 同步盘点任务数据开始 questNum={}",questNum); QueryWrapper queryWrapper = new QueryWrapper<>(); From 02fdb02e79bab4276d7e17223f00e8f2d00f3708 Mon Sep 17 00:00:00 2001 From: zhenghaoyu Date: Sat, 11 May 2024 11:52:48 +0800 Subject: [PATCH 3/7] =?UTF-8?q?1.=E7=AD=BE=E6=94=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=90=8D=E7=A7=B0=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DistributionSignforServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java index 17d9cfd16..853d11438 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java @@ -2458,7 +2458,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl distributionDeliveryListEntity.getId().equals(a.getDeliveryListId()) ); + boolean flag = abnormalEntities.stream().allMatch(a -> deliveryListEntity.getId().equals(a.getDeliveryListId()) ); if (flag){ return Resp.scanFail("包件已存在异常", "包件已存在异常"); } From d67f81ff4ebd1815e176746b62cdeec3ec595a3d Mon Sep 17 00:00:00 2001 From: "pref_mail@163.com" Date: Sat, 11 May 2024 11:56:17 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E5=90=8D=E7=A7=B02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aftersales/aspect/AsyncAnnotationAspect.java | 10 ++++------ .../impl/AftersalesWorkOrderServiceImpl.java | 16 +++++----------- .../basic/aspect/AsyncAnnotationAspect.java | 10 ++++------ .../basicdata/aspect/AsyncAnnotationAspect.java | 9 +++------ .../jinpai/aspect/AnnotationAspect.java | 10 ++++------ .../factory/aspect/AsyncAnnotationAspect.java | 10 ++++------ .../supervise/aspect/AsyncAnnotationAspect.java | 10 ++++------ .../trunkline/aspect/AsyncAnnotationAspect.java | 10 ++++------ .../warehouse/aspect/AsyncAnnotationAspect.java | 9 +++------ 9 files changed, 35 insertions(+), 59 deletions(-) diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java index c0f7f2712..fec13c592 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java @@ -9,6 +9,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.launch.constant.AppConstant; @@ -39,16 +40,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -60,9 +60,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java index 4e5036448..57dd74c98 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java @@ -20,22 +20,19 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.aftersales.bean.Resp; -import com.logpm.aftersales.dto.AftersalesPackageScanDTO; -import com.logpm.aftersales.dto.AftersalesProcessingResultsDTO; -import com.logpm.aftersales.dto.AftersaleSurveyRecordDTO; -import com.logpm.aftersales.dto.AftersalesPersonResponsibleDTO; -import com.logpm.aftersales.dto.AftersalesWorkOrderDTO; +import com.logpm.aftersales.dto.*; import com.logpm.aftersales.entity.*; +import com.logpm.aftersales.excel.AftersalesWorkOrderExcel; import com.logpm.aftersales.mapper.AftersalesAbnormalPackageMapper; import com.logpm.aftersales.mapper.AftersalesAppealMapper; import com.logpm.aftersales.mapper.AftersalesCustomerMallMapper; +import com.logpm.aftersales.mapper.AftersalesWorkOrderMapper; import com.logpm.aftersales.service.*; import com.logpm.aftersales.vo.*; -import com.logpm.aftersales.excel.AftersalesWorkOrderExcel; -import com.logpm.aftersales.mapper.AftersalesWorkOrderMapper; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.feign.IBasicdataStoreBusinessClient; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; @@ -49,21 +46,18 @@ import org.springblade.common.constant.DictBizConstant; import org.springblade.common.constant.DictTimeoutEnum; import org.springblade.common.constant.aftersales.*; import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; -import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.cache.DictBizCache; import org.springblade.system.entity.DictBiz; import org.springblade.system.entity.User; import org.springblade.system.feign.ISysClient; import org.springblade.system.feign.IUserSearchClient; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; diff --git a/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java index 2145feb13..8434e606e 100644 --- a/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java @@ -5,6 +5,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; import org.springframework.scheduling.annotation.Async; @@ -20,16 +21,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -41,9 +41,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java index af590df2e..6c565bde7 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java @@ -9,6 +9,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.launch.constant.AppConstant; @@ -39,16 +40,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -60,9 +60,6 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java index d7a77fc0f..c00bab508 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java @@ -9,6 +9,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; @@ -40,16 +41,15 @@ public class AnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if (StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")) { // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -61,9 +61,7 @@ public class AnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - } else { - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java index 25aa8b75b..676e7fe52 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java @@ -15,6 +15,7 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.launch.constant.AppConstant; @@ -44,16 +45,15 @@ public class AsyncAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -65,9 +65,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java index d88742f92..57e004033 100644 --- a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java @@ -5,6 +5,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; import org.springframework.scheduling.annotation.Async; @@ -20,16 +21,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -41,9 +41,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java index f34a3b551..9f0d24146 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java @@ -5,6 +5,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; import org.springframework.scheduling.annotation.Async; @@ -20,16 +21,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -41,9 +41,7 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } + } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java index 8f7dd766c..11a0d9e59 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java @@ -5,6 +5,7 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; import org.springframework.scheduling.annotation.Async; @@ -20,16 +21,15 @@ public class AsyncAnnotationAspect { * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); - Async myAsync = method.getAnnotation(Async.class); + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -41,9 +41,6 @@ public class AsyncAnnotationAspect { DynamicDataSourceContextHolder.poll(); return result; - }else{ - return joinPoint.proceed(); - } } From a172be2c61dd6ed0511725051626c8a564098436 Mon Sep 17 00:00:00 2001 From: zhenghaoyu Date: Sat, 11 May 2024 12:09:39 +0800 Subject: [PATCH 5/7] =?UTF-8?q?1.=E8=87=AA=E5=AE=9A=E4=B9=89=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/springblade/common/annotations/LogpmAsync.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java b/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java index e70510bbf..7dd683365 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java +++ b/blade-biz-common/src/main/java/org/springblade/common/annotations/LogpmAsync.java @@ -2,9 +2,12 @@ package org.springblade.common.annotations; import org.springframework.scheduling.annotation.Async; +import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Async("asyncExecutor") public @interface LogpmAsync { From 314fc5aef3977c0bab60d1187dc7b70a30fd97f6 Mon Sep 17 00:00:00 2001 From: "pref_mail@163.com" Date: Sat, 11 May 2024 12:10:52 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=E6=83=85=E8=B7=AF=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DistributionAsyncServiceImpl.java | 39 ------------------- 1 file changed, 39 deletions(-) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java index 9f0e90ce0..cd353fc1b 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionAsyncServiceImpl.java @@ -61,7 +61,6 @@ import org.springblade.common.constant.stockup.StockupTypeConstant; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.BladeUser; import org.springblade.core.tool.utils.Func; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -130,44 +129,6 @@ public class DistributionAsyncServiceImpl implements IDistributionAsyncService { List distributionLoadscanEntities = distributionLoadscanMapper.selectList(new QueryWrapper().lambda() .eq(DistributionLoadscanEntity::getDeliveryId, distrilbutionloadingscanDTO.getDeliveryId()) ); - // 使用流式操作和映射,提取包条Id并创建新的列表 -// List packageIdList = distributionLoadscanEntities.stream().map(DistributionLoadscanEntity::getPackageId).collect(Collectors.toList()); -// for (Long aLong : packageIdList) { -// DistributionParcelListEntity parcelListEntity = distributionParcelListService.getById(aLong); -// parcelListEntity.setOrderPackageStatus(OrderPackageLoadingStatusConstant.yizhuangche.getValue()); -// distributionParcelListService.updateById(parcelListEntity); -// //查询到这个包件信息,这里就需要根据包件去对订单状态机进行变更 -// List parcelListEntityList = distributionParcelListService.getBaseMapper().selectList(Wrappers.query().lambda().eq(DistributionParcelListEntity::getStockArticleId, parcelListEntity.getStockArticleId())); -// boolean flag = parcelListEntityList.stream().allMatch(l -> Integer.parseInt(l.getOrderPackageStatus()) > Integer.parseInt(OrderPackageStatusConstant.yizhuangche.getValue())); -// DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(parcelListEntity.getStockArticleId()); -// if (flag){ -// //这里就需要将订单进行已出库的状态修改 -// stockArticleEntity.setOrderStatus(OrderStatusConstant.zhuangche.getValue()); -// }else { -// stockArticleEntity.setOrderStatus(OrderStatusConstant.bufenzhuangche.getValue()); -// //这里就是订单的部分出库 -// } -// distributionStockArticleService.updateById(stockArticleEntity); -// } - -// Long reservationId = distrilbutionloadingscanDTO.getReservationId(); -// -// //TODO 包件状态变更 -// -// //修改状态包条状态 -// distributionParcelListService.update(new UpdateWrapper().lambda() -// .in(DistributionParcelListEntity::getId,packageIdList) -// .set(DistributionParcelListEntity::getOrderPackageStatus, OrderPackageStatusConstant.yizhuangche.getValue()) -// ); -// -// //提取订单Id(去重) -// List OrderList = distributionLoadscanEntities.stream().map(DistributionLoadscanEntity::getOrderId).distinct().collect(Collectors.toList()); -// //查询修改订单状态 -// List distributionParcelListEntities = distributionParcelListMapper.selectList(new QueryWrapper().lambda() -// .in(DistributionParcelListEntity::getStockArticleId, OrderList) -// //.eq(DistributionParcelListEntity::get) -// //todo 修改订单状态 -// ); } /** From 40cf9718c2fba5201498596617d16699beaef624 Mon Sep 17 00:00:00 2001 From: zhaoqiaobo Date: Sat, 11 May 2024 12:57:56 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat(all):=20=E4=BF=AE=E6=94=B9=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E7=BA=BF=E7=A8=8B=E6=B3=A8=E8=A7=A3=E5=92=8C=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E6=B3=A8=E8=A7=A3=E4=B8=80=E8=B5=B7=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E7=94=9F=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aspect/AsyncAnnotationAspect.java | 115 ++------------ .../aspect/JobAnnotationAspect.java} | 60 ++----- .../basic/aspect/AsyncAnnotationAspect.java | 44 +----- .../aspect/AsyncAnnotationAspect.java | 112 ++----------- .../basicdata/aspect/JobAnnotationAspect.java | 82 ++++++++++ .../aspect/AsyncAnnotationAspect.java | 36 +---- .../aspect/RabbitAnnotationAspect.java} | 44 +----- .../jinpai/aspect/AnnotationAspect.java | 147 ------------------ .../jinpai/aspect/AsyncAnnotationAspect.java | 51 ++++++ .../jinpai/aspect/JobAnnotationAspect.java | 82 ++++++++++ .../jinpai/aspect/RabbitAnnotationAspect.java | 48 ++++++ .../olo/aspect/AsyncAnnotationAspect.java | 51 ++++++ .../olo/aspect/RabbitAnnotationAspect.java | 48 ++++++ .../aspect/AsyncAnnotationAspect.java | 51 ++++++ ...spect.java => RabbitAnnotationAspect.java} | 43 +---- .../zbom/aspect/AsyncAnnotationAspect.java | 51 ++++++ ...spect.java => RabbitAnnotationAspect.java} | 43 +---- .../factory/aspect/AsyncAnnotationAspect.java | 129 ++------------- .../factory/aspect/JobAnnotationAspect.java | 82 ++++++++++ .../aspect/RabbitAnnotationAspect.java | 48 ++++++ .../patch/aspect/JobAnnotationAspect.java | 82 ++++++++++ .../patch/aspect/RabbitAnnotationAspect.java | 48 ++++++ .../aspect/AsyncAnnotationAspect.java | 44 +----- .../aspect/AsyncAnnotationAspect.java | 44 +----- .../aspect/RabbitAnnotationAspect.java | 48 ++++++ .../aspect/AsyncAnnotationAspect.java | 43 +---- .../aspect/RabbitAnnotationAspect.java | 48 ++++++ 27 files changed, 916 insertions(+), 808 deletions(-) rename blade-service/{logpm-patch/src/main/java/com/logpm/patch/aspect/AsyncAnnotationAspect.java => logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java} (58%) create mode 100644 blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java rename blade-service/{logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java => logpm-distribution/src/main/java/com/logpm/distribution/aspect/RabbitAnnotationAspect.java} (54%) delete mode 100644 blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AsyncAnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/RabbitAnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AsyncAnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/RabbitAnnotationAspect.java create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AsyncAnnotationAspect.java rename blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/{AnnotationAspect.java => RabbitAnnotationAspect.java} (53%) create mode 100644 blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AsyncAnnotationAspect.java rename blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/{AnnotationAspect.java => RabbitAnnotationAspect.java} (53%) create mode 100644 blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java create mode 100644 blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/RabbitAnnotationAspect.java create mode 100644 blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java create mode 100644 blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/RabbitAnnotationAspect.java create mode 100644 blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/RabbitAnnotationAspect.java create mode 100644 blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/RabbitAnnotationAspect.java diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java index fec13c592..385589b92 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/AsyncAnnotationAspect.java @@ -1,41 +1,24 @@ package com.logpm.aftersales.aspect; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; -import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; -import org.springblade.common.cache.CacheNames; -import org.springblade.common.constant.LauncherConstant; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springblade.core.tool.utils.ThreadLocalUtil; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; @Aspect @Component -@AllArgsConstructor +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { - private final BladeRedis bladeRedis; - private final Environment environment; + /** * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 @@ -48,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -58,91 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - } - - - @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") - public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - - JSONObject jsonObject = mockLogin(); - MockHttpServletRequest mockRequest = new MockHttpServletRequest(); - mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); - RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); - httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - ThreadLocalUtil.put("bladeContext", httpHeaders); - - DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - - return result; - - - } - - private JSONObject mockLogin(){ - - String account ="shujutongbu"; - JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); - if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); - } - return data; - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") -// public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") -// public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - - } diff --git a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java similarity index 58% rename from blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/AsyncAnnotationAspect.java rename to blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java index a8e258ba0..609decb6e 100644 --- a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java @@ -1,4 +1,4 @@ -package com.logpm.patch.aspect; +package com.logpm.aftersales.aspect; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; @@ -8,9 +8,10 @@ import lombok.AllArgsConstructor; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; -import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.ThreadLocalUtil; @@ -21,6 +22,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -28,62 +30,29 @@ import java.util.Objects; @Aspect @Component @AllArgsConstructor -public class AsyncAnnotationAspect { +public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - - @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { - JSONObject jsonObject = mockLogin(); - MockHttpServletRequest mockRequest = new MockHttpServletRequest(); - mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); - RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + JSONObject jsonObject = mockLogin(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); ThreadLocalUtil.put("bladeContext", httpHeaders); - DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); + DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); return result; @@ -114,5 +83,4 @@ public class AsyncAnnotationAspect { } - } diff --git a/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java index 8434e606e..e8024cf24 100644 --- a/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-basic/src/main/java/com/logpm/basic/aspect/AsyncAnnotationAspect.java @@ -1,20 +1,22 @@ package com.logpm.basic.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { /** @@ -29,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -39,41 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - } - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") -// public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") -// public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java index 6c565bde7..41137ed9c 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/AsyncAnnotationAspect.java @@ -1,41 +1,24 @@ package com.logpm.basicdata.aspect; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; -import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; -import org.springblade.common.cache.CacheNames; -import org.springblade.common.constant.LauncherConstant; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springblade.core.tool.utils.ThreadLocalUtil; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; @Aspect @Component -@AllArgsConstructor +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { - private final BladeRedis bladeRedis; - private final Environment environment; + /** * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 @@ -48,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -58,88 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - } - @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") - public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - - JSONObject jsonObject = mockLogin(); - MockHttpServletRequest mockRequest = new MockHttpServletRequest(); - mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); - RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); - httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - ThreadLocalUtil.put("bladeContext", httpHeaders); - - DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - - return result; - - - } - - private JSONObject mockLogin(){ - - String account ="shujutongbu"; - JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); - if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); - } - return data; - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") -// public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") -// public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java new file mode 100644 index 000000000..9409e560c --- /dev/null +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java @@ -0,0 +1,82 @@ +package com.logpm.basicdata.aspect; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Aspect +@Component +@AllArgsConstructor +public class JobAnnotationAspect { + private final BladeRedis bladeRedis; + private final Environment environment; + + @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") + public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + + JSONObject jsonObject = mockLogin(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + + return result; + + + } + + private JSONObject mockLogin(){ + + String account ="shujutongbu"; + JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + } + return data; + } + + +} diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/AsyncAnnotationAspect.java index 760044112..ae1119cbb 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/AsyncAnnotationAspect.java @@ -9,6 +9,7 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; +import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -17,6 +18,7 @@ import java.lang.reflect.Method; @Aspect @Component @Slf4j +@Order(-1) public class AsyncAnnotationAspect { /** @@ -45,41 +47,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; } } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/RabbitAnnotationAspect.java similarity index 54% rename from blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java rename to blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/RabbitAnnotationAspect.java index c9b546289..f01919884 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AnnotationAspect.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/aspect/RabbitAnnotationAspect.java @@ -1,51 +1,23 @@ -package com.logpm.factorydata.olo.aspect; +package com.logpm.distribution.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component -public class AnnotationAspect { +@Slf4j +public class RabbitAnnotationAspect { - /** - * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 - */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") - public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - - Async myAsync = method.getAnnotation(Async.class); - String annotationValue = myAsync.value(); - - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ - // 在方法执行前的操作 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - - // 执行原方法 - Object result = joinPoint.proceed(); - - // 在方法执行后的操作 - DynamicDataSourceContextHolder.poll(); - - return result; - }else{ - return joinPoint.proceed(); - } - - } /** * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 @@ -55,7 +27,7 @@ public class AnnotationAspect { * @throws Throwable 如果执行过程中发生异常,则抛出。 */ @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -67,7 +39,7 @@ public class AnnotationAspect { } @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java deleted file mode 100644 index c00bab508..000000000 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AnnotationAspect.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.logpm.factorydata.jinpai.aspect; - -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; -import lombok.AllArgsConstructor; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; -import org.springblade.common.annotations.LogpmAsync; -import org.springblade.common.cache.CacheNames; -import org.springblade.common.constant.LauncherConstant; -import org.springblade.core.redis.cache.BladeRedis; -import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springblade.core.tool.utils.ThreadLocalUtil; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; - -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -@Aspect -@Component -@AllArgsConstructor -public class AnnotationAspect { - private final BladeRedis bladeRedis; - private final Environment environment; - - - /** - * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 - */ - @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") - public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - - LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); - String annotationValue = myAsync.value(); - - // 在方法执行前的操作 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - - // 执行原方法 - Object result = joinPoint.proceed(); - - // 在方法执行后的操作 - DynamicDataSourceContextHolder.poll(); - - return result; - - - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") - public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - - JSONObject jsonObject = mockLogin(); - MockHttpServletRequest mockRequest = new MockHttpServletRequest(); - mockRequest.addHeader("Blade-Auth", "bearer " + jsonObject.get("access_token")); - RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("Blade-Auth", "bearer " + jsonObject.get("access_token")); - httpHeaders.add("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - ThreadLocalUtil.put("bladeContext", httpHeaders); - - DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - - return result; - - - } - - private JSONObject mockLogin() { - - String account = "shujutongbu"; - JSONObject data = bladeRedis.get(CacheNames.LOCAL_SERVER_USER + account); - if (Objects.isNull(data)) { - String url = "http://" + LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0])) + "/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER + account, data, 3200L); - } - return data; - } - -} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AsyncAnnotationAspect.java new file mode 100644 index 000000000..bfe13ad27 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/AsyncAnnotationAspect.java @@ -0,0 +1,51 @@ +package com.logpm.factorydata.jinpai.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +@Slf4j +@Order(-1) +public class AsyncAnnotationAspect { + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); + + // 在方法执行前的操作 + String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); + DynamicDataSourceContextHolder.push(tenantId); + + // 执行原方法 + Object result = joinPoint.proceed(); + + // 在方法执行后的操作 + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java new file mode 100644 index 000000000..250c4d8d6 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java @@ -0,0 +1,82 @@ +package com.logpm.factorydata.jinpai.aspect; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Aspect +@Component +@AllArgsConstructor +public class JobAnnotationAspect { + private final BladeRedis bladeRedis; + private final Environment environment; + + @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") + public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + + JSONObject jsonObject = mockLogin(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + + return result; + + + } + + private JSONObject mockLogin(){ + + String account ="shujutongbu"; + JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + } + return data; + } + + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..fa2f303bb --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.factorydata.jinpai.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AsyncAnnotationAspect.java new file mode 100644 index 000000000..4de5e3e08 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/AsyncAnnotationAspect.java @@ -0,0 +1,51 @@ +package com.logpm.factorydata.olo.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +@Slf4j +@Order(-1) +public class AsyncAnnotationAspect { + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); + + // 在方法执行前的操作 + String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); + DynamicDataSourceContextHolder.push(tenantId); + + // 执行原方法 + Object result = joinPoint.proceed(); + + // 在方法执行后的操作 + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..cd968e36d --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-olo/src/main/java/com/logpm/factorydata/olo/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.factorydata.olo.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AsyncAnnotationAspect.java new file mode 100644 index 000000000..b7eb3ac74 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AsyncAnnotationAspect.java @@ -0,0 +1,51 @@ +package com.logpm.factorydata.suofeiya.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +@Slf4j +@Order(-1) +public class AsyncAnnotationAspect { + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); + + // 在方法执行前的操作 + String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); + DynamicDataSourceContextHolder.push(tenantId); + + // 执行原方法 + Object result = joinPoint.proceed(); + + // 在方法执行后的操作 + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/RabbitAnnotationAspect.java similarity index 53% rename from blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java rename to blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/RabbitAnnotationAspect.java index 9a262a914..bed29b6e4 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-suofeiya/src/main/java/com/logpm/factorydata/suofeiya/aspect/RabbitAnnotationAspect.java @@ -1,51 +1,18 @@ package com.logpm.factorydata.suofeiya.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import java.lang.reflect.Method; - @Aspect @Component -public class AnnotationAspect { - - /** - * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 - */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") - public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - - Async myAsync = method.getAnnotation(Async.class); - String annotationValue = myAsync.value(); +@Slf4j +public class RabbitAnnotationAspect { - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ - // 在方法执行前的操作 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - - // 执行原方法 - Object result = joinPoint.proceed(); - - // 在方法执行后的操作 - DynamicDataSourceContextHolder.poll(); - - return result; - }else{ - return joinPoint.proceed(); - } - - } /** * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 @@ -55,7 +22,7 @@ public class AnnotationAspect { * @throws Throwable 如果执行过程中发生异常,则抛出。 */ @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -67,7 +34,7 @@ public class AnnotationAspect { } @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AsyncAnnotationAspect.java new file mode 100644 index 000000000..2f48b3750 --- /dev/null +++ b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AsyncAnnotationAspect.java @@ -0,0 +1,51 @@ +package com.logpm.factorydata.zbom.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springblade.common.annotations.LogpmAsync; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; + +@Aspect +@Component +@Slf4j +@Order(-1) +public class AsyncAnnotationAspect { + + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ + @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") + public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); + String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); + + // 在方法执行前的操作 + String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); + DynamicDataSourceContextHolder.push(tenantId); + + // 执行原方法 + Object result = joinPoint.proceed(); + + // 在方法执行后的操作 + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/RabbitAnnotationAspect.java similarity index 53% rename from blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java rename to blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/RabbitAnnotationAspect.java index 3265b3946..c9f433a93 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/AnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-zbom/src/main/java/com/logpm/factorydata/zbom/aspect/RabbitAnnotationAspect.java @@ -1,51 +1,18 @@ package com.logpm.factorydata.zbom.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; -import java.lang.reflect.Method; - @Aspect @Component -public class AnnotationAspect { - - /** - * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 - * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 - */ - @Around("@annotation(org.springframework.scheduling.annotation.Async)") - public Object asyncAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - - Async myAsync = method.getAnnotation(Async.class); - String annotationValue = myAsync.value(); +@Slf4j +public class RabbitAnnotationAspect { - if(StringUtil.isNotBlank(annotationValue) && annotationValue.equals("asyncExecutor")){ - // 在方法执行前的操作 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - - // 执行原方法 - Object result = joinPoint.proceed(); - - // 在方法执行后的操作 - DynamicDataSourceContextHolder.poll(); - - return result; - }else{ - return joinPoint.proceed(); - } - - } /** * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 @@ -55,7 +22,7 @@ public class AnnotationAspect { * @throws Throwable 如果执行过程中发生异常,则抛出。 */ @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); @@ -67,7 +34,7 @@ public class AnnotationAspect { } @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { // 在方法执行前,获取当前租户ID并设置到数据源上下文中 String tenantId = AuthUtil.getTenantId(); DynamicDataSourceContextHolder.push(tenantId); diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java index 676e7fe52..a7bb19520 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/AsyncAnnotationAspect.java @@ -1,50 +1,28 @@ package com.logpm.factory.aspect; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.AllArgsConstructor; -import org.aspectj.lang.JoinPoint; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Before; -import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; -import org.springblade.common.cache.CacheNames; -import org.springblade.common.constant.LauncherConstant; -import org.springblade.core.launch.constant.AppConstant; -import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springblade.core.tool.utils.ThreadLocalUtil; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; @Aspect @Component -@AllArgsConstructor +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { - private final BladeRedis bladeRedis; - private final Environment environment; + /** + * 定义一个切点,匹配所有带有@LogpmAsync("asyncExecutor")注解的方法。 + * 注意:实际上Spring Framework自带对@LogpmAsync("asyncExecutor")的处理,直接这样配置可能会导致预期之外的行为。 + */ @Around("@annotation(org.springblade.common.annotations.LogpmAsync)") public Object logAroundAsyncMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -53,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -63,94 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - - - - @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") - public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { - - - JSONObject jsonObject = mockLogin(); - MockHttpServletRequest mockRequest = new MockHttpServletRequest(); - mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); - RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); - - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); - httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - ThreadLocalUtil.put("bladeContext", httpHeaders); - - DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - - return result; - - - } - - private JSONObject mockLogin(){ - - String account ="shujutongbu"; - JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); - if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - cn.hutool.http.HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); - } - return data; } - - } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java new file mode 100644 index 000000000..e90fe3e7e --- /dev/null +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java @@ -0,0 +1,82 @@ +package com.logpm.factory.aspect; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Aspect +@Component +@AllArgsConstructor +public class JobAnnotationAspect { + private final BladeRedis bladeRedis; + private final Environment environment; + + @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") + public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + + JSONObject jsonObject = mockLogin(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + + return result; + + + } + + private JSONObject mockLogin(){ + + String account ="shujutongbu"; + JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + } + return data; + } + + +} diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..eceec509f --- /dev/null +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.factory.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java new file mode 100644 index 000000000..0e315907c --- /dev/null +++ b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java @@ -0,0 +1,82 @@ +package com.logpm.patch.aspect; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.AllArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.constant.LauncherConstant; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@Aspect +@Component +@AllArgsConstructor +public class JobAnnotationAspect { + private final BladeRedis bladeRedis; + private final Environment environment; + + @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") + public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { + + + JSONObject jsonObject = mockLogin(); + MockHttpServletRequest mockRequest = new MockHttpServletRequest(); + mockRequest.addHeader("Blade-Auth", "bearer "+jsonObject.get("access_token")); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest)); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+jsonObject.get("access_token") ); + httpHeaders.add( "Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + DynamicDataSourceContextHolder.push(jsonObject.getString("tenant_id")); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + + return result; + + + } + + private JSONObject mockLogin(){ + + String account ="shujutongbu"; + JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + } + return data; + } + + +} diff --git a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..7fac6567b --- /dev/null +++ b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.patch.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java index 57e004033..5fcbeef6e 100644 --- a/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-supervise/src/main/java/com/logpm/supervise/aspect/AsyncAnnotationAspect.java @@ -1,20 +1,22 @@ package com.logpm.supervise.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { /** @@ -29,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -39,41 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - } - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") -// public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - -// @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") -// public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { -// // 在方法执行前,获取当前租户ID并设置到数据源上下文中 -// String tenantId = AuthUtil.getTenantId(); -// DynamicDataSourceContextHolder.push(tenantId); -// // 执行原方法 -// Object result = joinPoint.proceed(); -// // 在方法执行后,从数据源上下文中移除租户ID -// DynamicDataSourceContextHolder.poll(); -// return result; -// } - } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java index 9f0d24146..23ac93519 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/AsyncAnnotationAspect.java @@ -1,20 +1,22 @@ package com.logpm.trunkline.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { /** @@ -29,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -39,41 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; } } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..78eca8351 --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.trunkline.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +} diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java index 11a0d9e59..5e5895f27 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/AsyncAnnotationAspect.java @@ -1,20 +1,22 @@ package com.logpm.warehouse.aspect; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springblade.common.annotations.LogpmAsync; import org.springblade.core.secure.utils.AuthUtil; -import org.springblade.core.tool.utils.StringUtil; -import org.springframework.scheduling.annotation.Async; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Aspect @Component +@Slf4j +@Order(-1) public class AsyncAnnotationAspect { /** @@ -29,9 +31,13 @@ public class AsyncAnnotationAspect { LogpmAsync myAsync = method.getAnnotation(LogpmAsync.class); String annotationValue = myAsync.value(); + log.info(">>>>>>>>>>>>>>>>>> annotationValue={}",annotationValue); + + log.info("@LogpmAsync注解的值为asyncExecutor,进行数据源切换 "); // 在方法执行前的操作 String tenantId = AuthUtil.getTenantId(); + log.info(">> tenandId {} ",tenantId); DynamicDataSourceContextHolder.push(tenantId); // 执行原方法 @@ -39,40 +45,7 @@ public class AsyncAnnotationAspect { // 在方法执行后的操作 DynamicDataSourceContextHolder.poll(); - return result; - - } - - /** - * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 - * - * @param joinPoint 切面的连接点,表示当前被拦截的方法。 - * @return 返回被拦截方法的执行结果。 - * @throws Throwable 如果执行过程中发生异常,则抛出。 - */ - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") - public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; - } - - @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") - public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { - // 在方法执行前,获取当前租户ID并设置到数据源上下文中 - String tenantId = AuthUtil.getTenantId(); - DynamicDataSourceContextHolder.push(tenantId); - // 执行原方法 - Object result = joinPoint.proceed(); - // 在方法执行后,从数据源上下文中移除租户ID - DynamicDataSourceContextHolder.poll(); - return result; } } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/RabbitAnnotationAspect.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/RabbitAnnotationAspect.java new file mode 100644 index 000000000..c8617a0c0 --- /dev/null +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/aspect/RabbitAnnotationAspect.java @@ -0,0 +1,48 @@ +package com.logpm.warehouse.aspect; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springblade.core.secure.utils.AuthUtil; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class RabbitAnnotationAspect { + + + /** + * 该方法为一个切面,用于对标记了@RabbitListener注解的方法进行增强,主要增加了日志记录和数据源上下文处理的功能。 + * + * @param joinPoint 切面的连接点,表示当前被拦截的方法。 + * @return 返回被拦截方法的执行结果。 + * @throws Throwable 如果执行过程中发生异常,则抛出。 + */ + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitListener)") + public Object rabbitMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + + @Around("@annotation(org.springframework.amqp.rabbit.annotation.RabbitHandler)") + public Object rabbitHandlerMethods(ProceedingJoinPoint joinPoint) throws Throwable { + // 在方法执行前,获取当前租户ID并设置到数据源上下文中 + String tenantId = AuthUtil.getTenantId(); + DynamicDataSourceContextHolder.push(tenantId); + // 执行原方法 + Object result = joinPoint.proceed(); + // 在方法执行后,从数据源上下文中移除租户ID + DynamicDataSourceContextHolder.poll(); + return result; + } + +}