From 77fab501e7db456a5b176902c7d2d727c09b7a9c Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 23 三月 2026 15:36:01 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
---
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java | 189 ++++++++++++++++++----------------------------
1 files changed, 75 insertions(+), 114 deletions(-)
diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
index 7e68557..14af4d5 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -245,23 +245,11 @@
// 保存主表数据
XpElectronicFence xpElectronicFence = new XpElectronicFence();
BeanUtils.copyProperties(dto, xpElectronicFence);
- xpElectronicFence.setStatus(0);
-
- if (dto.getStatus() == 0) {
- xpElectronicFence.setStatus(0);
- } else if (dto.getStatus() == 1) {
- if (dto.getEffectType() == 1) {
- // 设置为启用中
- xpElectronicFence.setStatus(2);
- xpElectronicFence.setEffectTime(LocalDateTime.now());
- } else {
- if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
- // 设置为启用中
- xpElectronicFence.setStatus(2);
- } else {
- xpElectronicFence.setStatus(1);
- }
- }
+ LocalDateTime now = LocalDateTime.now();
+ int targetStatus = resolveFenceStatus(dto.getStatus(), dto.getEffectType(), dto.getEffectTime(), now);
+ xpElectronicFence.setStatus(targetStatus);
+ if (targetStatus == 2 && dto.getEffectType() != null && dto.getEffectType() == 1) {
+ xpElectronicFence.setEffectTime(now);
}
//根据经纬度获取当前城市code
@@ -291,55 +279,9 @@
// 获取拼音首字母并大写
String result = getPinyinInitials(prefix).toUpperCase();
xpElectronicFence.setElectronicNumber(result + "-OP-" + String.format("%04d", xpElectronicFence.getId()));
- if (dto.getStatus() == 0) {
- xpElectronicFence.setStatus(0);
- } else if (dto.getStatus() == 1) {
- if (dto.getEffectType() == 1) {
- // 设置为启用中
- xpElectronicFence.setStatus(2);
- xpElectronicFence.setEffectTime(LocalDateTime.now());
- } else {
- if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
- // 设置为启用中
- xpElectronicFence.setStatus(2);
- } else {
- // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
- Map<String, ? extends Object> maps =
- new ImmutableMap.Builder<String, Long>().
- put("type", 1L)
- .put("id", xpElectronicFence.getId())
- .build();
- QuartzManager.addJob(
- ElectronicEffectJob.class,
- (ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(),
- TimeJobType.ELECTRONIC_EFFECT,
- DateUtils.localDateTimeToDate(dto.getEffectTime()),
- maps
- );
- xpElectronicFence.setStatus(1);
- }
- }
- if (dto.getFailureType() != null && dto.getFailureType() == 2) {
-
- if (dto.getFailureTime().isBefore(LocalDateTime.now())) {
- // 设置待启用
- xpElectronicFence.setStatus(1);
- } else {
- // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
- Map<String, ? extends Object> maps =
- new ImmutableMap.Builder<String, Long>().
- put("type", 2L)
- .put("id", xpElectronicFence.getId())
- .build();
- QuartzManager.addJob(
- ElectronicEffectJob.class,
- (ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(),
- TimeJobType.ELECTRONIC_FAILURE,
- DateUtils.localDateTimeToDate(dto.getFailureTime()),
- maps
- );
- }
- }
+ if (dto.getStatus() == 1) {
+ registerEffectJobIfNeeded(xpElectronicFence.getId(), targetStatus, dto.getEffectType(), dto.getEffectTime(), now);
+ registerFailureJobIfNeeded(xpElectronicFence.getId(), dto.getFailureType(), dto.getFailureTime(), now);
}
this.updateById(xpElectronicFence);
if (xpElectronicFence.getStatus() == 2) {
@@ -444,56 +386,17 @@
// 更新主表数据
XpElectronicFence xpElectronicFence = new XpElectronicFence();
BeanUtils.copyProperties(dto, xpElectronicFence);
- if (dto.getStatus() == 0) {
- xpElectronicFence.setStatus(0);
- } else if (dto.getStatus() == 1) {
- if (dto.getEffectType() == 1) {
- // 立即生效:设置为启用中
- xpElectronicFence.setStatus(2);
- xpElectronicFence.setEffectTime(LocalDateTime.now());
- } else {
- if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
- // 定时生效时间已过:直接设置为启用中
- xpElectronicFence.setStatus(2);
- } else {
- // 定时生效:注册生效定时任务
- QuartzManager.removeJob((ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_EFFECT);
- Map<String, ? extends Object> effectMaps =
- new ImmutableMap.Builder<String, Long>()
- .put("type", 1L)
- .put("id", xpElectronicFence.getId())
- .build();
- QuartzManager.addJob(
- ElectronicEffectJob.class,
- (ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(),
- TimeJobType.ELECTRONIC_EFFECT,
- DateUtils.localDateTimeToDate(dto.getEffectTime()),
- effectMaps
- );
- xpElectronicFence.setStatus(1);
- }
- }
+ LocalDateTime now = LocalDateTime.now();
+ int targetStatus = resolveFenceStatus(dto.getStatus(), dto.getEffectType(), dto.getEffectTime(), now);
+ xpElectronicFence.setStatus(targetStatus);
+ if (targetStatus == 2 && dto.getEffectType() != null && dto.getEffectType() == 1) {
+ xpElectronicFence.setEffectTime(now);
}
- // 失效时间处理:独立于 status 判断,只要 failureType=2 就注册失效定时任务
- if (dto.getFailureType() != null && dto.getFailureType() == 2) {
- if (dto.getFailureTime() != null && !dto.getFailureTime().isBefore(LocalDateTime.now())) {
- // 先删除以前的定时任务,再注册新的失效定时任务
- QuartzManager.removeJob((ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE);
- Map<String, ? extends Object> failureMaps =
- new ImmutableMap.Builder<String, Long>()
- .put("type", 2L)
- .put("id", xpElectronicFence.getId())
- .build();
- QuartzManager.addJob(
- ElectronicEffectJob.class,
- (ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(),
- TimeJobType.ELECTRONIC_FAILURE,
- DateUtils.localDateTimeToDate(dto.getFailureTime()),
- failureMaps
- );
- }
+ if (dto.getStatus() == 1 || dto.getStatus() == 2) {
+ registerEffectJobIfNeeded(xpElectronicFence.getId(), targetStatus, dto.getEffectType(), dto.getEffectTime(), now);
+ registerFailureJobIfNeeded(xpElectronicFence.getId(), dto.getFailureType(), dto.getFailureTime(), now);
} else {
- // failureType 不是定时失效,清除可能存在的旧失效定时任务
+ QuartzManager.removeJob((ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_EFFECT);
QuartzManager.removeJob((ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE);
}
//根据经纬度获取当前城市code
@@ -852,6 +755,64 @@
return ids.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
}
+ private int resolveFenceStatus(Integer requestedStatus, Integer effectType, LocalDateTime effectTime, LocalDateTime now) {
+ if (requestedStatus == null) {
+ return 0;
+ }
+ if (requestedStatus == 0) {
+ return 0;
+ }
+ if (requestedStatus == 3) {
+ return 3;
+ }
+ if (effectType != null && effectType == 1) {
+ return 2;
+ }
+ if (effectTime != null && !effectTime.isAfter(now)) {
+ return 2;
+ }
+ return 1;
+ }
+
+ private void registerEffectJobIfNeeded(Long electronicId, Integer targetStatus, Integer effectType,
+ LocalDateTime effectTime, LocalDateTime now) {
+ QuartzManager.removeJob((ElectronicEffectJob.effect + electronicId).toUpperCase(), TimeJobType.ELECTRONIC_EFFECT);
+ if (targetStatus != 1 || effectType == null || effectType == 1 || effectTime == null || !effectTime.isAfter(now)) {
+ return;
+ }
+ Map<String, ? extends Object> effectMaps =
+ new ImmutableMap.Builder<String, Long>()
+ .put("type", 1L)
+ .put("id", electronicId)
+ .build();
+ QuartzManager.addJob(
+ ElectronicEffectJob.class,
+ (ElectronicEffectJob.effect + electronicId).toUpperCase(),
+ TimeJobType.ELECTRONIC_EFFECT,
+ DateUtils.localDateTimeToDate(effectTime),
+ effectMaps
+ );
+ }
+
+ private void registerFailureJobIfNeeded(Long electronicId, Integer failureType, LocalDateTime failureTime, LocalDateTime now) {
+ QuartzManager.removeJob((ElectronicEffectJob.failure + electronicId).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE);
+ if (failureType == null || failureType != 2 || failureTime == null || failureTime.isBefore(now)) {
+ return;
+ }
+ Map<String, ? extends Object> failureMaps =
+ new ImmutableMap.Builder<String, Long>()
+ .put("type", 2L)
+ .put("id", electronicId)
+ .build();
+ QuartzManager.addJob(
+ ElectronicEffectJob.class,
+ (ElectronicEffectJob.failure + electronicId).toUpperCase(),
+ TimeJobType.ELECTRONIC_FAILURE,
+ DateUtils.localDateTimeToDate(failureTime),
+ failureMaps
+ );
+ }
+
/**
* 判断点是否在多边形内
*
--
Gitblit v1.7.1