From e8cd57fc46fa84b0c095f7e93cb348c014d06eb4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:00:03 +0800
Subject: [PATCH] 新增管理后台接口,修改小程序流程bug及其他相关功能
---
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java | 98 ++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 81 insertions(+), 17 deletions(-)
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
index d91c63f..5d4810a 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1,17 +1,27 @@
package com.xiaopeng.maintenance.service.impl;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.dto.pushMessage.AliPushMessageDTO;
import com.xiaopeng.api.feignClient.account.SysUserClient;
import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
+import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient;
+import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.account.SysUser;
+import com.xiaopeng.api.model.account.XpOperationsRole;
import com.xiaopeng.api.model.account.XpOperationsUser;
+import com.xiaopeng.api.model.account.XpOperationsUserNotification;
import com.xiaopeng.api.model.maintenance.*;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.common.core.constant.AliPushTypeConstant;
import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.enums.NotificationTypeEnum;
import com.xiaopeng.common.core.enums.TaskTypeEnum;
+import com.xiaopeng.common.core.enums.TaskTypeNotificationEnum;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.constant.I18nKeyConstant;
@@ -25,6 +35,8 @@
import com.xiaopeng.maintenance.model.query.WorkBenchQuery;
import com.xiaopeng.maintenance.model.query.XpTaskRecordPageQuery;
import com.xiaopeng.maintenance.model.vo.*;
+import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService;
+import com.xiaopeng.maintenance.service.IXpTaskRuleService;
import com.xiaopeng.maintenance.service.XpTaskService;
import com.xiaopeng.maintenance.utils.UUIDUtil;
import org.apache.commons.lang3.StringUtils;
@@ -57,22 +69,6 @@
private RedissonClient redissonClient;
@Autowired
private XpErrorTypeMapper errorTypeMapper;
- /**
- * 常规任务类型映射
- */
- private static final Map<String, String> TASK_TYPE_MAP = new java.util.HashMap<>();
-
- static {
- TASK_TYPE_MAP.put("1", "车辆检查");
- TASK_TYPE_MAP.put("2", "车辆充电");
- TASK_TYPE_MAP.put("3", "车辆整备");
- TASK_TYPE_MAP.put("4", "整备洗车");
- TASK_TYPE_MAP.put("5", "车辆维修");
- TASK_TYPE_MAP.put("6", "车辆保养");
- TASK_TYPE_MAP.put("7", "车辆保险到期");
- TASK_TYPE_MAP.put("8", "车辆年检到期");
- TASK_TYPE_MAP.put("9", "车辆运营资质到期");
- }
@Autowired
private XpTaskHandleDetailMapper xpTaskHandleDetailMapper;
@@ -98,6 +94,14 @@
private XpVehicleClient xpVehicleClient;
@Autowired
private XpTaskRuleMapper xpTaskRuleMapper;
+ @Autowired
+ private XpAliPushMessageClient xpAliPushMessageClient;
+ @Autowired
+ private XpOperationUserNotificationClient xpOperationUserNotificationClient;
+ @Autowired
+ private IXpTaskRuleRoleService xpTaskRuleRoleService;
+ @Autowired
+ private IXpTaskRuleService xpTaskRuleService;
@Override
public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) {
@@ -162,14 +166,74 @@
xpTask.setTaskDescription(dto.getTaskDescription());
// todo 获取车辆当前位置
// xpTask.setVehicleLocation();
-// xpTask.setVehicleId();
+ xpTask.setVehicleId(dto.getId());
// xpTask.setVehicleLon();
// xpTask.setVehicleLat();
xpTask.setReportUserId(xpOperationsUser.getId());
xpTask.setReportTime(LocalDateTime.now());
xpTask.setStatus(0);
xpTask.setCreateBy(xpOperationsUser.getNickName());
+ XpTaskRule taskRule = xpTaskRuleService.lambdaQuery().last("limit 1").one();
+ XpTaskRuleRole taskRuleRole = xpTaskRuleRoleService.lambdaQuery().eq(XpTaskRuleRole::getRuleType, 9).last("limit 1").one();
+ if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) {
+ throw new ServiceException("未配置车辆事故任务分配规则", I18nKeyConstant.TASK_RULE_NOT_CONFIG);
+ }
+ R<List<XpOperationsRole>> xpOperationsRoleResult = xpOperationUserClient.getXpOperationsRoleByRoleId(taskRuleRole.getRoleId());
+ if (CollUtil.isNotEmpty(xpOperationsRoleResult.getData())) {
+ List<Long> userIds = xpOperationsRoleResult.getData().stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toList());
+ xpTask.setHandleUserId(StringUtils.join(userIds, ","));
+ }
this.save(xpTask);
+
+ //发送消息通知
+ List<Long> userIds = Arrays.stream(xpTask.getHandleUserId().split(",")).map(Long::valueOf).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(userIds)) {
+ R<List<XpOperationsUser>> xpOperationUserResult = xpOperationUserClient.listByIds(userIds);
+ List<XpOperationsUser> data = xpOperationUserResult.getData();
+ if (CollUtil.isNotEmpty(data)) {
+ R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(dto.getId());
+ XpVehicle vehicle = xpVehicleR.getData();
+ String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : "";
+ // 车辆${车牌号}在${车辆位置信息}发生了紧急事故,请在${到达现场限时}内到达现场!${APP链接}
+ String content = String.format("车辆%s在%s发生了紧急事故,请在%d分钟内到达现场!", plateNumber, xpTask.getVehicleLocation(), taskRule.getProcessingTimeLimit());
+ List<XpOperationsUserNotification> notifications = data.stream().map(item -> {
+ XpOperationsUserNotification notification = new XpOperationsUserNotification();
+ notification.setOperationsUserId(item.getId());
+ notification.setNotificationContent(content);
+ notification.setReadStatus(0);
+ notification.setCreateTime(LocalDateTime.now());
+ return notification;
+ }).collect(Collectors.toList());
+ xpOperationUserNotificationClient.addNotificationBatch(notifications);
+ // 发送阿里云推送
+ Map<Integer, List<XpOperationsUser>> operationUserMap = data.stream().collect(Collectors.groupingBy(XpOperationsUser::getDeviceType));
+ for (Map.Entry<Integer, List<XpOperationsUser>> integerListEntry : operationUserMap.entrySet()) {
+ List<XpOperationsUser> value = integerListEntry.getValue();
+ pushAliMessage(value, content, xpTask);
+ }
+ }
+ }
+ }
+
+ /**
+ * 推送阿里云通知
+ * @param data
+ * @param content
+ * @param xpTask
+ */
+ private void pushAliMessage(List<XpOperationsUser> data, String content, XpTask xpTask) {
+ String account = data.stream().map(XpOperationsUser::getPhoneNumber).filter(Objects::nonNull).collect(Collectors.joining(","));
+ Map<String, Object> param = new HashMap<>();
+ param.put("content", content);
+ param.put("strategy", NotificationTypeEnum.ACCIDENT_NEW.getCode());
+ param.put("type", TaskTypeNotificationEnum.ACCIDENT_TASK.getCode());
+ param.put("id", xpTask.getId().toString());
+ xpAliPushMessageClient.pushMessage(AliPushMessageDTO.builder()
+ .body(JSONObject.toJSONString(param))
+ .account(account).title("车辆事故警示")
+ .pushType(AliPushTypeConstant.NOTICE)
+ .deviceType(data.get(0).getDeviceType())
+ .build());
}
@Override
--
Gitblit v1.7.1