From 8185191dd17740800237dd8b81051b7eeb289fcb Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 12 二月 2026 15:25:06 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
---
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 104 insertions(+), 10 deletions(-)
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
index 8028cc6..38a6509 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.google.common.collect.ImmutableMap;
import com.xiaopeng.api.model.map.XpGeoFencingPolygon;
import com.xiaopeng.api.model.map.XpGeoFencingProhibitedPolygon;
import com.xiaopeng.api.model.operation.XpElectronicFence;
@@ -9,11 +10,15 @@
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.common.core.utils.DateUtils;
import com.xiaopeng.common.core.utils.bean.BeanUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.operation.constant.I18nKeyConstant;
import com.xiaopeng.api.dto.operation.ElectronicFenceAddDto;
import com.xiaopeng.api.dto.operation.ElectronicFenceUpdateDto;
+import com.xiaopeng.operation.job.base.QuartzManager;
+import com.xiaopeng.operation.job.base.TimeJobType;
+import com.xiaopeng.operation.job.jobs.ElectronicEffectJob;
import com.xiaopeng.operation.mapper.XpElectronicFenceAreaMapper;
import com.xiaopeng.operation.mapper.XpElectronicFenceMapper;
import com.xiaopeng.operation.mapper.XpPointMapper;
@@ -28,13 +33,11 @@
import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -63,7 +66,7 @@
public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) {
PageInfo<XpElectronicFence> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List<XpElectronicFence> list = this.baseMapper.pageList(pageInfo, query);
- if (list.isEmpty()){
+ if (list.isEmpty()) {
return new PageInfo<>();
}
List<Long> electronicIds = list.stream().map(XpElectronicFence::getId).collect(Collectors.toList());
@@ -72,7 +75,7 @@
.collect(Collectors.groupingBy(XpElectronicFenceArea::getElectronicId));
for (XpElectronicFence xpElectronicFence : list) {
List<XpElectronicFenceArea> xpElectronicFenceAreas = electronicFenceAreaMap.get(xpElectronicFence.getId());
- if (xpElectronicFenceAreas != null){
+ if (xpElectronicFenceAreas != null) {
xpElectronicFence.setOperatingAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 1).count());
xpElectronicFence.setProhibitedAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 2).count());
@@ -114,6 +117,7 @@
// 保存主表数据
XpElectronicFence xpElectronicFence = new XpElectronicFence();
BeanUtils.copyProperties(dto, xpElectronicFence);
+ xpElectronicFence.setStatus(0);
if (dto.getStatus() == 0) {
xpElectronicFence.setStatus(0);
@@ -126,7 +130,6 @@
if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
// 设置为启用中
xpElectronicFence.setStatus(2);
-
} else {
xpElectronicFence.setStatus(1);
}
@@ -134,6 +137,58 @@
}
xpElectronicFence.setCityCode(dto.getCityCode());
this.save(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 {
+ // 添加定时任务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.getEffectTime()),
+ maps
+ );
+ xpElectronicFence.setStatus(1);
+ }
+ }
+ }
+ this.updateById(xpElectronicFence);
if (xpElectronicFence.getStatus() == 2) {
// 设置电子围栏ID并保存区域数据
for (XpElectronicFenceArea area : newElectronicFenceAreas) {
@@ -225,6 +280,46 @@
// 设置为启用中
xpElectronicFence.setStatus(2);
} else {
+ // 先删除以前的定时任务
+ QuartzManager.removeJob((ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_EFFECT);
+
+ // 添加定时任务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 {
+ // 先删除以前的定时任务
+ QuartzManager.removeJob((ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE);
+ // 添加定时任务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.getEffectTime()),
+ maps
+ );
xpElectronicFence.setStatus(1);
}
}
@@ -249,7 +344,7 @@
query.addCriteria(Criteria.where("fenceId").is(String.valueOf(xpElectronicFence.getId())));
query.addCriteria(Criteria.where("areaId").is(String.valueOf(newElectronicFenceArea.getId())));
XpGeoFencingPolygon old = mongoTemplate.findOne(query, XpGeoFencingPolygon.class);
- if (old==null){
+ if (old == null) {
XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
xpGeoFencingPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
xpGeoFencingPolygon.setName(xpElectronicFence.getElectronicName());
@@ -259,7 +354,7 @@
GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
xpGeoFencingPolygon.setPoints(geoJsonPolygon);
mongoTemplate.insert(xpGeoFencingPolygon);
- }else{
+ } else {
// 如果存在,则更新已有文档
old.setFenceId(String.valueOf(xpElectronicFence.getId()));
old.setName(xpElectronicFence.getElectronicName());
@@ -280,7 +375,7 @@
query.addCriteria(Criteria.where("fenceId").is(String.valueOf(xpElectronicFence.getId())));
query.addCriteria(Criteria.where("areaId").is(String.valueOf(newElectronicFenceArea.getId())));
XpGeoFencingProhibitedPolygon old = mongoTemplate.findOne(query, XpGeoFencingProhibitedPolygon.class);
- if (old==null) {
+ if (old == null) {
XpGeoFencingProhibitedPolygon xpGeoFencingProhibitedPolygon = new XpGeoFencingProhibitedPolygon();
xpGeoFencingProhibitedPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
xpGeoFencingProhibitedPolygon.setName(xpElectronicFence.getElectronicName());
@@ -289,7 +384,7 @@
GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
xpGeoFencingProhibitedPolygon.setPoints(geoJsonPolygon);
mongoTemplate.save(xpGeoFencingProhibitedPolygon);
- }else{
+ } else {
old.setFenceId(String.valueOf(xpElectronicFence.getId()));
old.setName(xpElectronicFence.getElectronicName());
old.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
@@ -479,7 +574,6 @@
}
/**
- *
* @return
*/
@Override
--
Gitblit v1.7.1