Merge branch 'dev_robotaxi-d_260311_8.4.0' into dev_robotaxi-d_260311_8.5.0_yyk

This commit is contained in:
yangyakun
2026-03-23 10:56:51 +08:00
55 changed files with 766 additions and 156 deletions

View File

@@ -7,6 +7,7 @@ import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.och.bridge.autopilot.line.LineManager
import com.mogo.och.bridge.autopilot.location.OchLocationManager
import com.mogo.och.bridge.distance.TrajectoryAndDistanceManager
import com.mogo.och.bridge.bridge.OchBridgeManager
@@ -68,6 +69,19 @@ class BridgeProvider : BridgeService, CallerBase<BridgeListener>() {
removeListener(tag)
}
override fun startAutopilot(type: Int) {
when (type) {
0 -> {LineManager.unmannedStartAutopilot(false)}
1 -> {LineManager.unmanneAutopilotContinue(false)}
2 -> {}
else -> {}
}
}
override fun taskManager(type: Int, index: Int) {
invokeTaskManagerTestArrived(index)
}
override fun doSomeAfterAddListener(tag: String, listener: BridgeListener) {
// 轨迹和距离回调
TrajectoryManager.doSomeAfterBridgeListener()
@@ -133,5 +147,11 @@ class BridgeProvider : BridgeService, CallerBase<BridgeListener>() {
}
}
fun invokeTaskManagerTestArrived(indexStation:Int){
M_LISTENERS.forEach {
it.value.onTestArrivedStation(indexStation)
}
}
}

View File

