24282 9 месяцев назад
Родитель
Сommit
db49b25429

+ 1 - 3
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/constants/RunParamConstant.java

@@ -13,9 +13,7 @@ public class RunParamConstant {
     public static final String ACCESS_TOKEN = "access_token";
     public static final String REFRESH_TOKEN = "refresh_token";
 
-    public static final int SLEEP_TEN_SECOND = 10000;
-    public static final int SLEEP_ONE_MINUTE = 60000;
-    public static final int SLEEP_FIVE_MINUTE = 300000;
+    public static final int SLEEP_ONE_MINUTE = 1000 * 60 * 5;
 
     /**
      * 刷新token地址

+ 151 - 133
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdApiServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.victoriatourist.service.jd.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -64,7 +65,6 @@ import com.jd.open.api.sdk.response.supplier.VcGetpurchaseorderlistResponse;
 import com.jd.open.api.sdk.response.supplier.VcGetwaredeliverdistinctlistResponse;
 import com.jd.open.api.sdk.response.supplier.VcReturnOrderListPageGetResponse;
 import com.ruoyi.common.core.domain.BaseIdPo;
-import com.ruoyi.common.utils.SecurityUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpEntity;
@@ -90,6 +90,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -322,9 +323,16 @@ public class JdApiServiceImpl implements JdApiService {
     @DSTransactional
     @Override
     public void initTenantDict() {
-        handleDeliveryCenter();
-        handleComponent();
-        handleReturnStates();
+        try {
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            handleDeliveryCenter();
+            handleComponent();
+            handleReturnStates();
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+
+
         log.info("字典初始化完成");
     }
 
@@ -334,21 +342,43 @@ public class JdApiServiceImpl implements JdApiService {
     @DSTransactional
     @Override
     public void compensatingProductNon() {
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
-        DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
-        List<ProductInfo> productInfoList = productInfoService.list();
-        Map<String, ProductInfo> productInfoMap = productInfoList.stream().collect(Collectors.toMap(ProductInfo::getCustomCode, o -> o, (v1, v2) -> v2));
-        DynamicDataSourceContextHolder.poll();
-
-        jdOrderDetailsService.lambdaQuery().isNull(JdOrderDetails::getProductId).list().forEach(jdOrderDetails -> {
-            Long wareId = jdOrderDetails.getWareId();
-            ProductInfo productInfo = productInfoMap.get(StrUtil.toString(wareId));
-            if (ObjectUtil.isNotNull(productInfo)) {
-                jdOrderDetails.setProductId(productInfo.getId());
-                jdOrderDetailsService.updateById(jdOrderDetails);
+
+        List<JdOrderDetails> list = jdOrderDetailsService.list(q -> q
+                .select(BaseIdPo::getId, JdOrderDetails::getWareId)
+                .isNull(JdOrderDetails::getProductId)
+        );
+
+        if (list.isEmpty()) {
+            return;
+        }
+
+        Map<String, Long> productMap;
+
+        try {
+            DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
+            Set<String> wareIdSet = list.stream().map(item -> item.getWareId().toString()).collect(Collectors.toSet());
+            productMap = productInfoService.mapKV(ProductInfo::getCustomCode, ProductInfo::getId,
+                    q -> q.in(ProductInfo::getCustomCode, wareIdSet));
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+
+        List<JdOrderDetails> updateList = list.stream().filter(item -> {
+            Long productId = productMap.get(item.getWareId().toString());
+            if (productId == null) {
+                return false;
             }
-        });
-        SecurityUtils.clearTenantId();
+
+            item.setProductId(productId);
+            return true;
+        }).collect(Collectors.toList());
+
+        if (updateList.isEmpty()) {
+            return;
+        }
+
+        jdOrderDetailsService.updateBatchById(updateList);
+
         log.info("补偿商品id完成");
     }
 
@@ -372,46 +402,48 @@ public class JdApiServiceImpl implements JdApiService {
      * 处理刷新token数据
      */
     private void handleRefreshDate() {
-        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
+
+        Date endDate = new Date();
+        Date startDate = DateUtil.offsetMonth(endDate, -3);
+
+        //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
+        List<JdOrder> jdOrders = jdOrderService.list(q -> q
+                .notIn(JdOrder::getState, notIn)
+                .between(JdOrder::getCreatedDate, startDate, endDate)
+                .orderByDesc(JdOrder::getCreatedDate)
+        );
+
+        if (CollectionUtil.isEmpty(jdOrders)) {
+            return;
+        }
+
+        Map<Long, JdOrder> jdOrderMap = jdOrders.stream().collect(Collectors.toMap(JdOrder::getOrderId, Function.identity()));
+
+        // 2.按50个订单查询京东订单状态
+        List<List<JdOrder>> splitJdOrder = ListUtil.split(jdOrders, 50);
+
         try {
-            //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
-            List<JdOrder> jdOrderPage = jdOrderService.lambdaQuery().notIn(JdOrder::getState, notIn).orderByDesc(JdOrder::getCreatedDate).list();
-            if (CollectionUtil.isEmpty(jdOrderPage)) {
-                return;
-            }
-            int pageIndex = 1;
-            int pageSize = 30;
-            List<List<JdOrder>> pages = new ArrayList<>();
-            for (int i = 0; i < jdOrderPage.size(); i += pageSize) {
-                int endIndex = Math.min(i + pageSize, jdOrderPage.size());
-                List<JdOrder> page = jdOrderPage.subList(i, endIndex);
-                pages.add(page);
-            }
-            int totalPage = pages.size();
 
-            do {
-                //2.按每30个订单查询京东订单状态
-                List<JdOrder> records = pages.get(pageIndex - 1);
+            for (List<JdOrder> orders : splitJdOrder) {
+                List<Long> orderIdList = orders.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
+                List<PurchaseOrderDto> jdOrderInfo = getJdOrderInfo(null, null, orderIdList);
+                List<JdOrder> jdOrderList = BeanUtil.copyToList(jdOrderInfo, JdOrder.class);
 
-                List<Long> orderIds = records.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
-                JOSOrderResultDto josOrderResultDto = getJdOrderInfo(1, pageSize + 20, records.get(0).getCreatedDate(), DateUtil.offsetDay(records.get(0).getCreatedDate(), 90), orderIds);
-                List<PurchaseOrderDto> purchaseOrderList = josOrderResultDto.getPurchaseOrderList();
-                List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderList, JdOrder.class);
-                Map<Long, JdOrder> collect = records.stream().collect(Collectors.toMap(JdOrder::getOrderId, o -> o));
                 //3.更新订单信息
                 for (JdOrder jdOrder : jdOrderList) {
-                    Long id = collect.get(jdOrder.getOrderId()).getId();
+                    Long id = jdOrderMap.get(jdOrder.getOrderId()).getId();
                     jdOrder.setId(id);
                     if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
                         List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
+
                         //重新插入明细
                         boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
-                        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
+
                         //获取当前明细记录
-                        List<JdOrderDetails> dbJdOrderDetails = jdOrderDetailsService.lambdaQuery().eq(JdOrderDetails::getJdOrderId, id).list();
+                        List<JdOrderDetails> dbJdOrderDetails = jdOrderDetailsService.list(q -> q.eq(JdOrderDetails::getJdOrderId, id));
                         Table<Long, Long, JdOrderDetails> jdOrderDetailsTable = HashBasedTable.create();
                         jdOrderDetailsList.forEach(item -> jdOrderDetailsTable.put(item.getOrderId(), item.getWareId(), item));
+
                         for (JdOrderDetails dbJdOrderDetail : dbJdOrderDetails) {
                             JdOrderDetails onlineJdOrderDetails = jdOrderDetailsTable.get(dbJdOrderDetail.getOrderId(), dbJdOrderDetail.getWareId());
                             dbJdOrderDetail.setDeliverCenterId(onlineJdOrderDetails.getDeliverCenterId());
@@ -429,6 +461,7 @@ public class JdApiServiceImpl implements JdApiService {
                             dbJdOrderDetail.setExDesc(onlineJdOrderDetails.getExDesc());
                             dbJdOrderDetail.setHandleStatus(onlineJdOrderDetails.getHandleStatus());
                         }
+
                         if (hasExFlag) {
                             jdOrder.setHasEx(RunParamConstant.EXCEPTION);
                             jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
@@ -436,71 +469,74 @@ public class JdApiServiceImpl implements JdApiService {
                             jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
                             jdOrder.setHandleStatus(null);
                         }
-                        jdOrderDetailsService.saveOrUpdateBatch(dbJdOrderDetails);
+
+                        jdOrderDetailsService.updateBatchById(dbJdOrderDetails);
                     }
-                    jdOrderService.saveOrUpdate(jdOrder);
+                    jdOrderService.updateById(jdOrder);
                 }
-                pageIndex++;
-            } while (pageIndex <= totalPage);
+
+            }
+
         } catch (Exception e) {
             log.error("刷新京东状态失败", e);
-        } finally {
-            DynamicDataSourceContextHolder.clear();
-            SecurityUtils.clearTenantId();
         }
     }
 
     private boolean dealOrderDetail(JdOrder jdOrder, List<JdOrderDetails> jdOrderDetailsList) throws Exception {
-        VcGetdetailbyorderidRequest request = new VcGetdetailbyorderidRequest();
-        request.setOrderId(jdOrder.getOrderId());
-        request.setIsPage(false);
-        VcGetdetailbyorderidResponse response = jdClient.execute(request);
-        JOSDetailResultDto josDetailResultDto = response.getJosDetailResultDto();
-        List<PurchaseAllocationDetailDto> purchaseAllocationDetailList = ObjectUtil.isNull(josDetailResultDto) ? new ArrayList<>()
-                : josDetailResultDto.getPurchaseAllocationDetailList();
-
-        List<JdOrderDetails> jdOrderDetails = BeanUtil.copyToList(purchaseAllocationDetailList, JdOrderDetails.class);
 
         DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
         AtomicBoolean hasExFlag = new AtomicBoolean(false);
-        jdOrderDetails.forEach(item -> {
-            item.setJdOrderId(jdOrder.getId());
-            //产品编码
-            Long wareId = item.getWareId();
-            List<ProductInfo> list = productInfoService.lambdaQuery().eq(ProductInfo::getCustomCode, wareId).list();
-            if (CollectionUtil.isEmpty(list)) {
-                //TODO 没有产品触发异常;
-            } else {
-                item.setProductId(list.get(0).getId());
-            }
-            if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
-                //如果京东采购单状态 = 已完成  &  明细数据中存在 实收 != 回告 & 分流类型 == 仓库发货(10),则给京东采购单打上【异常】标记
-                //如果实收>回告,则:给对应的明细打上【多货】标记;如果实收<回告,则:给对应的明细打上【少货】标记
-                if (
-                        ObjectUtil.isNotNull(item.getActualNum())
-                                && ObjectUtil.isNotNull(item.getConfirmNum())
-                                && ObjectUtil.isNotEmpty(jdOrder.getDiversionType())
-                                && item.getActualNum().compareTo(item.getConfirmNum()) != 0
-                                && jdOrder.getDiversionType() == 10
-                ) {
-                    String exDesc;
-                    if (item.getActualNum().compareTo(item.getConfirmNum()) > 0) {
-                        exDesc = RunParamConstant.EXCESS;
+
+        try {
+            VcGetdetailbyorderidRequest request = new VcGetdetailbyorderidRequest();
+            request.setOrderId(jdOrder.getOrderId());
+            request.setIsPage(false);
+            VcGetdetailbyorderidResponse response = jdClient.execute(request);
+            JOSDetailResultDto josDetailResultDto = response.getJosDetailResultDto();
+            List<PurchaseAllocationDetailDto> purchaseAllocationDetailList = josDetailResultDto.getPurchaseAllocationDetailList();
+            List<JdOrderDetails> jdOrderDetails = BeanUtil.copyToList(purchaseAllocationDetailList, JdOrderDetails.class);
+
+            jdOrderDetails.forEach(item -> {
+                item.setJdOrderId(jdOrder.getId());
+                //产品编码
+                Long wareId = item.getWareId();
+                List<ProductInfo> list = productInfoService.lambdaQuery().eq(ProductInfo::getCustomCode, wareId).list();
+                if (CollectionUtil.isEmpty(list)) {
+                    //TODO 没有产品触发异常;
+                } else {
+                    item.setProductId(list.get(0).getId());
+                }
+                if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
+                    //如果京东采购单状态 = 已完成  &  明细数据中存在 实收 != 回告 & 分流类型 == 仓库发货(10),则给京东采购单打上【异常】标记
+                    //如果实收>回告,则:给对应的明细打上【多货】标记;如果实收<回告,则:给对应的明细打上【少货】标记
+                    if (
+                            ObjectUtil.isNotNull(item.getActualNum())
+                                    && ObjectUtil.isNotNull(item.getConfirmNum())
+                                    && ObjectUtil.isNotEmpty(jdOrder.getDiversionType())
+                                    && item.getActualNum().compareTo(item.getConfirmNum()) != 0
+                                    && jdOrder.getDiversionType() == 10
+                    ) {
+                        String exDesc;
+                        if (item.getActualNum().compareTo(item.getConfirmNum()) > 0) {
+                            exDesc = RunParamConstant.EXCESS;
+                        } else {
+                            exDesc = RunParamConstant.SHORTAGE;
+                        }
+                        item.setHasEx(RunParamConstant.EXCEPTION);
+                        item.setExDesc(exDesc);
+                        item.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
+                        hasExFlag.set(true);
                     } else {
-                        exDesc = RunParamConstant.SHORTAGE;
+                        item.setHasEx(null);
+                        item.setExDesc(null);
+                        item.setHandleStatus(null);
                     }
-                    item.setHasEx(RunParamConstant.EXCEPTION);
-                    item.setExDesc(exDesc);
-                    item.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
-                    hasExFlag.set(true);
-                } else {
-                    item.setHasEx(null);
-                    item.setExDesc(null);
-                    item.setHandleStatus(null);
                 }
-            }
-        });
-        jdOrderDetailsList.addAll(jdOrderDetails);
+            });
+            jdOrderDetailsList.addAll(jdOrderDetails);
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
         return hasExFlag.get();
     }
 
@@ -510,8 +546,6 @@ public class JdApiServiceImpl implements JdApiService {
     private void handleComponent() {
         componentDictTypeMap.forEach((k, v) -> {
             VcGetcomponentlistRequest request = new VcGetcomponentlistRequest();
-            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-            SecurityUtils.setTenantId(RunParamConstant.tenantId);
             try {
                 request.setType(k);
                 VcGetcomponentlistResponse response = jdClient.execute(request);
@@ -523,16 +557,11 @@ public class JdApiServiceImpl implements JdApiService {
                 for (Component component : arg89) {
                     commonDictDataList.add(new CommonDictData(component.getKey(), component.getName()));
                 }
-                if ("orderAttribute".equals(k)) {
-                    System.out.println(123);
-                }
                 handleDictData(commonDictDataList, dictTenantType);
 
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
-            SecurityUtils.clearTenantId();
-            DynamicDataSourceContextHolder.poll();
         });
     }
 
@@ -542,8 +571,7 @@ public class JdApiServiceImpl implements JdApiService {
     private void handleDeliveryCenter() {
         //获取京东仓库,并存入字典表
         VcGetwaredeliverdistinctlistRequest request = new VcGetwaredeliverdistinctlistRequest();
-        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
+
         try {
             VcGetwaredeliverdistinctlistResponse response = jdClient.execute(request);
 
@@ -558,28 +586,20 @@ public class JdApiServiceImpl implements JdApiService {
         } catch (Exception e) {
             log.error("转换配送中心到字典出现异常", e);
         }
-        SecurityUtils.clearTenantId();
-        DynamicDataSourceContextHolder.poll();
     }
 
     /**
      * 处理jd退货状态字典
      */
     private void handleReturnStates() {
-        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
         try {
             DictTenantType dictTenantType = handleDictType(InitDictConstant.RETURN_STATES, InitDictConstant.RETURN_STATES_LABEL);
             List<CommonDictData> commonDictDataList = new ArrayList<>();
-            returnStatesMap.forEach((k, v) -> {
-                commonDictDataList.add(new CommonDictData(k, v));
-            });
+            returnStatesMap.forEach((k, v) -> commonDictDataList.add(new CommonDictData(k, v)));
             handleDictData(commonDictDataList, dictTenantType);
         } catch (Exception e) {
             log.error("处理jd退货状态字典出现异常", e);
         }
-        SecurityUtils.clearTenantId();
-        DynamicDataSourceContextHolder.poll();
     }
 
     /**
@@ -638,9 +658,6 @@ public class JdApiServiceImpl implements JdApiService {
      * 获取京东订单
      */
     private void saveJdOrder(JdInfoVo jdInfoVo) {
-        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
-
         //获取开始同步的时间
         Date startTime = jdInfoVo.getInitQueryDate();
         Date endTime = new Date();
@@ -691,15 +708,10 @@ public class JdApiServiceImpl implements JdApiService {
 
             //将数据存储到库
             jdOrderService.saveBatch(jdOrderList);
-
-            DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
             jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
 
         } catch (Exception e) {
             log.error("获取京东订单出错:{}", e.getMessage(), e);
-        } finally {
-            SecurityUtils.clearTenantId();
-            DynamicDataSourceContextHolder.clear();
         }
 
     }
@@ -708,8 +720,6 @@ public class JdApiServiceImpl implements JdApiService {
      * 获取京东退货订单
      */
     private void getJdBackOrder(JdInfoVo jdInfoVo) {
-        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
-        SecurityUtils.setTenantId(RunParamConstant.tenantId);
         try {
             Date startTime = jdInfoVo.getInitQueryDate();
             Date endTime = new Date();
@@ -756,20 +766,20 @@ public class JdApiServiceImpl implements JdApiService {
             }
 
             // 赋值产品编码
-            DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
-            Map<String, Long> map = productInfoService.mapKV(ProductInfo::getCustomCode, BaseIdPo::getId,
-                    q -> q.in(ProductInfo::getCustomCode, wareIdSet));
-            JdBackDetailsList.forEach(item -> item.setProductId(map.get(item.getWareId().toString())));
+            try {
+                DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
+                Map<String, Long> map = productInfoService.mapKV(ProductInfo::getCustomCode, BaseIdPo::getId,
+                        q -> q.in(ProductInfo::getCustomCode, wareIdSet));
+                JdBackDetailsList.forEach(item -> item.setProductId(map.get(item.getWareId().toString())));
+            } finally {
+                DynamicDataSourceContextHolder.poll();
+            }
 
-            DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
             jdBackService.saveBatch(jdBackList);
             jdBackDetailsService.saveBatch(JdBackDetailsList);
 
         } catch (Exception e) {
             log.error("获取京东退货订单出错:{}", e.getMessage(), e);
-        } finally {
-            SecurityUtils.clearTenantId();
-            DynamicDataSourceContextHolder.clear();
         }
 
     }
@@ -820,7 +830,15 @@ public class JdApiServiceImpl implements JdApiService {
         }
         VcGetpurchaseorderlistResponse response = jdClient.execute(request);
         validSuccess(response, "获取京东订单信息分页");
-        return response.getJosOrderResultDto();
+        JOSOrderResultDto josOrderResultDto = response.getJosOrderResultDto();
+
+        boolean success = josOrderResultDto.getSuccess();
+        if (!success) {
+            log.error("获取京东订单信息失败:{}", josOrderResultDto.getResultMessage());
+            throw new RuntimeException("获取京东订单信息失败:" + josOrderResultDto.getResultMessage());
+        }
+
+        return josOrderResultDto;
     }
 
     /**

+ 8 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/initializers/JdInitializer.java

@@ -1,8 +1,11 @@
 package com.fjhx.victoriatourist.service.jd.initializers;
 
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.victoriatourist.entity.jd.vo.JdInfoVo;
 import com.fjhx.victoriatourist.service.jd.JdApiService;
 import com.fjhx.victoriatourist.service.jd.constants.RunParamConstant;
+import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.context.annotation.Profile;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -24,8 +27,10 @@ public class JdInitializer {
     @Resource
     private JdApiService jdApiService;
 
-    @Scheduled(initialDelay = 1000, fixedDelay = RunParamConstant.SLEEP_ONE_MINUTE)
+    @Scheduled(fixedDelay = RunParamConstant.SLEEP_ONE_MINUTE)
     public void jdTask() {
+        SecurityUtils.setTenantId(RunParamConstant.tenantId);
+        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
 
         JdInfoVo jdInfoVo = jdApiService.validJdInfo();
 
@@ -44,6 +49,8 @@ public class JdInitializer {
         // 补偿商品id为空
         jdApiService.compensatingProductNon();
 
+        SecurityUtils.clearTenantId();
+        DynamicDataSourceContextHolder.poll();
     }
 
 }