Parcourir la source

fix: 修改加锁逻辑

luofeiyun il y a 2 semaines
Parent
commit
efa442001a

+ 8 - 13
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -1,6 +1,5 @@
 package com.yc.ship.module.product.api;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
@@ -68,20 +67,16 @@ public class VoyageApiImpl implements VoyageApi{
 
         Long voyageId = reqDTO.getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                Integer type = reqDTO.getType();//判断是分销商还是门店下单 1:分销商,2:门店
-                if (type == DistributorOrStoreEnum.DISTRIBUTOR.getValue()) {//分销商下单,当前阶段不考虑门店下单
-                    //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
-                    //初定扣分销商库存
-                    preReduceStockDistributor(reqDTO);
-                }
+            lock.lock(60, TimeUnit.SECONDS);
+            Integer type = reqDTO.getType();//判断是分销商还是门店下单 1:分销商,2:门店
+            if (type == DistributorOrStoreEnum.DISTRIBUTOR.getValue()) {//分销商下单,当前阶段不考虑门店下单
+                //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
+                //初定扣分销商库存
+                preReduceStockDistributor(reqDTO);
             }
-        }catch (ServiceException e) {
-            log.error("订单初定扣库存失败:",e);
-        }catch (Exception e) {
-            log.error("订单初定扣库存失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();

+ 20 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java

@@ -10,6 +10,9 @@ import com.yc.ship.framework.excel.core.util.ExcelUtils;
 import com.yc.ship.module.product.controller.admin.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.service.voyage.VoyageService;
+import com.yc.ship.module.resource.api.dto.ResourceRouteRespDTO;
+import com.yc.ship.module.resource.api.route.RouteApi;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
 import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
 import com.yc.ship.module.resource.service.route.ResourceRouteService;
@@ -46,6 +49,9 @@ public class VoyageController {
     @Resource
     private ResourceRouteService routeService;
 
+    @Resource
+    private RouteApi routeApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建航次管理")
     @PreAuthorize("@ss.hasPermission('product:voyage:create')")
@@ -117,7 +123,20 @@ public class VoyageController {
     @Operation(summary = "获得资源管理-航次列表-日历")
     public CommonResult<List<VoyageRespVO>> getVoyageListCalendar(VoyageCalendarReqVO reqVO) {
         List<VoyageDO> list = voyageService.getListCalendar(reqVO);
-        return success(BeanUtils.toBean(list, VoyageRespVO.class));
+        List<VoyageRespVO> voyageRespVOS = BeanUtils.toBean(list, VoyageRespVO.class);
+
+        List<Long> shipIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getShipId);
+        List<ResourceShipDO> shipList = shipService.getList(shipIds);
+        Map<Long, ResourceShipDO> shipDOMap = CollectionUtils.convertMap(shipList, ResourceShipDO::getId);
+
+        List<Long> routeIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getRouteId);
+        Map<Long, RouteRespDTO> longRouteRespDTOMap = routeApi.queryRoute(routeIds);
+        voyageRespVOS.stream().forEach(item -> {
+            item.setRouteName(longRouteRespDTOMap.get(item.getRouteId()).getName());
+            item.setRouteResp(longRouteRespDTOMap.get(item.getRouteId()));
+            item.setShipName(shipDOMap.get(item.getShipId()).getName());
+        });
+        return success(voyageRespVOS);
     }
 
     //根据游轮ID获取上架的航次列表

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageRespVO.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.yc.ship.framework.excel.core.annotations.DictFormat;
 import com.yc.ship.framework.excel.core.convert.DictConvert;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -35,6 +36,9 @@ public class VoyageRespVO {
     @ExcelProperty("航线")
     private Long routeId;
 
+    @Schema(description = "航线对象")
+    private RouteRespDTO routeResp;
+
     @Schema(description = "登船时间")
     @ExcelProperty("登船时间")
     private LocalDateTime boardingTime;

+ 43 - 51
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java

@@ -1,10 +1,8 @@
 package com.yc.ship.module.product.service.voyage;
 
 import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.IdUtil;
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
@@ -16,9 +14,7 @@ import com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
-import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.product.enums.YesOrNoEnum;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
 import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
@@ -113,55 +109,51 @@ public class VoyageServiceImpl implements VoyageService {
 
         VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                if(stockDO != null) {
-                    voyageStockMapper.updateById(voyageStockDO);
-                }else {
-                    //新增时添加统计数据
-                    List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
-                    int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
-                    BigDecimal sum = BigDecimal.valueOf(intSum);
-                    voyageStockDO.setTotalNum(sum);
-                    voyageStockDO.setShareNum(BigDecimal.ZERO);
-                    voyageStockDO.setRealTotalNum(sum);
-                    voyageStockDO.setNotShelfNum(sum);
-                    voyageStockDO.setShelfedNum(BigDecimal.ZERO);
-                    voyageStockDO.setBookNum(BigDecimal.ZERO);
-                    voyageStockDO.setCanSellNum(BigDecimal.ZERO);
-                    voyageStockDO.setVirtualNum(BigDecimal.ZERO);
-                    voyageStockDO.setOversoldNum(BigDecimal.ZERO);
-                    voyageStockDO.setSurplusNum(sum);
-                    voyageStockDO.setVoyageId(voyageId);
-                    voyageStockMapper.insert(voyageStockDO);
-                    //添加库存详情
-                    List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
-                    list.stream().forEach(item -> {
-                        VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
-                        stockDetailDO.setVoyageId(voyageId);
-                        stockDetailDO.setRoomModelId(item.getRoomModelId());
-                        stockDetailDO.setRoomModelName(item.getRoomModelName());
-                        stockDetailDO.setFloor(item.getFloor());
-                        stockDetailDO.setTotalNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setRealTotalNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setShelfNum(BigDecimal.ZERO);
-                        stockDetailDO.setNotShelfNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setShelfedNum(BigDecimal.ZERO);
-                        stockDetailDO.setBookNum(BigDecimal.ZERO);
-                        stockDetailDO.setCanSellNum(BigDecimal.ZERO);
-                        stockDetailDO.setOversoldNum(BigDecimal.ZERO);
-                        stockDetailDO.setVirtualNum(BigDecimal.ZERO);
-                        stockDetailDO.setSurplusNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDOS.add(stockDetailDO);
-                    });
-                    voyageStockDetailMapper.insertBatch(stockDetailDOS);
-                }
+            lock.lock(60, TimeUnit.SECONDS);
+            if(stockDO != null) {
+                voyageStockMapper.updateById(voyageStockDO);
+            }else {
+                //新增时添加统计数据
+                List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
+                int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
+                BigDecimal sum = BigDecimal.valueOf(intSum);
+                voyageStockDO.setTotalNum(sum);
+                voyageStockDO.setShareNum(BigDecimal.ZERO);
+                voyageStockDO.setRealTotalNum(sum);
+                voyageStockDO.setNotShelfNum(sum);
+                voyageStockDO.setShelfedNum(BigDecimal.ZERO);
+                voyageStockDO.setBookNum(BigDecimal.ZERO);
+                voyageStockDO.setCanSellNum(BigDecimal.ZERO);
+                voyageStockDO.setVirtualNum(BigDecimal.ZERO);
+                voyageStockDO.setOversoldNum(BigDecimal.ZERO);
+                voyageStockDO.setSurplusNum(sum);
+                voyageStockDO.setVoyageId(voyageId);
+                voyageStockMapper.insert(voyageStockDO);
+                //添加库存详情
+                List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
+                list.stream().forEach(item -> {
+                    VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
+                    stockDetailDO.setVoyageId(voyageId);
+                    stockDetailDO.setRoomModelId(item.getRoomModelId());
+                    stockDetailDO.setRoomModelName(item.getRoomModelName());
+                    stockDetailDO.setFloor(item.getFloor());
+                    stockDetailDO.setTotalNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setRealTotalNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setShelfNum(BigDecimal.ZERO);
+                    stockDetailDO.setNotShelfNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setShelfedNum(BigDecimal.ZERO);
+                    stockDetailDO.setBookNum(BigDecimal.ZERO);
+                    stockDetailDO.setCanSellNum(BigDecimal.ZERO);
+                    stockDetailDO.setOversoldNum(BigDecimal.ZERO);
+                    stockDetailDO.setVirtualNum(BigDecimal.ZERO);
+                    stockDetailDO.setSurplusNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDOS.add(stockDetailDO);
+                });
+                voyageStockDetailMapper.insertBatch(stockDetailDOS);
             }
-        }catch (ServiceException e) {
-            log.error("创建航次失败:",e);
-        }catch (Exception e) {
-            log.error("创建航次失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();

+ 3 - 9
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java

@@ -1,12 +1,10 @@
 package com.yc.ship.module.product.service.voyagestockdetail;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
-import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.product.enums.ProductStockStaticsName;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
 import lombok.extern.slf4j.Slf4j;
@@ -56,8 +54,10 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
         }
         Long voyageId = createReqVO.get(0).getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
+            lock.lock(60, TimeUnit.SECONDS);
             voyageStockDetailMapper.deleteByVoyageId(voyageId);
             List<VoyageStockDetailDO> list = BeanUtils.toBean(createReqVO, VoyageStockDetailDO.class);
             List<VoyageStockDetailDO> insertList = new ArrayList<>();
@@ -72,17 +72,11 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
                 }
             });
             return voyageStockDetailMapper.insertBatch(insertList);
-        }catch (ServiceException e) {
-            log.error("库存设置失败:",e);
-        }catch (Exception e) {
-            log.error("库存设置失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();
             }
         }