@@ -3,6 +3,10 @@ package com.mogo.och.bridge.autopilot.autopilot;
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
import com.mogo.och.bridge.autopilot.autopilot.bean.ArrivedStation;
import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification;
import org.jetbrains.annotations.Nullable;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
@@ -40,6 +44,23 @@ public interface IOchAutopilotStatusListener {
default void onAutopilotArriveAtStation(ArrivedStation arrivalNotification) {
}
/**
* 自动驾驶离站
* @param taskId
* @param taskStartNotification
*/
default void onAutopilotLeaveStation(Long taskId, TaskStartNotification taskStartNotification){
}
/**
* 自动驾驶离站
* @param taskId
* @param taskStartNotification
*/
default void onArriveAtStationByTaskManager(Long taskId, TaskArrivalNotification taskStartNotification){
}
/**
* 工控机获取SN
*/

View File

@@ -122,8 +122,8 @@ object OchAutoPilotManager {
* 继续启动自驾
*/
@JvmStatic
fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory, vehicleSite : VehicleSite, parameters: AutopilotControlParameters): Long {
val sessionId = CallerAutoPilotControlManager.unmannedAutoPilotContinue(taskId, traj,vehicleSite, parameters)
fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory, startStation : VehicleSite,endStation : VehicleSite, parameters: AutopilotControlParameters): Long {
val sessionId = CallerAutoPilotControlManager.unmannedAutoPilotContinue(taskId, traj,startStation,endStation, parameters)
globalSessionId.set(SessionWithTime(sessionId, System.currentTimeMillis(), -1L))
OchAutoPilotStatusListenerManager.fsmBackSessionId.set(-1L)
OchAutopilotAnalytics.triggerStartAutopilotParameters(traj, parameters, sessionId)

View File

@@ -23,6 +23,8 @@ import com.zhjt.mogo.adas.common.MessageType
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.data.bean.ReceivedAck
import com.zhjt.mogo.adas.data.bean.ReceivedAck.Status
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification
import fsm.Fsm2024
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
@@ -239,6 +241,23 @@ object OchAutoPilotStatusListenerManager : CallerBase<IOchAutopilotStatusListene
}
}
override fun invokeLeaveStation(taskId: Long?, taskStartNotification: TaskStartNotification?) {
M_LISTENERS.forEach {
val listener = it.value
listener.onAutopilotLeaveStation(taskId,taskStartNotification)
}
}
override fun onArriveAtStationByTaskManager(
taskId: Long?,
taskArrivalNotification: TaskArrivalNotification?
) {
M_LISTENERS.forEach {
val listener = it.value
listener.onArriveAtStationByTaskManager(taskId,taskArrivalNotification)
}
}
/**
* 距离终点10m 向地盘查询是否到站地盘的返回值
* [LineManager.mMapLocationListener]

View File

@@ -638,12 +638,6 @@ object LineManager : CallerBase<ILineCallback>() {
return
}
}
/**
* 存在Session
*/
if (!OchAutoPilotManager.canStartAutopilotBySessionId()) {
return
}
OchAutopilotAnalytics.triggerClickStartAutopilotTime(System.currentTimeMillis())
//1、判断轨迹url是否可用
if (_contraiInfo == null) {
@@ -759,12 +753,6 @@ object LineManager : CallerBase<ILineCallback>() {
return
}
}
/**
* 存在Session
*/
if (!OchAutoPilotManager.canStartAutopilotBySessionId()) {
return
}
OchAutopilotAnalytics.triggerClickStartAutopilotTime(System.currentTimeMillis())
//1、判断轨迹url是否可用
if (_contraiInfo == null) {
@@ -793,10 +781,10 @@ object LineManager : CallerBase<ILineCallback>() {
return
}
_lineInfos?.let { lineInfo ->
startStation?.let { start->
getStations { start, end ->
val wayPoints = ArrayList<VehicleSite>()
val blackPoints = ArrayList<VehicleSite>()
val vehicleSite = VehicleSite.builder()
val startStation = VehicleSite.builder()
.coordinateType(AutopilotCoordinateTypeEnum.WGS84.code)
.point(AutopilotPoint.builder().x(start.lon).y(start.lat).build())
.station(StationEnum.SITE.code)
@@ -805,7 +793,17 @@ object LineManager : CallerBase<ILineCallback>() {
.stationSeq(start.seq)
.tag(start.tag)
.build()
wayPoints.add(vehicleSite)
val endStation = VehicleSite.builder()
.coordinateType(AutopilotCoordinateTypeEnum.WGS84.code)
.point(AutopilotPoint.builder().x(end.lon).y(end.lat).build())
.station(StationEnum.SITE.code)
.stationId(end.siteId.toLong())
.stationName(end.name)
.stationSeq(end.seq)
.tag(end.tag)
.build()
wayPoints.add(startStation)
wayPoints.add(endStation)
val traj = Trajectory.builder()
.id(lineInfo.lineId)
.name(lineInfo.lineName)
@@ -817,7 +815,7 @@ object LineManager : CallerBase<ILineCallback>() {
.wayPoints(wayPoints)
.blackPoints(blackPoints)
.build()
val sessionId = OchAutoPilotManager.unmannedAutoPilotContinue(lineInfo.taskId, traj,vehicleSite, parameters)
val sessionId = OchAutoPilotManager.unmannedAutoPilotContinue(lineInfo.taskId, traj,startStation, endStation,parameters)
OchAutopilotAnalytics.triggerUpdateStartAutoPilotSessionId(sessionId, true)
d(
TAG,

View File

@@ -24,6 +24,7 @@ object CheckVinManager : IMoGoAutopilotCarConfigListener {
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
checkVin()
CallerAutoPilotControlManager.sendTaskManagerRunningInfo()
}
fun getVin(): String {

View File

@@ -86,6 +86,8 @@ object DebugDataDispatch {
const val pncAction = "pncAction"
const val collisionRisk = "CollisionRisk"
const val mediaStationMedia = "stationMedia"
const val startAutopilot = "startAutopilot"
const val taskManager = "taskManager"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "video" --ei add 2 --es url "rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "location" --es path "1111/11111"
@@ -108,6 +110,8 @@ object DebugDataDispatch {
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "vlmMessage" --es message "前方100米有道路施工施工长度100米影响第1、2车道通行。" --ei id 128 --ef time 1880.0
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "vlmImage" --ef time 1880.0
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "stationMedia"
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "startAutopilot" --ei startType 0
// adb shell am broadcast -a com.mogo.launcher.debug -f 0x011000000 --es type "taskManager" --ei startType 0 --ei indexStation 3
// adb shell am broadcast -a com.hmi.v2x.trafficlight -f 0x011000000 --ei trafficLightCheckType 1 --ei trafficLightCountDown 0 --ez trafficLightIsShow true // 红绿灯
@@ -122,6 +126,15 @@ object DebugDataDispatch {
}
when (type) {
taskManager -> {
val type = intent.getIntExtra("startType", 0)
val indexStation = intent.getIntExtra("indexStation", 0)
BridgeManager.debugTaskManager(type,indexStation)
}
startAutopilot -> {
val type = intent.getIntExtra("startType", 0)
BridgeManager.debugStartAutopilot(type)
}
mediaStationMedia -> {
val introductionList = mutableListOf<MediaItem>()
introductionList.add(

View File

@@ -28,4 +28,6 @@ interface BridgeListener {
fun onPncInfoListener(pncAction: String) {}
fun onCollisionRisk() {}
fun onTestArrivedStation(indexStation:Int) {}
}

View File

@@ -35,4 +35,12 @@ object BridgeManager {
bridgeService?.removeBridgeListener(tag)
}
fun debugStartAutopilot(type:Int){
bridgeService?.startAutopilot(type)
}
fun debugTaskManager(type:Int,index:Int){
bridgeService?.taskManager(type,index)
}
}

View File

@@ -13,4 +13,8 @@ interface BridgeService : IProvider {
fun addBridgeListener(tag:String, listener:BridgeListener)
fun removeBridgeListener(tag: String)
fun startAutopilot(type: Int)
fun taskManager(type: Int,index:Int)
}

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.amap.api.navi.AMapNaviView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/amapNaviView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@@ -11,6 +11,17 @@ import java.util.Objects
* @author tongchenfei
*/
open class BusStationBean {
companion object{
const val drivingStatusInit = 0//0初始值
const val drivingStatusPassed = 1//1已经过
const val drivingStatusCurrent = 2//2当前站
const val drivingStatusNotArrived = 3//3未到站
const val tagInit = 0//0初始值
const val tagNormal = 1//1正常停靠
const val tagSkip = 2//2 需要跳过
}
var siteId: Int = 0
@JvmField

View File

@@ -103,7 +103,7 @@ class BusRoutesResponse : BaseData() {
}
result.add(temp!!)
// 正在进行中的任务
if (temp!!.drivingStatus == TaskSiteDataBean.drivingStatusCurrent) {
if (temp!!.drivingStatus == BusStationBean.drivingStatusCurrent) {
if (temp!!.tag != 2) {
currentStationIndex = index
}

View File

@@ -214,7 +214,7 @@ object LineModel {
null
} else {
// startStationIndex == stationList!!.size - 1
startStationIndex == getLastStationPos(stationList!!)-1
nextStationIndex == getLastStationPos(stationList!!)
}
}
@@ -334,7 +334,7 @@ object LineModel {
fun startTaskMessage(): Boolean {
if (!stationList.isNullOrEmpty()) {
return startStationIndex == 0 && stationList!!.first().drivingStatus == TaskSiteDataBean.drivingStatusCurrent && !stationList!!.first().isLeaving
return startStationIndex == 0 && stationList!!.first().drivingStatus == BusStationBean.drivingStatusCurrent && !stationList!!.first().isLeaving
}
return false
}

View File

@@ -40,12 +40,18 @@ import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.OCHThreadPoolManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.unmanned.R
import com.mogo.och.unmanned.constant.BusConst
import com.mogo.och.unmanned.repository.RepositoryManager
import com.mogo.och.unmanned.repository.db.bean.TaskSiteDataBean
import com.mogo.och.unmanned.repository.exception.DataException
import com.mogo.och.unmanned.util.ShuttleVoiceManager
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.AutopilotPoint
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import com.zhjt.mogo.adas.unmanned.task.enums.AutopilotCoordinateTypeEnum
import com.zhjt.mogo.adas.unmanned.task.enums.StationEnum
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -122,14 +128,128 @@ object OrderModel {
// else -> {}
// }
}
override fun onTestArrivedStation(indexStation: Int) {
super.onTestArrivedStation(indexStation)
try {
LineModel.currentTask?.taskId?.let { taskId ->
LineModel.stationList?.let { list ->
if (list.size > indexStation) {
val busStationBean = list.get(indexStation)
val behicleSite = VehicleSite.builder()
.coordinateType(AutopilotCoordinateTypeEnum.WGS84.code)
.point(AutopilotPoint.builder().x(busStationBean.lon).y(busStationBean.lat).build())
.station(StationEnum.SITE.code)
.stationId(busStationBean.siteId.toLong())
.stationName(busStationBean.name)
.stationSeq(busStationBean.seq)
.tag(busStationBean.tag)
.build()
val mockInfo = TaskArrivalNotification(behicleSite,behicleSite,12.0)
ochAutopilotStatusListener.onArriveAtStationByTaskManager(taskId,mockInfo)
}
}
}
}catch (e:Exception){
e.printStackTrace()
}
}
}
private val ochAutopilotStatusListener = object : IOchAutopilotStatusListener {
override fun onAutopilotArriveAtStation(arrivedStation: ArrivedStation?) {
e(TAG, "行程日志-onAutopilotArriveAtStation arrive")
onArriveAt(arrivedStation, "底盘触发进站",false)
//onArriveAt(arrivedStation, "底盘触发进站")
}
override fun onAutopilotLeaveStation(
taskId: Long?,
taskStartNotification: TaskStartNotification?
) {
OchChainLogManager.writeChainLog("触发滑动出发,","taskId:$taskId taskStartNotification:${taskStartNotification}")
if(taskStartNotification?.isCloseDoorStartAuto==true){
val curStation = taskStartNotification.curStation
val nextStation = taskStartNotification.nextStation
LineModel.currentTask?.let { task ->
if(task.taskId==taskId){
LineManager.getStations { start, end ->
if(start.siteId.toLong()==curStation.stationId&&end.siteId.toLong()==nextStation.stationId){
OchChainLogManager.writeChainLog("触发滑动出发,","触发成功")
driveToNextStation(false)
}else{
OchChainLogManager.writeChainLog("触发滑动出发,","起始终点id不同触发失败")
}
}
}else{
OchChainLogManager.writeChainLog("触发滑动出发,","taskId不同触发失败")
}
}
}
}
override fun onArriveAtStationByTaskManager(
taskId: Long?,
taskArrivalNotification: TaskArrivalNotification?
) {
OchChainLogManager.writeChainLog("任务管理触发进站,","taskId:$taskId taskStartNotification:${taskArrivalNotification}")
taskId?.let { taskIdNotNull->
LineModel.currentTask?.let {
if(it.taskId==taskIdNotNull){
taskArrivalNotification?.station?.let { arrivedStation->
LineModel.stationList?.forEachIndexed { index, busStationBean ->
if(busStationBean.siteId.toLong()==arrivedStation.stationId){
if(busStationBean.tag==BusStationBean.tagSkip){
OchChainLogManager.writeChainLog("任务管理触发进站,","触发到站是临时不停不进行向下操作")
return
}
}
}
LineManager.getStations { start, end ->
if(end.siteId.toLong()==arrivedStation.stationId){
onArriveAt(arrivedStation, "任务管理器触发进站")
}else{
if(start.siteId.toLong()==arrivedStation.stationId){
OchChainLogManager.writeChainLog("任务管理触发进站,","开始站点和到达站点一致 不到站正好调整好数据")
}else{
OchChainLogManager.writeChainLog("任务管理触发进站,","到达站点和${start}还有${end}都不一致但是taskId:${taskId}一致去数据库调整数据使之一致")
RepositoryManager.adjustAllStation(taskIdNotNull,arrivedStation)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<Boolean> {
override fun onSubscribe(d: Disposable) {
d(TAG, "onSubscribe")
}
override fun onError(e: Throwable) {
d(TAG, "onError${e.printStackTrace()}")
}
override fun onComplete() {
d(TAG, "onComplete")
}
override fun onNext(data: Boolean) {
d(TAG, "onNext:${data}")
queryBusRoutes()
}
})
}
}
}
}
}else{
OchChainLogManager.writeChainLog("任务管理触发进站,","任务管理和pad端task 不一致请取消任务后重新选择任务")
}
}
}
}
}
private val ochTransform = object : OchTransformDispatch {
@@ -145,7 +265,7 @@ object OrderModel {
//是否到站的围栏判断 离站状态并且自动驾驶还未触发到站
if (isGoingToNextStation && !isArrivedStation) {
OCHThreadPoolManager.getsInstance().locationExecute {
onArriveAt(null, "兜底距离站点15m内 每秒钟向底盘查询是否到站 底盘返回",false)
//onArriveAt(null, "兜底距离站点15m内 每秒钟向底盘查询是否到站 底盘返回")
}
}
}
@@ -243,13 +363,15 @@ object OrderModel {
}
}
private fun onStartAutopilot(taskId: Long?) {
private fun onStartAutopilot() {
//开启自动驾驶 2.10.0: 如果自动驾驶状态下开启, 非自动驾驶状态下不开启,需手动点击自动驾驶按钮开启
isGoingToNextStation = true
if (CallerTaskListenerManager.isCarRunningTask()) {
LineManager.unmanneAutopilotContinue(false)
d(TAG, "启动自驾:继续启动自驾")
}else{
LineManager.unmannedStartAutopilot(true)
d(TAG, "启动自驾:下发轨迹启动自驾")
}
if (CallerAutoPilotStatusListenerManager.getState() != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
) {
@@ -284,7 +406,7 @@ object OrderModel {
* 滑动出发
*/
@JvmStatic
fun driveToNextStation() {
fun driveToNextStation(startAutopilot:Boolean) {
if (LineModel.isLastStation() == true) {
// 当前站是最后一站,结束当前行程
completeTask(true)
@@ -292,7 +414,7 @@ object OrderModel {
}
LineManager.getStations().first?.let { startStation ->
startStation.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
startStation.drivingStatus = BusStationBean.drivingStatusCurrent
startStation.isLeaving = true
LineModel.currentTask?.let { task ->
RepositoryManager.leaveStation(
@@ -318,7 +440,9 @@ object OrderModel {
}
LineModel.leaveStationSuccess()
isArrivedStation = false
onStartAutopilot(task.taskId)
if(startAutopilot) {
onStartAutopilot()
}
ThirdDeviceData.leaveStation()
@@ -336,8 +460,9 @@ object OrderModel {
if (data) {
LineModel.leaveStationSuccess()
isArrivedStation = false
onStartAutopilot(task.taskId)
if(startAutopilot) {
onStartAutopilot()
}
ThirdDeviceData.leaveStation()
updateBusStatus()
@@ -458,7 +583,7 @@ object OrderModel {
* @param data
*/
@JvmStatic
fun onArriveAt(data: ArrivedStation?, type: String,skipStation:Boolean) {
fun onArriveAt(data: VehicleSite?, type: String) {
if (LineManager.getStations().second == null) {
e(TAG, "行程日志-到站异常,取消后续操作结束")
OchChainLogManager.writeChainLog("shuttle弱网", "$type 行程日志-到站异常,取消后续操作结束")
@@ -478,9 +603,9 @@ object OrderModel {
LineManager.lastArrivedSiteId = end.siteId
isArrivedStation = true
isGoingToNextStation = false
start.drivingStatus = TaskSiteDataBean.drivingStatusPassed
start.drivingStatus = BusStationBean.drivingStatusPassed
start.isLeaving = false
end.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
end.drivingStatus = BusStationBean.drivingStatusCurrent
RepositoryManager.arriveStation(end.seq, end.siteId.toLong(), LineModel.currentTask?.taskId
?: 0L)
?.subscribeOn(Schedulers.io())
@@ -515,9 +640,6 @@ object OrderModel {
}
LineModel.arrivedStationSuccess()
updateBusStatus()
if(skipStation) {
driveToNextStation()
}
}
override fun onComplete() {
@@ -541,9 +663,6 @@ object OrderModel {
}
LineModel.arrivedStationSuccess()
updateBusStatus()
if(skipStation) {
driveToNextStation()
}
}
override fun onNext(data: Boolean) {
@@ -555,6 +674,88 @@ object OrderModel {
}
@JvmStatic
fun skipNextStation() {
// 手动点击到站
LineManager.getStations { start, end ->
if (isArrivedStation || end.siteId == LineManager.lastArrivedSiteId) return@getStations
OchChainLogManager.writeChainLog("触发跳站", "点击")
end.tag = 2
end.drivingStatus = BusStationBean.drivingStatusNotArrived
RepositoryManager.skipStation()
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<Boolean> {
override fun onSubscribe(d: Disposable) {
d(TAG, "onSubscribe")
}
override fun onError(e: Throwable) {
d(TAG, "onError${e.printStackTrace()}")
if (e is DataException) {
e.printStackTrace()
}
ThirdDeviceData.arriveStation()
d(TAG, "skipNextStation onComplete")
LineModel.stationList?.let {
//此处始发站应为上段路程的终点站
val startStation = LineManager.getStations().first
if (LineModel.startStationIndex + 1 < it.size) {
//遍历当前路段起始点之后的数组,第一个正常停靠点即为该段终点
val subStationList = it.subList(LineModel.startStationIndex + 1, it.size)
val endStation = subStationList.firstOrNull { bean ->
bean.tag != 2
}
LineModel.nextStationIndex = it.indexOf(endStation)
// val endStation = stationlist[LineModel.startStationIndex + 1]
LineManager.setStartAndEndStation(startStation, endStation)
LineModel.callEyeMap(5)
}
}
LineModel.leaveStationSuccess()
ThirdDeviceData.leaveStation()
updateBusStatus()
isArrivedStation = false
onStartAutopilot()
}
override fun onComplete() {
ThirdDeviceData.arriveStation()
d(TAG, "skipNextStation onComplete")
LineModel.stationList?.let {
//此处始发站应为上段路程的终点站
val startStation = LineManager.getStations().first
if (LineModel.startStationIndex + 1 < it.size) {
//遍历当前路段起始点之后的数组,第一个正常停靠点即为该段终点
val subStationList = it.subList(LineModel.startStationIndex + 1, it.size)
val endStation = subStationList.firstOrNull { bean ->
bean.tag != 2
}
LineModel.nextStationIndex = it.indexOf(endStation)
// val endStation = stationlist[LineModel.startStationIndex + 1]
LineManager.setStartAndEndStation(startStation, endStation)
LineModel.callEyeMap(6)
}
}
LineModel.leaveStationSuccess()
ThirdDeviceData.leaveStation()
updateBusStatus()
isArrivedStation = false
onStartAutopilot()
}
override fun onNext(data: Boolean) {
}
})
}
}
// 登出
@JvmStatic
fun logoutInner() {

View File

@@ -27,6 +27,7 @@ import com.mogo.och.unmanned.repository.net.bean.response.PassengerWriteOffRespo
import com.mogo.och.unmanned.repository.writeoff.IWriteOffRepository
import com.mogo.och.unmanned.repository.writeoff.impl.WriteOffCacheRepository
import com.mogo.och.unmanned.repository.writeoff.impl.WriteOffNormallRepository
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import io.reactivex.Observable
object RepositoryManager {
@@ -138,6 +139,15 @@ object RepositoryManager {
return lineRepository?.arriveStation(seq, siteId, taskId)
}
fun skipStation(): Observable<Boolean>? {
return lineRepository?.skipStation()
}
fun adjustAllStation(taskId: Long, arrivedStation: VehicleSite): Observable<Boolean>? {
return lineRepository?.adjustAllStation(taskId,arrivedStation)
}
fun endTask(shiftsId: Long, taskId: Long): Observable<Boolean>? {
return lineRepository?.endTask(shiftsId, taskId)
}

View File

@@ -3,6 +3,7 @@ package com.mogo.och.unmanned.repository.db.bean
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.mogo.och.data.bean.BusStationBean
@Entity(tableName = TaskSiteDataBean.tableName)
data class TaskSiteDataBean(
@@ -143,6 +144,17 @@ data class TaskSiteDataBean(
fun toTaskSiteDatas(querySites: List<SiteDataBean>, shiftsId: Long, taskId: Long, lineName: String): MutableList<TaskSiteDataBean> {
val result = mutableListOf<TaskSiteDataBean>()
var temp: TaskSiteDataBean? = null
// 先定义变量存储「第一个tag≠2」的元素seq值
var targetSeq: Int? = null
// 第一步遍历找到第一个tag≠2的元素的seq
querySites.forEach {
if (it.tag != 2 && targetSeq == null) {
targetSeq = it.seq
}
}
querySites.forEach {
temp = TaskSiteDataBean()
temp?.taskId = taskId
@@ -157,10 +169,14 @@ data class TaskSiteDataBean(
temp?.gcjLat = it.gcjLat
temp?.lon = it.lon
temp?.lat = it.lat
if (it.seq == 1) {
temp?.drivingStatus = drivingStatusCurrent
} else {
temp?.drivingStatus = drivingStatusNotArrived
// 核心根据tag条件设置drivingStatus
temp?.drivingStatus = when {
// 1. 找到第一个tag≠2的元素 → Current
targetSeq != null && it.seq == targetSeq -> BusStationBean.drivingStatusCurrent
// 2. 该元素之前的 → Passed
targetSeq != null && it.seq!! < targetSeq!! -> BusStationBean.drivingStatusPassed
// 3. 其余情况包括所有tag=2→ NotArrived
else -> BusStationBean.drivingStatusNotArrived
}
temp?.leaving = false
temp?.introduction = it.introduction
@@ -174,9 +190,5 @@ data class TaskSiteDataBean(
const val tableName: String = "used_task_data_table"
const val drivingStatusInit = 0//0初始值
const val drivingStatusPassed = 1//1已经过
const val drivingStatusCurrent = 2//2当前站
const val drivingStatusNotArrived = 3//3未到站
}
}

View File

@@ -23,6 +23,11 @@ interface TaskSiteDataDao {
@Query("UPDATE ${TaskSiteDataBean.tableName} SET leaving = :leave , driving_status = :drivingStatusCurrent WHERE task_id = :taskId and site_id = :siteId")
fun updateDrivingStatusANdLeave(taskId: Long, siteId: Long, drivingStatusCurrent: Int, leave: Int)
// 跳站中把tag 值为2 仅置运行表中
@Query("UPDATE ${TaskSiteDataBean.tableName} SET leaving = :leave , driving_status = :drivingStatusCurrent , tag = :tag WHERE task_id = :taskId and site_id = :siteId")
fun updateDrivingStatusTagAndLeave(taskId: Long, siteId: Long, drivingStatusCurrent: Int, leave: Int , tag:Int)
@Query("UPDATE ${TaskSiteDataBean.tableName} SET driving_status = :drivingStatusCurrent WHERE task_id = :taskId and site_id = :siteId")
fun updateDrivingStatus(taskId: Long, siteId: Long, drivingStatusCurrent: Int)

View File

@@ -1,9 +1,11 @@
package com.mogo.och.unmanned.repository.db.repository
import androidx.room.Transaction
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS
import com.mogo.eagle.core.utilcode.util.StringUtils
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.data.db.exception.DbException
import com.mogo.och.shuttle.unmanned.R
import com.mogo.och.unmanned.repository.db.IDbRepository
@@ -95,6 +97,23 @@ object TaskSiteDb : IDbRepository {
)
}
}
fun updateDrivingStatusTagAndLeave(
taskId: Long,
siteId: Long,
drivingStatus: Int,
leave: Boolean,
tag:Int
) {
BizLoopManager.runInIoThread {
taskSiteDataDao?.updateDrivingStatusTagAndLeave(
taskId,
siteId,
drivingStatus,
if (leave) 1 else 0,
tag
)
}
}
fun queryRunningTask(taskId: Long): List<TaskSiteDataBean>? {
return taskSiteDataDao?.queryRunningTask(taskId)
@@ -151,7 +170,7 @@ object TaskSiteDb : IDbRepository {
runningSite.forEach {
if (it.siteId == currentSiteId) {
currentSeq = it.seq ?: 0
it.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
it.drivingStatus = BusStationBean.drivingStatusCurrent
it.leaving = leaving
return@forEach
}
@@ -159,15 +178,32 @@ object TaskSiteDb : IDbRepository {
runningSite.forEach {
val seq = it.seq ?: 0
if (seq < currentSeq) {
it.drivingStatus = TaskSiteDataBean.drivingStatusPassed
it.drivingStatus = BusStationBean.drivingStatusPassed
it.leaving = true
} else if (seq > currentSeq) {
it.drivingStatus = TaskSiteDataBean.drivingStatusNotArrived
it.drivingStatus = BusStationBean.drivingStatusNotArrived
it.leaving = false
}
}
return runningSite
}
fun adjustAllStationByTaskId(queryRunningTask: List<TaskSiteDataBean>?) {
val runnable = object : Runnable {
@Transaction
override fun run() {
queryRunningTask?.forEach {
taskSiteDataDao?.updateDrivingStatusANdLeave(
it.taskId ?: 0,
it.siteId ?: 0,
it.drivingStatus ?: 0,
if (it.leaving == true) 1 else 0,
)
}
}
}
BizLoopManager.runInIoThread(runnable)
}
}

View File

@@ -8,6 +8,7 @@ import com.mogo.och.unmanned.bean.response.CarExecutableTaskResponse
import com.mogo.och.unmanned.bean.response.PointResponse
import com.mogo.och.unmanned.repository.db.bean.LineDataBean
import com.mogo.och.unmanned.repository.db.bean.TaskDataBean
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import io.reactivex.Observable
interface ILineRepository {
@@ -32,6 +33,10 @@ interface ILineRepository {
fun arriveStation(seq: Int, siteId: Long, taskId: Long): Observable<Boolean>?
fun skipStation(): Observable<Boolean>?
fun adjustAllStation(taskId: Long, arrivedStation: VehicleSite):Observable<Boolean>?
fun endTask(shiftsId: Long, taskId: Long): Observable<Boolean>?
fun queryCarExecutableTaskList(ochCommonServiceCallback: OchCommonServiceCallback<CarExecutableTaskResponse>)

View File

@@ -22,13 +22,13 @@ import com.mogo.och.unmanned.bean.response.PointResponse
import com.mogo.och.unmanned.model.LineModel
import com.mogo.och.unmanned.repository.db.bean.LineDataBean
import com.mogo.och.unmanned.repository.db.bean.TaskDataBean
import com.mogo.och.unmanned.repository.db.bean.TaskSiteDataBean
import com.mogo.och.unmanned.repository.line.ILineRepository
import com.mogo.och.unmanned.repository.net.NetInterface
import com.mogo.och.unmanned.repository.net.exception.NetException
import com.mogo.och.unmanned.repository.net.project.dali.bus.DaliBusServiceManager
import com.mogo.och.unmanned.repository.net.project.mogo.bus.MogoBusServiceManager
import com.mogo.och.unmanned.repository.net.project.mogo.shuttle.MogoShuttleServiceManager
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import io.reactivex.Observable
class NormalRepository : ILineRepository {
@@ -103,7 +103,7 @@ class NormalRepository : ILineRepository {
temp?.siteId = taskAndsite.siteId
result.add(temp!!)
// 正在进行中的任务
if (temp!!.drivingStatus == TaskSiteDataBean.drivingStatusCurrent) {
if (temp!!.drivingStatus == BusStationBean.drivingStatusCurrent) {
if (temp!!.tag != 2) {
currentStationIndex = index
}
@@ -201,6 +201,14 @@ class NormalRepository : ILineRepository {
)
}
override fun skipStation(): Observable<Boolean>? {
return Observable.just(false)
}
override fun adjustAllStation(taskId: Long, arrivedStation: VehicleSite):Observable<Boolean>? {
return Observable.just(false)
}
override fun endTask(shiftsId: Long, taskId: Long): Observable<Boolean>? {
return normalLineInterface?.endTask(taskId)
}

View File

@@ -16,6 +16,7 @@ import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.data.bean.ContraiInfo
import com.mogo.och.shuttle.unmanned.R
import com.mogo.och.unmanned.bean.request.QueryPointRequest
@@ -29,7 +30,6 @@ import com.mogo.och.unmanned.model.LineModel.currentTask
import com.mogo.och.unmanned.repository.db.bean.ContrailDataBean
import com.mogo.och.unmanned.repository.db.bean.LineDataBean
import com.mogo.och.unmanned.repository.db.bean.TaskDataBean
import com.mogo.och.unmanned.repository.db.bean.TaskSiteDataBean
import com.mogo.och.unmanned.repository.db.repository.ContraiDb
import com.mogo.och.unmanned.repository.db.repository.EventDb
import com.mogo.och.unmanned.repository.db.repository.LineDb
@@ -43,6 +43,7 @@ import com.mogo.och.unmanned.repository.net.project.dali.shuttle.DaliShuttleServ
import com.mogo.och.unmanned.repository.net.project.saas.bus.SaasBusServiceManager
import com.mogo.och.unmanned.repository.net.project.saas.scheduled.SaasScheduledServiceManager
import com.mogo.och.unmanned.repository.net.project.saas.shuttle.SaasShuttleServiceManager
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import io.reactivex.Observable
class WeaknetRepository : ILineRepository {
@@ -424,7 +425,7 @@ class WeaknetRepository : ILineRepository {
TaskSiteDb.updateDrivingStatusAndLeave(
task.taskId!!,
start.siteId.toLong(),
TaskSiteDataBean.drivingStatusPassed,
BusStationBean.drivingStatusPassed,
false
)
// 设置到站任务
@@ -455,7 +456,7 @@ class WeaknetRepository : ILineRepository {
TaskSiteDb.updateDrivingStatus(
taskId,
end.siteId.toLong(),
TaskSiteDataBean.drivingStatusCurrent
BusStationBean.drivingStatusCurrent
)
}
} else {
@@ -476,6 +477,70 @@ class WeaknetRepository : ILineRepository {
}
override fun skipStation(): Observable<Boolean>? {
return Observable.just(12)
.flatMap {temp->
//1 恢复end站点的值并置tag为临时不停靠运行表中
LineManager.getStations { start, end ->
if (currentTask != null && currentTask!!.taskId != null) {
currentTask?.let { task ->
if (task.taskId != null && task.lineId != null) {
TaskSiteDb.updateDrivingStatusTagAndLeave(
task.taskId!!,
end.siteId.toLong(),
BusStationBean.drivingStatusNotArrived,
false,
BusStationBean.tagSkip
)
}
}
} else {
OchChainLogManager.writeChainLog(
"跳站点_数据更新_error",
"task:${currentTask}__taskId:${currentTask?.taskId}"
)
CallerLogger.d(TAG, "跳斩_数据更新_error:task:${currentTask}__taskId:${currentTask?.taskId}")
}
val changeInfo =
"taskId:${currentTask?.taskId}--lineId:${currentTask?.lineId}--currentStationName:${start.name}--finalNextStationName:${end.name}"
OchChainLogManager.writeChainLog("到站", changeInfo)
CallerLogger.d(TAG, "到站:$changeInfo")
}
return@flatMap Observable.just(true)
}
}
override fun adjustAllStation(taskId: Long, arrivedStation: VehicleSite): Observable<Boolean>? {
return Observable.just(12)
.flatMap {temp->
//1 查询正在执行的任务
val queryRunningTask = TaskSiteDb.queryRunningTask(taskId)
//2 根据参数arrivedStation 来设置正确的 当前站和下一站
var arrivedStationIndex = -1
queryRunningTask?.forEachIndexed { index, taskSiteDataBean ->
if (taskSiteDataBean.tag != BusStationBean.tagSkip) {
if (taskSiteDataBean.siteId == arrivedStation.stationId) {
arrivedStationIndex = index
taskSiteDataBean.drivingStatus = BusStationBean.drivingStatusCurrent
taskSiteDataBean.leaving = false
} else {
if (arrivedStationIndex < 0) {
taskSiteDataBean.drivingStatus = BusStationBean.drivingStatusPassed
taskSiteDataBean.leaving = false
} else {
taskSiteDataBean.drivingStatus =
BusStationBean.drivingStatusNotArrived
taskSiteDataBean.leaving = false
}
}
}
}
OchChainLogManager.writeChainLog("任务管理触发进站,","更新新的数据库类型去")
TaskSiteDb.adjustAllStationByTaskId(queryRunningTask)
return@flatMap Observable.just(true)
}
}
override fun endTask(shiftsId: Long, taskId: Long): Observable<Boolean>? {
return Observable.just(taskId).flatMap {
currentTask?.let { task ->

View File

@@ -28,7 +28,7 @@ class TaskRunningModel : ViewModel(), IBusLinesCallback {
}
fun leaveStation() {
OrderModel.driveToNextStation()
OrderModel.driveToNextStation(true)
}
interface SwtichLineViewCallback {
@@ -55,7 +55,7 @@ class TaskRunningModel : ViewModel(), IBusLinesCallback {
}
fun arriveStation() {
OrderModel.onArriveAt(null, "页面触发到站",false)
OrderModel.onArriveAt(null, "页面触发到站")
}
override fun onArriveStationSuccess() {
@@ -84,7 +84,7 @@ class TaskRunningModel : ViewModel(), IBusLinesCallback {
if (LineModel.isLastStation() == true) {
return
}
OrderModel.onArriveAt(null, "页面挑站触发到站",true)
OrderModel.skipNextStation()
}
}

View File

@@ -88,7 +88,6 @@ class TaskRunningView : ConstraintLayout, TaskRunningModel.SwtichLineViewCallbac
}else{
viewModel?.skipStation()
}
viewModel?.arriveStation()
}
unmanned_actv_arriver_station_new.setOnLongClickListener {
viewModel?.arriveStation()

View File

@@ -8,30 +8,30 @@
tools:ignore="MissingDefaultResource">
<com.mogo.eagle.core.function.hmi.ui.widget.TrafficLightView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_40"
android:focusable="false"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:lightUser="driver" />
<!-- <com.mogo.eagle.core.function.hmi.ui.widget.TrafficLightView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginTop="@dimen/dp_40"-->
<!-- android:focusable="false"-->
<!-- android:visibility="gone"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintRight_toRightOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:lightUser="driver" />-->
<!--红绿灯提醒-->
<com.mogo.eagle.core.function.hmi.ui.notice.traffic.TrafficLightPromptView
android:id="@+id/viewTrafficLightPrompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_350"
android:layout_marginEnd="@dimen/dp_50"
android:focusable="false"
android:focusableInTouchMode="false"
android:visibility="gone"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:promptUser="driver" />
<!-- <com.mogo.eagle.core.function.hmi.ui.notice.traffic.TrafficLightPromptView-->
<!-- android:id="@+id/viewTrafficLightPrompt"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginTop="@dimen/dp_350"-->
<!-- android:layout_marginEnd="@dimen/dp_50"-->
<!-- android:focusable="false"-->
<!-- android:focusableInTouchMode="false"-->
<!-- android:visibility="gone"-->
<!-- app:layout_constraintRight_toRightOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:promptUser="driver" />-->
<!--pnc行为决策-->

View File

@@ -95,7 +95,7 @@ class BusRoutesResponse : BaseData() {
}
result.add(temp!!)
// 正在进行中的任务
if (temp!!.drivingStatus == TaskSiteDataBean.drivingStatusCurrent) {
if (temp!!.drivingStatus == BusStationBean.drivingStatusCurrent) {
if (temp!!.tag != 2) {
currentStationIndex = index
}

View File

@@ -324,7 +324,7 @@ object LineModel {
fun startTaskMessage():Boolean {
if (!stationList.isNullOrEmpty()) {
return startStationIndex == 0 && stationList!!.first().drivingStatus == TaskSiteDataBean.drivingStatusCurrent && !stationList!!.first().isLeaving
return startStationIndex == 0 && stationList!!.first().drivingStatus == BusStationBean.drivingStatusCurrent && !stationList!!.first().isLeaving
}
return false
}

View File

@@ -40,9 +40,9 @@ import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.OCHThreadPoolManager
import com.mogo.och.common.module.utils.ResourcesUtils
import com.mogo.och.common.module.utils.RxUtils
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.shuttle.weaknet.R
import com.mogo.och.weaknet.constant.BusConst
import com.mogo.och.weaknet.repository.db.bean.TaskSiteDataBean
import com.mogo.och.weaknet.repository.RepositoryManager
import com.mogo.och.weaknet.repository.exception.DataException
import com.mogo.och.weaknet.util.BusTrajectoryManager
@@ -285,7 +285,7 @@ object OrderModel {
}
LineManager.getStations().first?.let {startStation->
startStation.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
startStation.drivingStatus = BusStationBean.drivingStatusCurrent
startStation.isLeaving = true
LineModel.currentTask?.let { task->
RepositoryManager.leaveStation(
@@ -472,9 +472,9 @@ object OrderModel {
LineManager.lastArrivedSiteId = end.siteId
isArrivedStation = true
isGoingToNextStation = false
start.drivingStatus = TaskSiteDataBean.drivingStatusPassed
start.drivingStatus = BusStationBean.drivingStatusPassed
start.isLeaving = false
end.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
end.drivingStatus = BusStationBean.drivingStatusCurrent
RepositoryManager.arriveStation(end.seq,end.siteId.toLong(), LineModel.currentTask?.taskId?:0L)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())

View File

@@ -3,7 +3,7 @@ package com.mogo.och.weaknet.repository.db.bean
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.mogo.och.weaknet.repository.db.bean.SiteDataBean
import com.mogo.och.data.bean.BusStationBean
@Entity(tableName = TaskSiteDataBean.tableName)
data class TaskSiteDataBean(
@@ -159,9 +159,9 @@ data class TaskSiteDataBean(
temp?.lon = it.lon
temp?.lat = it.lat
if(it.seq==1){
temp?.drivingStatus = drivingStatusCurrent
temp?.drivingStatus = BusStationBean.drivingStatusCurrent
}else{
temp?.drivingStatus = drivingStatusNotArrived
temp?.drivingStatus = BusStationBean.drivingStatusNotArrived
}
temp?.leaving = false
temp?.introduction = it.introduction
@@ -175,9 +175,5 @@ data class TaskSiteDataBean(
const val tableName: String = "used_task_data_table"
const val drivingStatusInit = 0//0初始值
const val drivingStatusPassed = 1//1已经过
const val drivingStatusCurrent = 2//2当前站
const val drivingStatusNotArrived = 3//3未到站
}
}

View File

@@ -5,6 +5,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_
import com.mogo.eagle.core.utilcode.util.StringUtils
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.weaknet.repository.db.IDbRepository
import com.mogo.och.weaknet.repository.db.MyDataBase
import com.mogo.och.weaknet.repository.db.bean.TaskSiteDataBean
@@ -152,7 +153,7 @@ object TaskSiteDb : IDbRepository {
runningSite.forEach {
if (it.siteId == currentSiteId) {
currentSeq = it.seq ?: 0
it.drivingStatus = TaskSiteDataBean.drivingStatusCurrent
it.drivingStatus = BusStationBean.drivingStatusCurrent
it.leaving = leaving
return@forEach
}
@@ -160,10 +161,10 @@ object TaskSiteDb : IDbRepository {
runningSite.forEach {
val seq = it.seq ?: 0
if (seq < currentSeq) {
it.drivingStatus = TaskSiteDataBean.drivingStatusPassed
it.drivingStatus = BusStationBean.drivingStatusPassed
it.leaving = true
} else if (seq > currentSeq) {
it.drivingStatus = TaskSiteDataBean.drivingStatusNotArrived
it.drivingStatus = BusStationBean.drivingStatusNotArrived
it.leaving = false
}
}

View File

@@ -100,7 +100,7 @@ class NormalRepository: ILineRepository {
temp?.siteId = taskAndsite.siteId
result.add(temp!!)
// 正在进行中的任务
if (temp!!.drivingStatus == TaskSiteDataBean.drivingStatusCurrent) {
if (temp!!.drivingStatus == BusStationBean.drivingStatusCurrent) {
if (temp!!.tag != 2) {
currentStationIndex = index
}

View File

@@ -16,6 +16,7 @@ import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.data.bean.BusStationBean
import com.mogo.och.data.bean.ContraiInfo
import com.mogo.och.shuttle.weaknet.R
import com.mogo.och.weaknet.bean.request.QueryPointRequest
@@ -420,7 +421,7 @@ class WeaknetRepository : ILineRepository {
TaskSiteDb.updateDrivingStatusAndLeave(
task.taskId!!,
start.siteId.toLong(),
TaskSiteDataBean.drivingStatusPassed,
BusStationBean.drivingStatusPassed,
false
)
// 设置到站任务
@@ -451,7 +452,7 @@ class WeaknetRepository : ILineRepository {
TaskSiteDb.updateDrivingStatus(
taskId,
end.siteId.toLong(),
TaskSiteDataBean.drivingStatusCurrent
BusStationBean.drivingStatusCurrent
)
}
} else {

View File

@@ -2,6 +2,8 @@ package com.mogo.och.shuttle.weaknet.passenger.ui.linenew
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.StringUtils
@@ -30,7 +32,6 @@ import kotlinx.android.synthetic.main.b4_driving_info_full_fragment.cl_empty_ser
import kotlinx.android.synthetic.main.b4_driving_info_full_fragment.cl_line_info_station
import kotlinx.android.synthetic.main.b4_driving_info_full_fragment.end_station_name
import kotlinx.android.synthetic.main.b4_driving_info_full_fragment.group_station_empty
import kotlinx.android.synthetic.main.m2_arrive_view.view.ochtv_arrive_station_value
import kotlin.math.ceil
import kotlin.math.roundToInt
@@ -186,6 +187,7 @@ class PB4DrivingInfoFullSFragment :
}
private fun showBottom1Station(station:BusStationBean?,isShow:Boolean){
setTextColor(station,actv_station_pre_1)
if(isShow) {
actv_station_pre_1.text = station?.name
aciv_arrow_station_1.visibility = View.VISIBLE
@@ -199,6 +201,7 @@ class PB4DrivingInfoFullSFragment :
}
private fun showBottom2Station(station:BusStationBean?,isShow:Boolean){
setTextColor(station, actv_station_pre_2)
if(isShow) {
actv_station_pre_2.text = station?.name
aciv_arrow_station_2.visibility = View.VISIBLE
@@ -212,6 +215,7 @@ class PB4DrivingInfoFullSFragment :
}
private fun showBottom3Station(station:BusStationBean?,isShow:Boolean){
setTextColor(station, actv_station_pre_3)
if(isShow) {
actv_station_pre_3.text = station?.name
aciv_arrow_station_3.visibility = View.VISIBLE
@@ -225,6 +229,7 @@ class PB4DrivingInfoFullSFragment :
}
private fun showBottom4Station(station:BusStationBean?,isShow:Boolean){
setTextColor(station, actv_station_pre_4)
if(isShow) {
actv_station_pre_4.text = station?.name
aciv_arrow_station_4.visibility = View.VISIBLE
@@ -237,6 +242,16 @@ class PB4DrivingInfoFullSFragment :
}
}
private fun setTextColor(station: BusStationBean?, textView: AppCompatTextView){
context?.let {
if(station?.tag==2){
textView.setTextColor(ContextCompat.getColor(it, R.color.b4_5E5E5E))
}else{
textView.setTextColor(ContextCompat.getColor(it, R.color.white))
}
}
}
fun updateLineName(lineName: String){
actvLineName.text = lineName

View File

@@ -22,4 +22,5 @@
<color name="b4_9AFF98">#9AFF98</color>
<color name="b4_EDBE2B">#EDBE2B</color>
<color name="b4_FF8300">#FF8300</color>
<color name="b4_5E5E5E">#5E5E5E</color>
</resources>

View File

@@ -49,6 +49,8 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume;
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus;
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification;
import java.io.IOException;
import java.math.BigDecimal;
@@ -803,4 +805,14 @@ public class SweeperCloudTaskModel implements IMoGoSweeperFutianCloudTaskListene
@Override
public void onAutoPilotStation(long token, long timestamp, @Nullable SsmInfo.AutoPilotStation autoPilotStation) {
}
@Override
public void invokeLeaveStation(@Nullable Long taskId, @Nullable TaskStartNotification taskStartNotification) {
}
@Override
public void onArriveAtStationByTaskManager(@Nullable Long taskId, @Nullable TaskArrivalNotification taskArrivalNotification) {
}
}

View File

@@ -42,6 +42,8 @@ import com.mogo.och.sweeper.operate.model.SweeperOperateTaskModel;
import com.mogo.och.sweeper.common.util.SweeperFutianCmdUtil;
import com.mogo.och.sweeper.operate.util.SweeperTrajectoryManager;
import com.zhjt.mogo.adas.data.AdasConstants;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -483,4 +485,14 @@ public class SweeperOperatePresenter extends Presenter<SweeperOperateFragment>
public void onAutoPilotStation(long token, long timestamp, @Nullable SsmInfo.AutoPilotStation autoPilotStation) {
}
@Override
public void invokeLeaveStation(@Nullable Long taskId, @Nullable TaskStartNotification taskStartNotification) {
}
@Override
public void onArriveAtStationByTaskManager(@Nullable Long taskId, @Nullable TaskArrivalNotification taskArrivalNotification) {
}
}

View File

@@ -84,6 +84,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import com.zhjt.service.chain.ChainLog
import io.netty.channel.Channel
import mogo.telematics.pad.MessagePad
@@ -467,9 +468,9 @@ class MoGoAutopilotControlProvider :
}
}
override fun sendTaskManagerAutopilotContinue(trackId: Long, taskId: Long, stationId: Long, stationName: String, stationSeq: Int, lon: Double, lat: Double): Long {
override fun sendTaskManagerAutopilotContinue(trackId: Long, taskId: Long, startStation : VehicleSite, endStation:VehicleSite ): Long {
return if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) {
val invokeResult = AdasManager.getInstance().sendTaskManagerAutopilotContinue(trackId, taskId, stationId, stationName, stationSeq, lon, lat)
val invokeResult = AdasManager.getInstance().sendTaskManagerAutopilotContinue(trackId, taskId, startStation, endStation)
invokeAutoPilotResult(if (invokeResult > -1) "无人化 取消自动驾驶调用成功:${invokeResult}" else "无人化 取消自动驾驶调用失败, socket 或者 rawPack 可能为空")
invokeResult
} else {

View File

@@ -38,7 +38,9 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SO
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeLeaveStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStationByTaskManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutoPilotInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutoPilotStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotGuardian
@@ -132,7 +134,9 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskLocationQueryResponse
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification
import com.zhjt.mogo.adas.utils.ByteUtil
import com.zhjt.service.chain.ChainLog
import fault_management.FmInfo
@@ -1679,8 +1683,8 @@ class MoGoAdasListenerImpl : OnAdasListener {
override fun onPlanningStopLine(header: MessagePad.Header, mapMsg: Hadmap.MapMsg) {
}
override fun onAdasTaskManagerOriginal(header: MessagePad.Header, data: ByteArray) {
taskManagerOriginal(header, ByteUtil.byteArrToHex(data, false))
override fun onAdasTaskManagerOriginal(header: MessagePad.Header, data: String) {
taskManagerOriginal(header, data)
}
@ChainLog(
@@ -1693,10 +1697,15 @@ class MoGoAdasListenerImpl : OnAdasListener {
CallerLogger.i("$M_D_C$TAG", "任务管理数据:$data")
}
override fun onAdasTaskManagerDeparture(taskId: Long?, siteId: Long?, sequence: Int?, ack: Boolean, reason: String?, stationTimeLeft: Double) {
override fun onAdasTaskManagerDeparture(
taskId: Long?,
taskStartNotification: TaskStartNotification?
) {
invokeLeaveStation(taskId,taskStartNotification)
}
override fun onAdasTaskManagerArrival(taskId: Long?, siteId: Long?, sequence: Int?, mileage: BigDecimal?) {
override fun onAdasTaskManagerArrival(taskId: Long?,taskArrivalNotification: TaskArrivalNotification? ) {
invokeArriveAtStationByTaskManager(taskId,taskArrivalNotification)
}
override fun onAdasTaskManagerComplete(taskId: Long?, userId: Long?, status: Int?, reason: String?, completedTime: Date?, mileage: BigDecimal?) {

View File

@@ -55,6 +55,7 @@ class AsyncDataToAutopilotServer private constructor() : IMoGoTrafficLightListen
.subscribe {
bizLog(SceneConstant.M_D_C + TAG, "请求底盘轨迹")
CallerAutoPilotControlManager.getGlobalPath()
}
}
else -> {}

View File

@@ -906,11 +906,7 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_fail_content)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.cold_start_fail))
coldStartResultListener?.coldStartFail()
ThreadUtils.runOnUiThread {
tvColdStartNow.visibility = View.VISIBLE
ivColdStartNow.visibility = View.VISIBLE
tvColdStartTip.visibility = View.VISIBLE
}
initUseNowBtnView()
}
/**

View File

@@ -16,6 +16,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfi
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume.SuspendResumeTaskReq
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskResp
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite
import mogo.telematics.pad.MessagePad
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest
import system_master.SsmInfo
@@ -49,7 +50,7 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
fun sendTaskManagerAutopilotStart(taskId: Long, traj: Trajectory): Long
fun sendTaskManagerAutopilotContinue(trackId: Long, taskId: Long, stationId: Long, stationName: String, stationSeq: Int, lon: Double, lat: Double): Long
fun sendTaskManagerAutopilotContinue(trackId: Long, taskId: Long, startStation : VehicleSite, endStation: VehicleSite): Long
/**
* 开启自动驾驶(魔方)

View File

@@ -2,6 +2,8 @@ package com.mogo.eagle.core.function.api.autopilot
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import system_master.*
@@ -67,6 +69,13 @@ interface IMoGoAutopilotStatusListener {
*/
fun onAutopilotArriveAtStation(arrivalNotification: MessagePad.ArrivalNotification?) {}
fun onArriveAtStationByTaskManager(taskId: Long?,taskArrivalNotification: TaskArrivalNotification?) {}
/**
* 自动驾驶 离站触发
*/
fun invokeLeaveStation(taskId: Long?, taskStartNotification: TaskStartNotification?) {}
/**
* 工控机获取SN
*/

View File

@@ -122,12 +122,12 @@ object CallerAutoPilotControlManager {
/**
* 自驾成功后再次启动自驾时
*/
fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory?, vehicleSite : VehicleSite, controlParameters: AutopilotControlParameters): Long {
fun unmannedAutoPilotContinue(taskId: Long, traj: Trajectory?, startStation : VehicleSite,endStation : VehicleSite, controlParameters: AutopilotControlParameters): Long {
if (traj == null) {
//LogUtils.eTag(TAG, "自动驾驶控制参数异常,请检查参数信息")
return -1L
}
val sessionId = providerApi?.sendTaskManagerAutopilotContinue(traj.id, taskId, vehicleSite.stationId, vehicleSite.stationName, vehicleSite.stationSeq, vehicleSite.point.x, vehicleSite.point.y) ?: -1L
val sessionId = providerApi?.sendTaskManagerAutopilotContinue(traj.id, taskId, startStation,endStation) ?: -1L
// 更新记录在全局的控制参数
CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(controlParameters)
return sessionId

View File

@@ -12,6 +12,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ParseVersionUtils
import com.zhjt.mogo.adas.data.AdasConstants
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification
import mogo.telematics.pad.MessagePad
import mogo_msg.MogoReportMsg
import system_master.SsmInfo
@@ -270,6 +272,25 @@ object CallerAutoPilotStatusListenerManager : CallerBase<IMoGoAutopilotStatusLis
listener.onAutopilotArriveAtStation(arrivalNotification)
}
}
/**
* 自动驾驶站点信息 回调
* @param arrivalNotification 自动驾驶网约车回调数据
*/
@Synchronized
fun invokeArriveAtStationByTaskManager(taskId: Long?,taskArrivalNotification: TaskArrivalNotification? ) {
mAutopilotStatusInfo.isArriveAtStation = true
M_LISTENERS.forEach {
val listener = it.value
listener.onArriveAtStationByTaskManager(taskId,taskArrivalNotification)
}
}
fun invokeLeaveStation(taskId: Long?, taskStartNotification: TaskStartNotification?){
M_LISTENERS.forEach {
val listener = it.value
listener.invokeLeaveStation(taskId,taskStartNotification)
}
}
/**
* 工控机获取SN 回调

View File

@@ -378,8 +378,8 @@ object AppIdentityModeUtils {
//获取驾舱类型
@JvmStatic
fun getCockpitType(): CockpitType {
// return CockpitType.getCockpitType(SPUtils.getInstance().getString(COCKPIT_TYPE, CockpitType.NONE.code))
return CockpitType.UNMANNED
return CockpitType.getCockpitType(SPUtils.getInstance().getString(COCKPIT_TYPE, CockpitType.NONE.code))
// return CockpitType.UNMANNED
}
}

View File

@@ -9,12 +9,22 @@ public class TaskContinueNotification {
* 当前站点
*/
private VehicleSite curStation;
private VehicleSite nextStation;
public TaskContinueNotification() {
}
public TaskContinueNotification(VehicleSite curStation) {
public VehicleSite getNextStation() {
return nextStation;
}
public void setNextStation(VehicleSite nextStation) {
this.nextStation = nextStation;
}
public TaskContinueNotification(VehicleSite curStation, VehicleSite nextStation) {
this.curStation = curStation;
this.nextStation = nextStation;
}
public VehicleSite getCurStation() {
@@ -29,6 +39,7 @@ public class TaskContinueNotification {
public String toString() {
return "TaskContinueNotification{" +
"curStation=" + curStation +
", nextStation=" + nextStation +
'}';
}
@@ -38,14 +49,20 @@ public class TaskContinueNotification {
public static class Builder {
private VehicleSite curStation;
private VehicleSite nextStation;
public Builder curStation(VehicleSite curStation) {
this.curStation = curStation;
return this;
}
public Builder nextStation(VehicleSite nextStation) {
this.nextStation = nextStation;
return this;
}
public TaskContinueNotification build() {
return new TaskContinueNotification(curStation);
return new TaskContinueNotification(curStation, nextStation);
}
}
}

View File

@@ -1,6 +1,12 @@
package com.zhjt.mogo.adas.unmanned.task.dto.cmd;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.zhjt.mogo.adas.unmanned.task.enums.MessageCmdEnum;
import java.util.List;
import java.util.Objects;
/**
* 车端发送车辆启动结果
@@ -26,17 +32,20 @@ public class TaskStartNotification {
* 错误码
*/
private List<Integer> errCodes;
/**
* 当前站点
*/
private VehicleSite curStation;
/**
* 下一个站点
*/
private VehicleSite nextStation;
/**
* 前一个任务名称
*/
private String lastTaskCmdType;
public TaskStartNotification() {
}
public TaskStartNotification(VehicleSite curLocation, boolean autopilotResult, double stationTimeLeft, String errMsg, List<Integer> errCodes) {
this.curLocation = curLocation;
this.autopilotResult = autopilotResult;
this.stationTimeLeft = stationTimeLeft;
this.errMsg = errMsg;
this.errCodes = errCodes;
}
public TaskStartNotification() {}
public VehicleSite getCurLocation() {
return curLocation;
@@ -78,6 +87,30 @@ public class TaskStartNotification {
this.errCodes = errCodes;
}
public VehicleSite getCurStation() {
return curStation;
}
public void setCurStation(VehicleSite curStation) {
this.curStation = curStation;
}
public VehicleSite getNextStation() {
return nextStation;
}
public void setNextStation(VehicleSite nextStation) {
this.nextStation = nextStation;
}
public String getLastTaskCmdType() {
return lastTaskCmdType;
}
public void setLastTaskCmdType(String lastTaskCmdType) {
this.lastTaskCmdType = lastTaskCmdType;
}
@Override
public String toString() {
return "TaskStartNotification{" +
@@ -86,6 +119,19 @@ public class TaskStartNotification {
", stationTimeLeft=" + stationTimeLeft +
", errMsg='" + errMsg + '\'' +
", errCodes=" + errCodes +
", curStation=" + curStation +
", nextStation=" + nextStation +
", lastTaskCmdType=" + lastTaskCmdType +
'}';
}
public boolean isCloseDoorStartAuto(){
if(Objects.equals(lastTaskCmdType, MessageCmdEnum.TaskStartNotification.getCode()) ||
Objects.equals(lastTaskCmdType, MessageCmdEnum.TaskContinueNotification.getCode()) ){
return false;
}
return true;
}
}

View File

@@ -9,16 +9,31 @@ public enum MessageCmdEnum {
AutopilotStartRequest("AutopilotStartRequest", "APP开始任务"),
TaskContinueNotification("TaskContinueNotification", "站点出发"),
@Deprecated
TaskFinishNotification("TaskFinishNotification", "任务完成"),
@Deprecated
TaskLocationQueryRequest("TaskLocationQueryRequest", "任务查询"),
TaskStartNotification("TaskStartNotification", "自驾/离站结果回执"),
TaskArrivalNotification("TaskArrivalNotification", "到站通知"),
TaskAbortNotification("TaskAbortNotification", "任务终止"),
// 定频返回
TaskLocationQueryResponse("TaskLocationQueryResponse", "任务查询结果"),
TaskCancelRequest("TaskCancelRequest", "任务取消请求"),
TaskCancelResponse("TaskCancelResponse", "任务取消请求"),
//车向云的查询请求
TaskQueryStateRequest("TaskQueryStateRequest", "任务状态查询"),
//查询状态响应, 车端重启后请求
TaskQueryStateResponse("TaskQueryStateResponse", "任务状态查询响应"),
TaskRouteSyncRequest("TaskRouteSyncRequest", "查询正在执行的任务"),
TaskRouteSyncResponse("TaskRouteSyncResponse", "查询执行的任务的结果"),
;

View File

@@ -4,6 +4,7 @@ package com.zhidao.support.adas.high;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_INIT;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_GLOBAL_PATH;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_SYSTEM_CMD;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_TASK;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_TRAJECTORY_DOWNLOAD;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_CONNECT_ADDRESS;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_SOURCE_ADAS;
@@ -3397,7 +3398,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
// .newBuilder()
// .setTaskData(com.google.protobuf.ByteString.copyFrom(JsonUtil.toJsonBase64(data).getBytes(StandardCharsets.UTF_8)));
// return sendPBMessage(MessageType.TYPE_SEND_TASK_MANAGER, builder.build().toByteArray());
Log.i(TAG, "任务管理:"+data.toString());
sendTaskManageReqLog(data);
return sendPBMessage(MessageType.TYPE_SEND_TASK_MANAGER, JsonUtil.toJsonBase64(data).getBytes(StandardCharsets.UTF_8));
}
@@ -3435,19 +3436,13 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
*
* @param trackId
* @param taskId
* @param stationId
* @param stationName
* @param stationSeq
* @param lon
* @param lat
* @param startStation
* @param endStation
* @return
*/
@Override
public long sendTaskManagerAutopilotContinue(Long trackId, Long taskId, Long stationId, String stationName, Integer stationSeq, double lon, double lat) {
VehicleSite vehicleSite = VehicleSite.builder().stationId(stationId).stationName(stationName)
.station(StationEnum.SITE.getCode()).stationSeq(stationSeq)
.point(AutopilotPoint.builder().x(lon).y(lat).build()).coordinateType(AutopilotCoordinateTypeEnum.WGS84.getCode()).build();
TaskContinueNotification taskContinueNotification = TaskContinueNotification.builder().curStation(vehicleSite).build();
public long sendTaskManagerAutopilotContinue(Long trackId, Long taskId,VehicleSite startStation,VehicleSite endStation) {
TaskContinueNotification taskContinueNotification = TaskContinueNotification.builder().curStation(startStation).nextStation(endStation).build();
CmdDto<TaskContinueNotification> cmdDto = CmdDto.<TaskContinueNotification>builder().cmdType(MessageCmdEnum.TaskContinueNotification.getCode()).taskId(taskId).lineId(trackId).timestamp(System.currentTimeMillis()).data(taskContinueNotification).build();
return sendTaskManager(cmdDto);
}
@@ -3464,5 +3459,15 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.lineId(0L).timestamp(System.currentTimeMillis()).data(new JSONObject()).build();
return sendTaskManager(cmdDto);
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_SEND_TASK,
paramIndexes = {0}
)
public <T> void sendTaskManageReqLog(T data) {
Log.i(TAG, "任务管理:"+data.toString());
}
}

View File

@@ -29,6 +29,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume;
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite;
import java.util.HashSet;
import java.util.List;
@@ -2098,8 +2099,8 @@ public class AdasManager implements IAdasNetCommApi {
}
@Override
public long sendTaskManagerAutopilotContinue(Long trackId, Long taskId, Long stationId, String stationName, Integer stationSeq, double lon, double lat) {
return mChannel == null ? -1L : mChannel.sendTaskManagerAutopilotContinue(trackId, taskId, stationId, stationName, stationSeq, lon, lat);
public long sendTaskManagerAutopilotContinue(Long trackId, Long taskId, VehicleSite startStation, VehicleSite endStation) {
return mChannel == null ? -1L : mChannel.sendTaskManagerAutopilotContinue(trackId, taskId, startStation, endStation);
}
@Override

View File

@@ -17,6 +17,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume;
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.Trajectory;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.VehicleSite;
import java.util.List;
import java.util.Map;
@@ -1547,7 +1548,7 @@ public interface IAdasNetCommApi {
long sendTaskManagerRunningInfo();
long sendTaskManagerAutopilotStart(Long taskId, Trajectory traj);
long sendTaskManagerAutopilotContinue(Long trackId, Long taskId, Long stationId, String stationName, Integer stationSeq, double lon, double lat);
long sendTaskManagerAutopilotContinue(Long trackId, Long taskId, VehicleSite startStation, VehicleSite endStation);
long sendTaskManagerAutopilotCancel(Long taskId);

View File

@@ -33,7 +33,9 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm;
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume;
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus;
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskArrivalNotification;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskLocationQueryResponse;
import com.zhjt.mogo.adas.unmanned.task.dto.cmd.TaskStartNotification;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -805,7 +807,7 @@ public interface OnAdasListener {
* @param header 头
* @param data 数据
*/
void onAdasTaskManagerOriginal(@NonNull MessagePad.Header header, @NonNull byte[] data);
void onAdasTaskManagerOriginal(@NonNull MessagePad.Header header, @NonNull String data);
/**
* 域控任务管理离站通知
@@ -816,8 +818,9 @@ public interface OnAdasListener {
* @param ack
* @param reason
* @param stationTimeLeft
* @param closeDoorStartAuto
*/
void onAdasTaskManagerDeparture(Long taskId, Long siteId, Integer sequence, boolean ack, String reason, double stationTimeLeft);
void onAdasTaskManagerDeparture(Long taskId, TaskStartNotification taskStartNotification);
/**
* 域控任务管理到站通知
@@ -827,7 +830,7 @@ public interface OnAdasListener {
* @param sequence 站点序号对应顺序列表里站点流程从1开始1为起始点最大值为终点。 途径点填写0
* @param mileage 任务全程的已经行进的里程
*/
void onAdasTaskManagerArrival(Long taskId, Long siteId, Integer sequence, BigDecimal mileage);
void onAdasTaskManagerArrival(Long taskId, TaskArrivalNotification taskArrivalNotification);
/**
* 域控任务管理终止任务

View File

@@ -17,4 +17,5 @@ public class AdasChain {
public static final String CHAIN_CODE_ADAS_SEND_GLOBAL_PATH = "CHAIN_CODE_ADAS_SEND_GLOBAL_PATH";
public static final String CHAIN_CODE_ADAS_SEND_SYSTEM_CMD = "CHAIN_CODE_ADAS_SEND_SYSTEM_CMD";
public static final String CHAIN_CODE_ADAS_SEND_TRAJECTORY_DOWNLOAD = "CHAIN_CODE_ADAS_SEND_TRAJECTORY_DOWNLOAD";
public static final String CHAIN_CODE_ADAS_SEND_TASK = "CHAIN_CODE_ADAS_SEND_TASK";
}

View File

@@ -3,6 +3,7 @@ package com.zhidao.support.adas.high.msg;
import android.os.SystemClock;
import android.util.Log;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
@@ -45,8 +46,9 @@ public class TaskManagerMessage extends MyAbstractMessageHandler {
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
adasListener.onAdasTaskManagerOriginal(raw.getHeader(), data);
parse(adasListener, new String(data, StandardCharsets.UTF_8));
String dataString = new String(data, StandardCharsets.UTF_8);
adasListener.onAdasTaskManagerOriginal(raw.getHeader(), dataString);
parse(adasListener,dataString);
}
AdasChannel.calculateTimeConsumingBusiness("任务管理消息", nowTime);
}
@@ -65,7 +67,7 @@ public class TaskManagerMessage extends MyAbstractMessageHandler {
TaskStartNotification taskStartNotification = cmdDto.getData();
VehicleSite vehicleSite = taskStartNotification.getCurLocation();
adasListener.onAdasTaskManagerDeparture(cmdDto.getTaskId(), vehicleSite.getStationId(), vehicleSite.getStationSeq(), taskStartNotification.isAutopilotResult(), taskStartNotification.getErrMsg(), taskStartNotification.getStationTimeLeft());
adasListener.onAdasTaskManagerDeparture(cmdDto.getTaskId(), taskStartNotification);
}
} else if (messageCmdEnum == MessageCmdEnum.TaskArrivalNotification) {//到站通知
@@ -74,8 +76,7 @@ public class TaskManagerMessage extends MyAbstractMessageHandler {
if (cmdDto != null) {
Log.i(TAG, "onAdasTaskManagerArrival=" + cmdDto);
TaskArrivalNotification taskArrivalNotification = cmdDto.getData();
VehicleSite vehicleSite = taskArrivalNotification.getCurLocation();
adasListener.onAdasTaskManagerArrival(cmdDto.getTaskId(), vehicleSite.getStationId(), vehicleSite.getStationSeq(), BigDecimal.valueOf(taskArrivalNotification.getAccumulatedTaskDis()));
adasListener.onAdasTaskManagerArrival(cmdDto.getTaskId(), taskArrivalNotification);
}
} else if (messageCmdEnum == MessageCmdEnum.TaskAbortNotification) {//终止任务

View File

@@ -342,6 +342,17 @@ class IFlyTekOfflineTts : IMogoTTS {
if (!aiHandle!!.isSuccess) {
// handleErrorEvent("开启会话报错:${aiHandle!!.code}")
handleErrorEvent("${StringUtils.getString(R.string.module_tts_start_ai_handle_error)}${aiHandle!!.code}")
if(aiHandle!!.code==18310){
aiHandle?.let {
val ret = AiHelper.getInst().end(it)
d(TAG, "AIKit_End$ret")
if(ret==0){
realSpeak(content,language)
}else{
handleErrorEvent("${StringUtils.getString(R.string.module_tts_start_ai_handle_error)}${ret}")
}
}
}
aiHandle = null
return
}