| | |
| | | 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.account.XpOperationsUserQueryDTO; |
| | | 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.XpFleetOperationsClient; |
| | | import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient; |
| | | 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.XpOperationsUserNotification; |
| | | import com.xiaopeng.api.model.maintenance.*; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | | import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; |
| | | import com.xiaopeng.common.core.constant.AliPushTypeConstant; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.enums.NotificationTypeEnum; |
| | |
| | | import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService; |
| | | import com.xiaopeng.maintenance.service.IXpTaskRuleService; |
| | | import com.xiaopeng.maintenance.service.XpTaskService; |
| | | import com.xiaopeng.maintenance.utils.GDMapGeocodingUtil; |
| | | import com.xiaopeng.maintenance.utils.UUIDUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | |
| | | private IXpTaskRuleRoleService xpTaskRuleRoleService; |
| | | @Autowired |
| | | private IXpTaskRuleService xpTaskRuleService; |
| | | |
| | | @Resource |
| | | private GDMapGeocodingUtil gdMapGeocodingUtil; |
| | | |
| | | @Resource |
| | | private XpFleetVehicleClient xpFleetVehicleClient; |
| | | |
| | | @Resource |
| | | private XpFleetOperationsClient xpFleetOperationsClient; |
| | | |
| | | @Override |
| | | public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) { |
| | |
| | | |
| | | @Override |
| | | public void saveVehicleAccidentError(Long vehicleId) { |
| | | XpTask xpTask = new XpTask(); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); |
| | | xpTask.setTaskCode(code); |
| | | xpTask.setTaskCategory(2); |
| | | // todo 事故类型待客户确定 |
| | | xpTask.setTaskTypeId("1"); |
| | | xpTask.setTaskUrgencyLevel(0); |
| | | xpTask.setTaskDescription("车辆发生异常"); |
| | | XpVehicle vehicle = xpVehicleClient.queryById(xpTask.getVehicleId()).getData(); |
| | | if (vehicle!=null){ |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); |
| | | if (vehiclePosition != null) { |
| | | double x = vehiclePosition.getPoint().getX(); |
| | | double y = vehiclePosition.getPoint().getY(); |
| | | xpTask.setVehicleLon(new BigDecimal(x)); |
| | | xpTask.setVehicleLat(new BigDecimal(y)); |
| | | } |
| | | } |
| | | |
| | | xpTask.setVehicleId(vehicleId); |
| | | // 系统上传异常任务标识 |
| | | xpTask.setReportUserId(0L); |
| | | xpTask.setReportTime(LocalDateTime.now()); |
| | | xpTask.setStatus(0); |
| | | xpTask.setCreateBy("admin"); |
| | | XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData(); |
| | | 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("未配置车辆事故任务分配规则"); |
| | | } |
| | | 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, ",")); |
| | | } |
| | | // 根据事故处理限时配置设置任务截止时间 |
| | | LocalDateTime endTime = LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit()); |
| | | xpTask.setEndTime(endTime); |
| | | this.save(xpTask); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | //查找事故处理人,处理角色和车辆所属的车队 |
| | | Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData(); |
| | | XpOperationsUserQueryDTO dto = new XpOperationsUserQueryDTO(); |
| | | dto.setRoleId(taskRuleRole.getRoleId()); |
| | | List<XpOperationsUserWithRoleVO> data = xpOperationUserClient.queryByConditions(dto).getData(); |
| | | List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData(); |
| | | List<XpOperationsUserWithRoleVO> collect = data.stream().filter(x -> ids.contains(x.getId())).collect(Collectors.toList()); |
| | | String belongUserIds = collect.stream().map(XpOperationsUserWithRoleVO::getId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(",")); |
| | | |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); |
| | | Map<String, String> geocode = gdMapGeocodingUtil.geocode(vehiclePosition.getPoint().getX() + "", vehiclePosition.getPoint().getY() + ""); |
| | | String address = geocode.get("address"); |
| | | |
| | | XpTask task = new XpTask(); |
| | | String taskCode = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); |
| | | task.setTaskCode(taskCode); |
| | | task.setTaskCategory(TaskScheduleConstants.TASK_CATEGORY_ACCIDENT); |
| | | task.setTaskTypeId("8,10"); |
| | | task.setTaskUrgencyLevel(TaskScheduleConstants.URGENCY_LEVEL_P0); |
| | | String taskDescription = "车辆" + vehicle.getPlateNumber() + "在" + address + "发生紧急事故,请在" + taskRule.getProcessingTimeLimit() + "内到达现场!"; |
| | | task.setTaskDescription(taskDescription); |
| | | task.setVehicleId(vehicle.getId()); |
| | | task.setVehicleLocation(address); |
| | | task.setVehicleLat(new BigDecimal(vehiclePosition.getPoint().getY())); |
| | | task.setVehicleLon(new BigDecimal(vehiclePosition.getPoint().getX())); |
| | | task.setHandleUserId(belongUserIds); |
| | | task.setAssigneeTime(LocalDateTime.now()); |
| | | task.setReportUserId(0L); |
| | | task.setReportTime(LocalDateTime.now()); |
| | | task.setEndTime(LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit())); |
| | | task.setExpiredNoticeSent(0); |
| | | task.setStatus(TaskScheduleConstants.TASK_STATUS_PENDING_ARRIVE); |
| | | task.setCreateBy("系统自动生成"); |
| | | task.setCreateTime(LocalDateTime.now()); |
| | | this.save(task); |
| | | // 异步发送消息通知 |
| | | String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : ""; |
| | | sendAccidentNotificationAsync(xpTask, plateNumber, taskRule.getProcessingTimeLimit()); |
| | | sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit()); |
| | | } |
| | | |
| | | @Override |