diff --git a/maven-cloudwalk-legacy-public/cloudwalk-common-result/src/main/java/cn/cloudwalk/cloud/utils/BeanCopyUtils.java b/maven-cloudwalk-legacy-public/cloudwalk-common-result/src/main/java/cn/cloudwalk/cloud/utils/BeanCopyUtils.java index a8e1b861..1e918c72 100644 --- a/maven-cloudwalk-legacy-public/cloudwalk-common-result/src/main/java/cn/cloudwalk/cloud/utils/BeanCopyUtils.java +++ b/maven-cloudwalk-legacy-public/cloudwalk-common-result/src/main/java/cn/cloudwalk/cloud/utils/BeanCopyUtils.java @@ -34,12 +34,11 @@ public static T copyProperties(Object source, Class targetClazz) { /* 34 */ T target = null; try { /* 36 */ target = targetClazz.getDeclaredConstructor().newInstance(); -/* 37 */ BeanUtils.copyProperties(source, target); -/* 38 */ } catch (Exception e) { -/* 39 */ throw new RuntimeException(e); +/* 37 */ } catch (ReflectiveOperationException e) { +/* 38 */ throw new RuntimeException(e); } - -/* 42 */ return target; +/* 40 */ BeanUtils.copyProperties(source, target); +/* 41 */ return target; } @@ -102,10 +101,10 @@ for (V source : list) { E target = null; try { target = clazz.getDeclaredConstructor().newInstance(); -BeanUtils.copyProperties(source, target); -} catch (Exception e) { +} catch (ReflectiveOperationException e) { throw new RuntimeException(e); } +BeanUtils.copyProperties(source, target); result.add(target); } diff --git a/maven-cloudwalk-legacy-public/cloudwalk-common-serial/src/main/java/cn/cloudwalk/serial/worker/SnowFlakeSerialCode.java b/maven-cloudwalk-legacy-public/cloudwalk-common-serial/src/main/java/cn/cloudwalk/serial/worker/SnowFlakeSerialCode.java index 58366731..d92120d1 100644 --- a/maven-cloudwalk-legacy-public/cloudwalk-common-serial/src/main/java/cn/cloudwalk/serial/worker/SnowFlakeSerialCode.java +++ b/maven-cloudwalk-legacy-public/cloudwalk-common-serial/src/main/java/cn/cloudwalk/serial/worker/SnowFlakeSerialCode.java @@ -13,6 +13,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -39,6 +41,7 @@ import org.springframework.data.redis.core.RedisTemplate; public class SnowFlakeSerialCode implements UUIDSerial { +private final Logger log = LoggerFactory.getLogger(getClass()); private static final int LOCK_TRY_MAX_TIME = 5; private static final int THREAD_SLEEP_TIME = 5; /* 44 */ private static final Integer MAX_NODE_ID = Integer.valueOf(31); @@ -218,7 +221,8 @@ return true; try { TimeUnit.SECONDS.sleep(5L); } catch (InterruptedException e) { -e.printStackTrace(); +Thread.currentThread().interrupt(); +this.log.warn("获取雪花 Redis 锁等待被中断", e); } diff --git a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/dao/AcsElevatorCodeDao.java b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/dao/AcsElevatorCodeDao.java index 07602358..1c14aaf6 100644 --- a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/dao/AcsElevatorCodeDao.java +++ b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/dao/AcsElevatorCodeDao.java @@ -3,6 +3,7 @@ package cn.cloudwalk.elevator.codeElevatorArea.dao; import cn.cloudwalk.cloud.exception.ServiceException; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeDTO; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; +import java.util.List; public interface AcsElevatorCodeDao { Integer insertNew(AcsElevatorCodeDTO paramAcsElevatorCodeDTO) throws ServiceException; @@ -12,4 +13,6 @@ public interface AcsElevatorCodeDao { AcsElevatorCodeResultDTO get(AcsElevatorCodeDTO paramAcsElevatorCodeDTO); AcsElevatorCodeResultDTO getFirstByParentId(String paramString); + + List listByZoneIds(List zoneIds); } diff --git a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeDaoImpl.java b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeDaoImpl.java index 2b9658c2..6dd5be9e 100644 --- a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeDaoImpl.java +++ b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeDaoImpl.java @@ -5,6 +5,7 @@ import cn.cloudwalk.elevator.codeElevatorArea.dao.AcsElevatorCodeDao; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeDTO; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; import cn.cloudwalk.elevator.codeElevatorArea.mapper.AcsElevatorCodeMapper; +import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Repository; @@ -28,4 +29,8 @@ public class AcsElevatorCodeDaoImpl implements AcsElevatorCodeDao { public AcsElevatorCodeResultDTO getFirstByParentId(String parentId) { return this.acsElevatorCodeMapper.getFirstByParentId(parentId); } + + public List listByZoneIds(List zoneIds) { + return this.acsElevatorCodeMapper.listByZoneIds(zoneIds); + } } diff --git a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.java b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.java index 553592cf..ac7da30c 100644 --- a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.java +++ b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.java @@ -2,6 +2,8 @@ package cn.cloudwalk.elevator.codeElevatorArea.mapper; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeDTO; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; +import java.util.List; +import org.apache.ibatis.annotations.Param; public interface AcsElevatorCodeMapper { AcsElevatorCodeResultDTO get(AcsElevatorCodeDTO paramAcsElevatorCodeDTO); @@ -11,4 +13,6 @@ public interface AcsElevatorCodeMapper { int updateOld(AcsElevatorCodeDTO paramAcsElevatorCodeDTO); AcsElevatorCodeResultDTO getFirstByParentId(String paramString); + + List listByZoneIds(@Param("zoneIds") List zoneIds); } diff --git a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml index e42dad97..9ac3d30f 100644 --- a/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml +++ b/maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml @@ -25,6 +25,15 @@ and is_first = 1 + + update code_elevator_area diff --git a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java index 278bfe41..0a11fdd0 100644 --- a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java +++ b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/impl/AcsElevatorCodeServiceImpl.java @@ -7,6 +7,10 @@ import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeDTO; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; import cn.cloudwalk.elevator.codeElevatorArea.param.AcsElevatorCodeParam; import cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,4 +50,21 @@ public class AcsElevatorCodeServiceImpl implements AcsElevatorCodeService { public AcsElevatorCodeResultDTO getFirstByParentId(String parentId) throws ServiceException { return this.acsElevatorCodeDao.getFirstByParentId(parentId); } + + public Map mapByZoneIds(List zoneIds) throws ServiceException { + if (zoneIds == null || zoneIds.isEmpty()) { + return Collections.emptyMap(); + } + List list = this.acsElevatorCodeDao.listByZoneIds(zoneIds); + if (list == null || list.isEmpty()) { + return Collections.emptyMap(); + } + Map map = new HashMap<>(list.size() * 2); + for (AcsElevatorCodeResultDTO row : list) { + if (row != null && row.getZoneId() != null) { + map.put(row.getZoneId(), row); + } + } + return map; + } } diff --git a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.java b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.java index 190069a7..a0cbd29f 100644 --- a/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.java +++ b/maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/service/AcsElevatorCodeService.java @@ -3,6 +3,8 @@ package cn.cloudwalk.elevator.codeElevatorArea.service; import cn.cloudwalk.cloud.exception.ServiceException; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; import cn.cloudwalk.elevator.codeElevatorArea.param.AcsElevatorCodeParam; +import java.util.List; +import java.util.Map; public interface AcsElevatorCodeService { Integer insertNew(AcsElevatorCodeParam paramAcsElevatorCodeParam) throws ServiceException; @@ -12,4 +14,10 @@ public interface AcsElevatorCodeService { AcsElevatorCodeResultDTO get(AcsElevatorCodeParam paramAcsElevatorCodeParam) throws ServiceException; AcsElevatorCodeResultDTO getFirstByParentId(String paramString) throws ServiceException; + + /** + * 按区域 ID 批量查询电梯编码,供树形接口一次拉取,避免循环内逐条查询。 + * 不改变 {@link #get} 语义;入参去重由调用方控制。 + */ + Map mapByZoneIds(List zoneIds) throws ServiceException; } diff --git a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java index eff2fbe9..ffb604cf 100644 --- a/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java +++ b/maven-cw-elevator-application/cw-elevator-application-web/src/main/java/cn/cloudwalk/elevator/handler/device/controller/AcsElevatorDeviceGetWayController.java @@ -7,7 +7,6 @@ import cn.cloudwalk.cloud.result.CloudwalkResult; import cn.cloudwalk.cloud.utils.BeanCopyUtils; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeQueryDTO; import cn.cloudwalk.elevator.codeElevatorArea.dto.AcsElevatorCodeResultDTO; -import cn.cloudwalk.elevator.codeElevatorArea.param.AcsElevatorCodeParam; import cn.cloudwalk.elevator.codeElevatorArea.service.AcsElevatorCodeService; import cn.cloudwalk.elevator.common.AbstractCloudwalkController; import cn.cloudwalk.elevator.device.dto.AcsElevatorDeviceQueryFoDTO; @@ -25,7 +24,10 @@ import cn.cloudwalk.elevator.zone.param.ZoneNextTreeParam; import cn.cloudwalk.elevator.zone.result.ZoneTreeResult; import cn.cloudwalk.elevator.zone.service.ZoneService; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.ObjectUtils; @@ -90,6 +92,10 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll CloudwalkResult> query = this.zoneService.tree(zoneNextTreeParam, getCloudwalkContext()); List treeList = (List)query.getData(); + LinkedHashSet zoneIdsForCode = new LinkedHashSet<>(); + collectZoneTreeNodeIds(treeList, zoneIdsForCode); + Map codeByZoneId = + this.elevatorCodeService.mapByZoneIds(new ArrayList<>(zoneIdsForCode)); List treeResultList = new ArrayList<>(); if (treeList != null && treeList.size() > 0) { for (ZoneTreeResult zoneTreeResult : treeList) { @@ -106,9 +112,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll querydTO.setId(floor.getId()); querydTO.setZoneName(floor.getName()); querydTO.setZoneType(floor.getType()); - AcsElevatorCodeParam paramCode = new AcsElevatorCodeParam(); - paramCode.setZoneId(floor.getId()); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(paramCode); + AcsElevatorCodeResultDTO code = codeByZoneId.get(floor.getId()); if (!ObjectUtils.isEmpty(code)) { querydTO.setCode(code.getCode()); querydTO.setIsFirst(code.getIsFirst()); @@ -123,9 +127,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll querydTO.setZoneName(building.getName()); querydTO.setZoneType("FLOOR"); querydTO.setId(building.getId()); - AcsElevatorCodeParam paramCode = new AcsElevatorCodeParam(); - paramCode.setZoneId(zoneTreeResult.getId()); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(paramCode); + AcsElevatorCodeResultDTO code = codeByZoneId.get(zoneTreeResult.getId()); if (!ObjectUtils.isEmpty(code)) { querydTO.setCode(code.getCode()); querydTO.setIsFirst(code.getIsFirst()); @@ -144,9 +146,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll querydTO.setZoneName(floor.getName()); querydTO.setZoneType(floor.getType()); querydTO.setId(floor.getId()); - AcsElevatorCodeParam paramCode = new AcsElevatorCodeParam(); - paramCode.setZoneId(floor.getId()); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(paramCode); + AcsElevatorCodeResultDTO code = codeByZoneId.get(floor.getId()); if (!ObjectUtils.isEmpty(code)) { querydTO.setCode(code.getCode()); querydTO.setIsFirst(code.getIsFirst()); @@ -161,9 +161,7 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll querydTO.setZoneName(zoneTreeResult.getName()); querydTO.setZoneType("FLOOR"); querydTO.setId(zoneTreeResult.getId()); - AcsElevatorCodeParam paramCode = new AcsElevatorCodeParam(); - paramCode.setZoneId(zoneTreeResult.getId()); - AcsElevatorCodeResultDTO code = this.elevatorCodeService.get(paramCode); + AcsElevatorCodeResultDTO code = codeByZoneId.get(zoneTreeResult.getId()); if (!ObjectUtils.isEmpty(code)) { querydTO.setCode(code.getCode()); querydTO.setIsFirst(code.getIsFirst()); @@ -228,4 +226,17 @@ public class AcsElevatorDeviceGetWayController extends AbstractCloudwalkControll this.LOGGER.warn("getKey(39204) 已停用明文密钥下发,调用方应迁移至安全鉴权方式"); return CloudwalkResult.success(result); } + + /** 收集树节点 id,用于与 {@code code_elevator_area.zone_id} 批量对齐查询。 */ + private static void collectZoneTreeNodeIds(List nodes, Set out) { + if (nodes == null || out == null) { + return; + } + for (ZoneTreeResult n : nodes) { + if (StringUtils.isNotBlank(n.getId())) { + out.add(n.getId()); + } + collectZoneTreeNodeIds(n.getChildren(), out); + } + } }