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