-        return false;
-
     }
 
     /**

+ 47 - 52
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java

@@ -1,6 +1,5 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
@@ -78,62 +77,58 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
         BigDecimal zero = BigDecimal.ZERO;
         Long voyageId = createReqVO.get(0).getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                Integer type = createReqVO.get(0).getType();
-                //删除分配的房间
-                voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
-                // 分配的房间列表
-                List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
-                createReqVO.stream().forEach(item -> {
-                    if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
-                        roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
-                    }
+            lock.lock(60, TimeUnit.SECONDS);
+            Integer type = createReqVO.get(0).getType();
+            //删除分配的房间
+            voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
+            // 分配的房间列表
+            List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
+            createReqVO.stream().forEach(item -> {
+                if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
+                    roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
+                }
+            });
+            voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
+            //修改或插入库存表
+            List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId, type);
+            if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
+                list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
+                list.stream().forEach(item -> {
+                    item.setBookNum(zero);
                 });
-                voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
-                //修改或插入库存表
-                List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId, type);
-                if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
-                    list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
-                    list.stream().forEach(item -> {
-                        item.setBookNum(zero);
-                    });
-                    if(!CollectionUtils.isAnyEmpty(list)) {
-                        voyageStockDistributeNewMapper.insertBatch(list);
-                    }
-                }else {
-                    Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
-                    Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
-                    List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); //  修改数据
-                    map.keySet().stream().forEach(key -> {
-                        if(existList.contains(key)) { //存在,做修改
-                            VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
-                            voyageStockDistributeNewDO.setNum(map.get(key));
-                            voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
-                            updateList.add(voyageStockDistributeNewDO);
-                        }else { //不存在,做插入
-                            VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
-                            insertList.add(voyageStockDistributeNewDO);
-                        }
-                    });
-                    if(!CollectionUtils.isAnyEmpty(updateList)) {
-                        voyageStockDistributeNewMapper.updateBatch(updateList);
-                    }
-                    if(!CollectionUtils.isAnyEmpty(insertList)) {
-                        voyageStockDistributeNewMapper.insertBatch(insertList);
+                if(!CollectionUtils.isAnyEmpty(list)) {
+                    voyageStockDistributeNewMapper.insertBatch(list);
+                }
+            }else {
+                Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
+                Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
+                List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); //  修改数据
+                map.keySet().stream().forEach(key -> {
+                    if(existList.contains(key)) { //存在,做修改
+                        VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
+                        voyageStockDistributeNewDO.setNum(map.get(key));
+                        voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
+                        updateList.add(voyageStockDistributeNewDO);
+                    }else { //不存在,做插入
+                        VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
+                        insertList.add(voyageStockDistributeNewDO);
                     }
+                });
+                if(!CollectionUtils.isAnyEmpty(updateList)) {
+                    voyageStockDistributeNewMapper.updateBatch(updateList);
+                }
+                if(!CollectionUtils.isAnyEmpty(insertList)) {
+                    voyageStockDistributeNewMapper.insertBatch(insertList);
                 }
-                BigDecimal distributeNum = getDistributeNum(voyageId);
-                voyageStockDetailService.handleShareNum(voyageId, distributeNum);
             }
-        }catch (ServiceException e) {
-            log.error("库存分配失败:",e);
-        }catch (Exception e) {
-            log.error("库存分配失败:",e);
+            BigDecimal distributeNum = getDistributeNum(voyageId);
+            voyageStockDetailService.handleShareNum(voyageId, distributeNum);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();