Commit 9aff9409 authored by p x's avatar p x
Browse files

2

parent 827d0a40
{"callOrBackPoint":"125.1424934543.83896992","centrePoint":"125.14337396,43.83873198","extendPoint":"125.14333880,43.83866747","parkingSpace":"1D-001"}
package com.sd.cavphmi.bean package com.sd.cavphmi.bean
/***车辆位资数据**/ /***车辆位资数据
*{"vehicleData":[{"altitude":0.00,"brake":30,"gasPedal":20,"gear":2,"heading":208.61645962016533,"latitude":43.83869937,"longitude":125.14344480,"obuCode":"O-HK-2687","reportTime":1750300843548,"speed":0.00,"vehicleId":"1694264612474306561","vehiclePlate":"吉AC242","vehiclePurpose":"avp","vehiclePurposeName":"AVP车辆","wheelAngle":-375}],"wsTime":1750300843548}
* **/
data class CarVehicle( data class CarVehicle(
val vehicleData: List<CarVehicleData>, val vehicleData: List<CarVehicleData>,
val wsTime: Long val wsTime: Long
......
package com.sd.cavphmi.bean
/**全局路径发生切换***/
class LinePlaningBean {
}
\ No newline at end of file
package com.sd.cavphmi.bean
/***定车位变更
* {"centrePoint":"125.14337396,43.83873198","extendPoint":"125.14333880,43.83866747","callOrBackPoint":"125.1424934543.83896992","parkingSpace":"1D-001"}
* */
data class ParkBean(
val callOrBackPoint: String,
val centrePoint: String,
val extendPoint: String,
val parkingSpace: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/**开始泊车,获取路径规划
* {"vehicleId":"1700381241280815105","vehicleInfoId":"1694264612474306561","vehiclePlate":"吉AC242","taskId":"1935514619273338882","linkingLine":"118_0.00_-1","line":[[125.14350411033233,43.83873919249159],[125.14340202112747,43.83869489740147]],"spaceCode":null}
* **/
data class ParkLinePlan(
val line: List<List<Double>>,
val linkingLine: String,
val spaceCode: Any,
val taskId: String,
val vehicleId: String,
val vehicleInfoId: String,
val vehiclePlate: String
)
\ No newline at end of file
package com.sd.cavphmi.bean
/**局部路径***/
class PartLineBean {
}
\ No newline at end of file
package com.sd.cavphmi.bean
/***rsi事件**/
class RsiEventBean {
}
\ No newline at end of file
...@@ -12,6 +12,9 @@ object WebSetBean { ...@@ -12,6 +12,9 @@ object WebSetBean {
"/topic/vehicleStatus" to "/avp/api/VL961/vehicleStatus", "/topic/vehicleStatus" to "/avp/api/VL961/vehicleStatus",
"/topic/timeDelay" to "/avp/api/VL961/timeDelay", "/topic/timeDelay" to "/avp/api/VL961/timeDelay",
"/topic/points" to "/avp/api/VL961/points",//停车位变更 "/topic/points" to "/avp/api/VL961/points",//停车位变更
"/topic/linePlaning" to "/avp/api/VL961/linePlaning",//全局路径发生切换
"/topic/partLine" to "/avp/api/VL961/partLine",// // 局部路径
"/topic/rsiEvent" to "/avp/api/VL961/rsiEvent",// rsi事件
) )
var dic = mapOf( var dic = mapOf(
...@@ -23,6 +26,9 @@ object WebSetBean { ...@@ -23,6 +26,9 @@ object WebSetBean {
5236 to "/topic/vehicleStatus", 5236 to "/topic/vehicleStatus",
5237 to "/topic/timeDelay", 5237 to "/topic/timeDelay",
1 to "/topic/point", 1 to "/topic/point",
52310 to "/topic/linePlaning",
52311 to "/topic/rsiEvent",
52312 to "/topic/partLine",
) )
......
...@@ -94,35 +94,35 @@ object ShowCarStatuObject { ...@@ -94,35 +94,35 @@ object ShowCarStatuObject {
} }
in 1..45 -> { in 1..45 -> {
tv.setText("北偏东") tv.setText("北偏东${heading}°")
} }
in 46..89 -> { in 46..89 -> {
tv.setText("东偏北") tv.setText("东偏北${90-heading}°")
} }
in 91..135 -> { in 91..135 -> {
tv.setText("东偏南") tv.setText("东偏南${heading-90}°")
} }
in 136..179 -> { in 136..179 -> {
tv.setText("南偏东") tv.setText("南偏东${180 - heading}°")
} }
in 181..225 -> { in 181..225 -> {
tv.setText("南偏西") tv.setText("南偏西${heading - 180}°")
} }
in 226..269 -> { in 226..269 -> {
tv.setText("西偏南") tv.setText("西偏南${270 - heading}°")
} }
in 271..315 -> { in 271..315 -> {
tv.setText("西偏北") tv.setText("西偏北${heading - 270}°")
} }
in 316..359 -> { in 316..359 -> {
tv.setText("北偏西") tv.setText("北偏西${360 - heading}°")
} }
else -> { else -> {
......
package com.sd.cavphmi.bindadapters package com.sd.cavphmi.bindadapters
import android.graphics.Color
import android.text.Spannable import android.text.Spannable
import android.text.SpannableStringBuilder import android.text.SpannableStringBuilder
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.text.style.RelativeSizeSpan
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.text.set
import androidx.databinding.BindingAdapter
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import androidx.databinding.BindingAdapter
object ShowOrderObject { object ShowOrderObject {
......
package com.sd.cavphmi.net.httpmothod package com.sd.cavphmi.net.httpmothod
import com.sd.cavphmi.bean.ParkLinePlan
import com.sd.cavphmi.bean.OrderBean import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.bean.SpaceNoBean import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.net.MyBaseResource import com.sd.cavphmi.net.MyBaseResource
import io.reactivex.rxjava3.core.Observable
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.POST import retrofit2.http.POST
...@@ -18,9 +18,7 @@ interface ClientRetrofitMethod { ...@@ -18,9 +18,7 @@ interface ClientRetrofitMethod {
// @GET("http://59.175.163.12/serv-addr/server.json") // @GET("http://59.175.163.12/serv-addr/server.json")
// fun getConfigurations(): Observable<List<ConfigurationBean>> // fun getConfigurations(): Observable<List<ConfigurationBean>>
// //
/**排序字段sortBy /***查询车位信息***/
排序方向order
*/
@POST("hkapi/pms/v1/parkingSpace/spaceNo") @POST("hkapi/pms/v1/parkingSpace/spaceNo")
suspend fun getSpaceData(@Body body: RequestBody): MyBaseResource<SpaceNoBean> suspend fun getSpaceData(@Body body: RequestBody): MyBaseResource<SpaceNoBean>
...@@ -32,6 +30,10 @@ interface ClientRetrofitMethod { ...@@ -32,6 +30,10 @@ interface ClientRetrofitMethod {
@POST("avp/siteLine/getNetworkQuality") @POST("avp/siteLine/getNetworkQuality")
suspend fun getTimeOut(): Any suspend fun getTimeOut(): Any
/***获取路径规划**/
@POST("avp/linePlaning/get")
suspend fun getLinePlaning(@Body body: RequestBody): ParkLinePlan
/** /**
* 话题根据评论ID查询所有回复 * 话题根据评论ID查询所有回复
......
package com.sd.cavphmi.repositorys package com.sd.cavphmi.repositorys
import com.google.gson.Gson import com.google.gson.Gson
import com.sd.cavphmi.bean.ParkLinePlan
import com.sd.cavphmi.bean.OrderBean import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.net.RequestBodyUtil import com.sd.cavphmi.net.RequestBodyUtil
import com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod import com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
import com.sd.cavphmi.utils.MyContants import com.sd.cavphmi.utils.MyContants
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import retrofit2.HttpException import retrofit2.HttpException
import java.io.EOFException
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject import javax.inject.Inject
class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: ClientRetrofitMethod) { class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: ClientRetrofitMethod) {
...@@ -27,9 +26,12 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie ...@@ -27,9 +26,12 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
} }
} }
suspend fun getOrderData(carPlate: String): MyResult<OrderBean> { /***订单信息**/
suspend fun getOrderData(carPlate: String?): MyResult<OrderBean> {
if (carPlate.isNullOrEmpty()) {
return MyResult.Error(MyContants.HTTP_ERROR, "error")
}
// if (!orderCalled.getAndSet(true)) { // if (!orderCalled.getAndSet(true)) {
delay(5000)
var map = mapOf("vehiclePlate" to carPlate) var map = mapOf("vehiclePlate" to carPlate)
var body = RequestBodyUtil.toRequestBody(map) var body = RequestBodyUtil.toRequestBody(map)
try { try {
...@@ -39,14 +41,14 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie ...@@ -39,14 +41,14 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
// println("e.message = ${e.message}") // println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error") return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) { } catch (e: Exception) {
return MyResult.Error(500, e.message ?: "error") return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
} }
// } else { // } else {
// return MyResult.Error(MyContants.ALREADT_ONCE, "") // return MyResult.Error(MyContants.ALREADT_ONCE, "")
// } // }
} }
/**测试网络超时***/
suspend fun getTimeOut(): MyResult<Int> { suspend fun getTimeOut(): MyResult<Int> {
try { try {
var star = System.currentTimeMillis() var star = System.currentTimeMillis()
...@@ -56,7 +58,37 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie ...@@ -56,7 +58,37 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
} catch (e: HttpException) { } catch (e: HttpException) {
return MyResult.Error(e.code(), e.message() ?: "error") return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) { } catch (e: Exception) {
return MyResult.Error(500, e.message ?: "error") return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
}
}
/***查询车位信息***/
suspend fun getSpaceData(): MyResult<SpaceNoBean> {
var map = mutableMapOf("pageNo" to 20, "pageSize" to 1000)
var body = RequestBodyUtil.toRequestBody(map)
try {
var bean = clientRetrofitMethod.getSpaceData(body)
return MyResult.Success(bean.data)
} catch (e: HttpException) {
// println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) {
return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
}
}
/***获取路径规划***/
suspend fun getLinePlaning(vehiclePlate:String): MyResult<ParkLinePlan> {
var map = mutableMapOf("vehiclePlate" to vehiclePlate)
var body = RequestBodyUtil.toRequestBody(map)
try {
var bean = clientRetrofitMethod.getLinePlaning(body)
return MyResult.Success(bean)
} catch (e: HttpException) {
println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error")
} catch (e: Exception) {
return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
} }
} }
......
...@@ -26,15 +26,5 @@ class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMe ...@@ -26,15 +26,5 @@ class SpaceNoRepo @Inject constructor(var clientRetrofitMethod: ClientRetrofitMe
suspend fun getSpaceData(): MyResult<SpaceNoBean> {
var map = mutableMapOf("pageNo" to 20, "pageSize" to 1000)
var body = RequestBodyUtil.toRequestBody(map)
try {
var bean = clientRetrofitMethod.getSpaceData(body)
return MyResult.Success(bean.data)
} catch (e: HttpException) {
println("e.message = ${e.message}")
return MyResult.Error(e.code(), e.message() ?: "error")
}
}
} }
\ No newline at end of file
...@@ -7,6 +7,7 @@ import com.sd.cavphmi.BR ...@@ -7,6 +7,7 @@ import com.sd.cavphmi.BR
import com.sd.cavphmi.R import com.sd.cavphmi.R
import com.sd.cavphmi.base.BaseActivity import com.sd.cavphmi.base.BaseActivity
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.ParkBean
import com.sd.cavphmi.bean.VehicleStats import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.databinding.ActivityMainBinding import com.sd.cavphmi.databinding.ActivityMainBinding
import com.sd.cavphmi.intfaces.OnConCan import com.sd.cavphmi.intfaces.OnConCan
...@@ -46,14 +47,35 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -46,14 +47,35 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
viewModel.startWS() viewModel.startWS()
viewModel.getCurrentTime() viewModel.getCurrentTime()
viewModel.getMobileNetworkSignal() viewModel.getMobileNetworkSignal()
viewModel.getOrderData()
viewModel.getSpaceData()
//test
// viewModel.findPathPlanning()
} }
override fun initListener() { override fun initListener() {
mockBt()
mockLis()
//订单数据
viewModel.orderBean.observe(this) {
binding.order = it
}
}
private fun mockLis() {
mockVM.orderBean.observe(this) {
binding.order = it
}
}
private fun mockBt() {
binding.btVehicle.setOnClickListener { binding.btVehicle.setOnClickListener {
viewModel.subVehicle().observe(this) { viewModel.subVehicle().observe(this) {
topicVehicle(it) topicVehicle(it)
} }
// mockVM.onVehicleMock()
} }
binding.btStatus.setOnClickListener { binding.btStatus.setOnClickListener {
viewModel.subVehicleStatus().observe(this) { viewModel.subVehicleStatus().observe(this) {
...@@ -71,37 +93,56 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -71,37 +93,56 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
viewModel.subEndV2x() viewModel.subEndV2x()
} }
binding.btChewei.setOnClickListener { binding.btChewei.setOnClickListener {
viewModel.subPoints() viewModel.subPoints().observe(this){
topicvPoints(it)
}
} }
//订单数据 binding.btAllline.setOnClickListener {
viewModel.orderBean.observe(this) { viewModel.subLinePlaning()
binding.order = it
} }
mockVM.orderBean.observe(this) { binding.btJubuline.setOnClickListener {
binding.order = it viewModel.subPartLine()
}
binding.btRsi.setOnClickListener {
viewModel.subRsiEvent()
} }
} }
/**车辆姿态**/ /**车辆姿态**/
private fun topicVehicle(bean: CarVehicle) { private fun topicVehicle(bean: CarVehicle) {
if (bean.vehicleData?.isNotEmpty() ?: false) {
viewModel.heading.set(bean.vehicleData.get(0).heading.toInt())
viewModel.speed.set(bean.vehicleData.get(0).speed)
}
} }
/**联网车辆状态数据topic**/ /**联网车辆状态数据**/
private fun topicVehicleStatus(bean: VehicleStats) { private fun topicVehicleStatus(bean: VehicleStats) {
if (bean.vehicleData?.isNotEmpty() ?: false) { if ((bean.vehicleData.count()) > 0) {
var driveMode = bean.vehicleData.get(0).driveMode
var str = when (driveMode) { }
0 -> "自动驾驶" }
1 -> "人工驾驶" /**停车位变更**/
2 -> "远程驾驶" private fun topicvPoints(bean: ParkBean) {
else -> "—— ——" var curValue = bean.parkingSpace
} //
viewModel.driveMode.set(str) if (viewModel.spaceCode.isNotEmpty()) {
// // 更新停车位的信息
var parkingSpot = viewModel.getParkingSpot(curValue)
// this.$refs.basisCesium.updateParkingSpace(parkingSpot);
} else {
// // 第一次需要添加停车位的效果
// let carPostion = [baseData.mainLocation.lon, baseData.mainLocation.lat];
// // 开启前进自主泊车效果
// let parkingSpot = this.getParkingSpot(curValue);
// this.$refs.basisCesium.addForwardParkingEffect({
// id: baseData.mainCarID,
// carPostion: carPostion,
// spaceInfo: parkingSpot,
// });
} }
//
// // 记录 spaceCode 给倒车入库的时候用
viewModel.spaceCode = curValue
//
// this.highlightSpaceEntity(spaceCode)
} }
......
...@@ -14,4 +14,6 @@ object MyContants { ...@@ -14,4 +14,6 @@ object MyContants {
/***已经**/ /***已经**/
const val ALREADT_ONCE = -1 const val ALREADT_ONCE = -1
const val HTTP_ERROR = 500
} }
\ No newline at end of file
package com.sd.cavphmi.viewmodels package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import android.telephony.PhoneStateListener import android.text.TextUtils
import android.telephony.SignalStrength
import android.telephony.TelephonyCallback
import android.telephony.TelephonyManager
import androidx.databinding.ObservableField import androidx.databinding.ObservableField
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
...@@ -12,9 +9,14 @@ import androidx.lifecycle.viewModelScope ...@@ -12,9 +9,14 @@ import androidx.lifecycle.viewModelScope
import com.google.gson.Gson import com.google.gson.Gson
import com.sd.cavphmi.base.MyBaseViewModel import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.LinePlaningBean
import com.sd.cavphmi.bean.OrderBean import com.sd.cavphmi.bean.OrderBean
import com.sd.cavphmi.bean.ParkBean
import com.sd.cavphmi.bean.PartLineBean
import com.sd.cavphmi.bean.PerTarget import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.bean.ReqBean import com.sd.cavphmi.bean.ReqBean
import com.sd.cavphmi.bean.RsiEventBean
import com.sd.cavphmi.bean.SpaceNoBean
import com.sd.cavphmi.bean.VToXImgBean import com.sd.cavphmi.bean.VToXImgBean
import com.sd.cavphmi.bean.VehicleStats import com.sd.cavphmi.bean.VehicleStats
import com.sd.cavphmi.bean.WebSetBean import com.sd.cavphmi.bean.WebSetBean
...@@ -23,12 +25,13 @@ import com.sd.cavphmi.repositorys.ParseSocketRepo ...@@ -23,12 +25,13 @@ import com.sd.cavphmi.repositorys.ParseSocketRepo
import com.sd.cavphmi.utils.DateUtils import com.sd.cavphmi.utils.DateUtils
import com.sd.cavphmi.utils.FileIoUtils import com.sd.cavphmi.utils.FileIoUtils
import com.sd.cavphmi.utils.MyContants import com.sd.cavphmi.utils.MyContants
import com.sd.cavphmi.utils.SystemUtils
import com.sd.cavphmi.utils.ToastHelper import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.websockets.MyWebSocketClient import com.sd.cavphmi.websockets.MyWebSocketClient
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.java_websocket.handshake.ServerHandshake import org.java_websocket.handshake.ServerHandshake
import protocol.Response import protocol.Response
import java.net.URI import java.net.URI
...@@ -58,9 +61,21 @@ class MainVm @Inject constructor( ...@@ -58,9 +61,21 @@ class MainVm @Inject constructor(
//感知目标物 //感知目标物
var targetPre = MutableLiveData<PerTarget>() var targetPre = MutableLiveData<PerTarget>()
//停车位变更
var parkBean = MutableLiveData<ParkBean>()
//停车位编码
var spaceCode = ""
//订单信息 //订单信息
var orderBean = MutableLiveData<OrderBean>() var orderBean = MutableLiveData<OrderBean>()
//老停车状态,用于判断状态切换
private var oldAvpStatus = -1
// 是否处理路径规划显示的路径
private var needDealPath = false
//驾驶模式 //驾驶模式
var driveMode = ObservableField("") var driveMode = ObservableField("")
...@@ -76,12 +91,19 @@ class MainVm @Inject constructor( ...@@ -76,12 +91,19 @@ class MainVm @Inject constructor(
//网络延时时间差 //网络延时时间差
var timeOutDiff = ObservableField(-1) var timeOutDiff = ObservableField(-1)
// Timer 可用于执行延迟任务或循环任务 // 当前时间
private var curTimer = Timer() private var curTimer = Timer()
// Timer 可用于执行延迟任务或循环任务 // 信号强度
private var netSingTimer = Timer() private var netSingTimer = Timer()
// 订单详情
private var orderTimer = Timer()
// 车位信息
private var carSpaNoTimer = Timer()
/***获取当前时间**/ /***获取当前时间**/
fun getCurrentTime() { fun getCurrentTime() {
curTimer.schedule(object : TimerTask() { curTimer.schedule(object : TimerTask() {
...@@ -92,6 +114,153 @@ class MainVm @Inject constructor( ...@@ -92,6 +114,153 @@ class MainVm @Inject constructor(
}, 2000, 1000 * 60) }, 2000, 1000 * 60)
} }
/***获取订单信息
* @param vehiclePlate 车牌号
* **/
fun getOrderData() {
orderTimer.schedule(object : TimerTask() {
override fun run() {
var vehiclePlate = carVehicle.value?.vehicleData?.get(0)?.vehiclePlate ?: ""
if (TextUtils.isEmpty(vehiclePlate)) {
return
}
viewModelScope.launch {
var result =
parseSocketRepo.getOrderData(vehiclePlate)
when (result) {
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value = result.data
var avpStatus = result.data.avpStatus
var plateNo = result.data.plateNo
if (oldAvpStatus != avpStatus) {
if (avpStatus != 3 && oldAvpStatus == 3) {
// endParkingVehicle() // 结束泊车
} else if (avpStatus == 3) {
startParkingVehicle(plateNo) // 开始泊车
}
if (avpStatus != 5 && oldAvpStatus == 5) {
// 由招车转为其他状态
endRecruitmentVehicle()
} else if (avpStatus == 5) {
// 招车需要显示路径
startRecruitmentVehicle(plateNo)
}
oldAvpStatus = avpStatus
}
}
is MyResult.Error -> {
println("-------订单信息 ERROR---- = ${result}")
}
}
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
}
}
}, 3000, 1000 * 10)
}
/**开始泊车*/
private fun startParkingVehicle(plateNo: String) {
// worker中处理路径规划显示的路径
needDealPath = true
// 获取规划好的路径
findPathPlanning(plateNo)
}
/**
* 结束泊车
*/
private fun endParkingVehicle() {
// 移除自主泊车所有效果
// this.$refs.basisCesium.removeParkingEffect();
//
// // 停车位信息重置
// spaceCode = "";
// this.highlightSpaceEntity(spaceCode)
//
// // 是否处理路径规划显示的路径
// this.needDealPath = false;
//
// // 小地图上不显示线
// cesiumMainIns.updateLinePosition2D(polyine2d, {
// before: [],
// after: [],
// left: [],
// right: []
// });
// console.log('window.leftPath', window.leftPath)
}
/*** 开始招车,显示路径规划路径*/
private fun startRecruitmentVehicle(vehiclePlate: String) {
// worker不处理路径规划显示的路径
this.needDealPath = true
// 获取规划好的路径
findPathPlanning(vehiclePlate, false)
// 开始招车的时候就开始记录了
// window.needRecord = true;
// window.recordData = {
// vehicle: [],
// vehicleStatus: [],
// dataMerge: [],
// v2xStart: [],
// v2xEnd: [],
// points: [],
// linePlaning: [],
// linePlaningHttp: [],
// partLine: [],
// rsiEvent: [],
// }
}
/** 由招车转为其他状态,移除路径规划路线*/
private fun endRecruitmentVehicle() {
// worker中不处理路径规划显示的路径
this.needDealPath = false;
//
// // 移除路面上的路线
// this.$refs.basisCesium.removePathPlanLine();
//
// // 小地图上不显示线
// cesiumMainIns.updateLinePosition2D(polyine2d, {
// before: [],
// after: [],
// left: [],
// right: []
// });
}
/**
* 获取路径规划
*/
fun findPathPlanning(vehiclePlate: String = "吉AC242", ifParking: Boolean = true) {
viewModelScope.launch {
var result = parseSocketRepo.getLinePlaning(vehiclePlate)
when (result) {
is MyResult.Success -> {
var lins = result.data.line
if (lins.isNotEmpty()) {
// this.$refs.basisCesium.findPathPlanning(res);
// // 泊车需要高亮车位,召车不高亮
if (ifParking) {
// spaceCode = res.spaceCode
} else {
// spaceCode = ''
}
// this.highlightSpaceEntity(spaceCode)
}
}
else -> {
println("-----获取路径规划 = ${result}")
}
}
}
}
/***获取信号强度**/ /***获取信号强度**/
fun getMobileNetworkSignal() { fun getMobileNetworkSignal() {
netSingTimer.schedule(object : TimerTask() { netSingTimer.schedule(object : TimerTask() {
...@@ -113,6 +282,45 @@ class MainVm @Inject constructor( ...@@ -113,6 +282,45 @@ class MainVm @Inject constructor(
}, 5000, 1000 * 60) }, 5000, 1000 * 60)
} }
/**查询车位信息**/
fun getSpaceData() {
carSpaNoTimer.schedule(object : TimerTask() {
override fun run() {
viewModelScope.launch {
var result = parseSocketRepo.getSpaceData()
when (result) {
is MyResult.Success<SpaceNoBean> -> {
println("-------------查询车位信息= ${result}")
FileIoUtils.writeToFile(gson.toJson(result.data), "spaceno.txt")
}
is MyResult.Error -> {
println("-------------查询车位信息 Error= ${result}")
// carSpaNoTimer.cancel()
}
}
}
}
}, 4000, 1000 * 20)
}
/**
* 根据停车位编号,获取停车位的具体信息
* @param {*} parkingValue
*/
fun getParkingSpot(parkingValue: String) {
viewModelScope.launch {
withContext(Dispatchers.IO) {
// // 查询倒车入库的车位
// const parkingSpot = SpaceData.find(
// (spot) => spot.spaceCode === parkingValue
// );
// return parkingSpot;
}
}
}
fun startWS() { fun startWS() {
// val httpHeaders = mutableMapOf<String, String>() // val httpHeaders = mutableMapOf<String, String>()
// httpHeaders.put("Cookie", "username=nemo") // httpHeaders.put("Cookie", "username=nemo")
...@@ -130,6 +338,8 @@ class MainVm @Inject constructor( ...@@ -130,6 +338,8 @@ class MainVm @Inject constructor(
fun cleanRes() { fun cleanRes() {
curTimer.cancel() curTimer.cancel()
netSingTimer.cancel() netSingTimer.cancel()
orderTimer.cancel()
carSpaNoTimer.cancel()
closeWS() closeWS()
} }
...@@ -140,9 +350,9 @@ class MainVm @Inject constructor( ...@@ -140,9 +350,9 @@ class MainVm @Inject constructor(
} }
} }
private var onSocketCb = object : MyWebSocketClient.OnSocketCb { private var onSocketCb = object : MyWebSocketClient.OnSocketCb {
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
println("--------Thread.currentThread() = ${Thread.currentThread()}")
} }
override fun onClose(code: Int, reason: String?, remote: Boolean) { override fun onClose(code: Int, reason: String?, remote: Boolean) {
...@@ -158,20 +368,11 @@ class MainVm @Inject constructor( ...@@ -158,20 +368,11 @@ class MainVm @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
val bean = val bean =
parseSocketRepo.parseDataBean(res.data, CarVehicle::class.java) parseSocketRepo.parseDataBean(res.data, CarVehicle::class.java)
println("---车辆位姿数据 = ${bean}") println("------车辆位姿数据 = ${res.data}")
var result = if ((bean.vehicleData.count()) > 0) {
parseSocketRepo.getOrderData(bean.vehicleData?.get(0)?.vehiclePlate ?: "") heading.set(bean.vehicleData.get(0).heading.toInt())
when (result) { speed.set(bean.vehicleData.get(0).speed)
is MyResult.Success<OrderBean> -> {
println("-------订单信息---- = ${result.data}")
orderBean.value = result.data
}
else -> {
// println("-------Error---- = ${result.msg}")
}
} }
carVehicle.value = bean
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt") // FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
} }
} }
...@@ -180,7 +381,16 @@ class MainVm @Inject constructor( ...@@ -180,7 +381,16 @@ class MainVm @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
val bean = val bean =
parseSocketRepo.parseDataBean(res.data, VehicleStats::class.java) parseSocketRepo.parseDataBean(res.data, VehicleStats::class.java)
println("---联网车辆状态数据 = ${bean}") println("------联网车辆状态数据 = ${res.data}")
if ((bean.vehicleData.count()) > 0) {
val str = when (bean.vehicleData[0].driveMode) {
0 -> "自动驾驶"
1 -> "人工驾驶"
2 -> "远程驾驶"
else -> "—— ——"
}
driveMode.set(str)
}
vehicleStat.value = bean vehicleStat.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "vehicleS.txt") FileIoUtils.writeToFile(gson.toJson(bean), "vehicleS.txt")
...@@ -190,22 +400,64 @@ class MainVm @Inject constructor( ...@@ -190,22 +400,64 @@ class MainVm @Inject constructor(
override fun onTarget(res: Response.SocketResponse) { override fun onTarget(res: Response.SocketResponse) {
viewModelScope.launch { viewModelScope.launch {
var bean = parseSocketRepo.parseDataBean(res.data, PerTarget::class.java) var bean = parseSocketRepo.parseDataBean(res.data, PerTarget::class.java)
println("---感知目标物数据 = ${bean}") println("-----感知目标物数据 = ${bean}")
targetPre.value = bean targetPre.value = bean
// FileIoUtils.writeToFile(gson.toJson(bean), "target.txt") // FileIoUtils.writeToFile(gson.toJson(bean), "target.txt")
} }
} }
override fun onStartV2x(res: Response.SocketResponse) { override fun onStartV2x(res: Response.SocketResponse) {
println("--------onStartV2x") viewModelScope.launch {
println("-----V2X预警开始 = ${res.data}")
FileIoUtils.writeToFile(res.data, "onStartV2x.txt")
}
} }
override fun onEndV2x(res: Response.SocketResponse) { override fun onEndV2x(res: Response.SocketResponse) {
println("--------onEndV2x") println("--------V2X预警结束--${res.data}")
viewModelScope.launch {
}
} }
override fun onPoint(res: Response.SocketResponse) { override fun onPoint(res: Response.SocketResponse) {
println("--------onPoint") viewModelScope.launch {
println("-----停车位变更 = ${res.data}")
var bean = parseSocketRepo.parseDataBean(res.data, ParkBean::class.java)
parkBean.value = bean
FileIoUtils.writeToFile(gson.toJson(bean), "park.txt")
}
}
override fun onLinePlaning(res: Response.SocketResponse) {
viewModelScope.launch {
println("-----全局路径发生切换 = ${res.data}")
var bean = parseSocketRepo.parseDataBean(res.data, LinePlaningBean::class.java)
// parkBean.value = bean
FileIoUtils.writeToFile(res.data, "line_plan.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "line_plan.txt")
}
}
override fun onPartLine(res: Response.SocketResponse) {
viewModelScope.launch {
println("-----局部路径 = ${res.data}")
var bean = parseSocketRepo.parseDataBean(res.data, PartLineBean::class.java)
// parkBean.value = bean
FileIoUtils.writeToFile(res.data, "part_line.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "part_line.txt")
}
}
override fun onRsiEvent(res: Response.SocketResponse) {
viewModelScope.launch {
println("-----rsi事件 = ${res.data}")
var bean = parseSocketRepo.parseDataBean(res.data, RsiEventBean::class.java)
// parkBean.value = bean
// FileIoUtils.writeToFile(gson.toJson(bean), "rsi_event.txt")
FileIoUtils.writeToFile(res.data, "rsi_event.txt")
}
} }
} }
...@@ -250,11 +502,31 @@ class MainVm @Inject constructor( ...@@ -250,11 +502,31 @@ class MainVm @Inject constructor(
} }
/*** 更新停车位**/ /*** 更新停车位**/
fun subPoints() { fun subPoints(): LiveData<ParkBean> {
val reqStr = getSendData("/topic/points") val reqStr = getSendData("/topic/points")
client?.send(reqStr) client?.send(reqStr)
return parkBean
} }
/*** 全局路径发生切换**/
fun subLinePlaning() {
val reqStr = getSendData("/topic/linePlaning")
client?.send(reqStr)
}
/*** 局部路径**/
fun subPartLine() {
val reqStr = getSendData("/topic/partLine")
client?.send(reqStr)
}
/*** rsi事件**/
fun subRsiEvent() {
val reqStr = getSendData("/topic/rsiEvent")
client?.send(reqStr)
}
fun getSendData(key: String): String { fun getSendData(key: String): String {
var data = WebSetBean.subDic.get(key) var data = WebSetBean.subDic.get(key)
var req = ReqBean() var req = ReqBean()
...@@ -269,20 +541,5 @@ class MainVm @Inject constructor( ...@@ -269,20 +541,5 @@ class MainVm @Inject constructor(
ToastHelper.showCustViewShort(context, imgs.get("2")!!) ToastHelper.showCustViewShort(context, imgs.get("2")!!)
} }
fun getSpaceData() {
// viewModelScope.launch {
// var result = spaceNoRepo.getSpaceData()
// when (result) {
// is MyResult.Success<SpaceNoBean> -> {
// var a = 0
// }
//
// else -> {
// var b = 0
// }
// }
// }
}
} }
\ No newline at end of file
...@@ -53,7 +53,7 @@ class MyWebSocketClient : WebSocketClient { ...@@ -53,7 +53,7 @@ class MyWebSocketClient : WebSocketClient {
// System.out.println(TAG + " received ByteBuffer") // System.out.println(TAG + " received ByteBuffer")
val socketResponse = Response.SocketResponse.parseFrom(bytes) val socketResponse = Response.SocketResponse.parseFrom(bytes)
when (socketResponse.msgType) { when (socketResponse.msgType) {
5231 -> {//联网车辆位姿数据 5231 -> {//车辆位姿数据
onDataCb?.onVehicle(socketResponse) onDataCb?.onVehicle(socketResponse)
} }
5232 -> {//感知目标物数据 5232 -> {//感知目标物数据
...@@ -68,9 +68,18 @@ class MyWebSocketClient : WebSocketClient { ...@@ -68,9 +68,18 @@ class MyWebSocketClient : WebSocketClient {
5236 -> {//联网车辆状态数据 5236 -> {//联网车辆状态数据
onDataCb?.onVehicleStats(socketResponse) onDataCb?.onVehicleStats(socketResponse)
} }
1 -> {//更新停车场 1 -> {//停车位变更
onDataCb?.onPoint(socketResponse) onDataCb?.onPoint(socketResponse)
} }
52310 -> {//全局路径发生切换
onDataCb?.onLinePlaning(socketResponse)
}
52311 -> {//局部路径
onDataCb?.onPartLine(socketResponse)
}
52312 -> {//rsi事件
onDataCb?.onRsiEvent(socketResponse)
}
} }
} }
...@@ -103,7 +112,11 @@ class MyWebSocketClient : WebSocketClient { ...@@ -103,7 +112,11 @@ class MyWebSocketClient : WebSocketClient {
fun onTarget(res: Response.SocketResponse) fun onTarget(res: Response.SocketResponse)
fun onStartV2x(res: Response.SocketResponse) fun onStartV2x(res: Response.SocketResponse)
fun onEndV2x(res: Response.SocketResponse) fun onEndV2x(res: Response.SocketResponse)
/***停车位变更***/
fun onPoint(res: Response.SocketResponse) fun onPoint(res: Response.SocketResponse)
fun onLinePlaning(res: Response.SocketResponse)
fun onPartLine(res: Response.SocketResponse)
fun onRsiEvent(res: Response.SocketResponse)
} }
......
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
android:id="@+id/bt_status" android:id="@+id/bt_status"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="联网车辆状态数据" /> android:text="联网车辆状态" />
<Button <Button
android:id="@+id/bt_target" android:id="@+id/bt_target"
...@@ -159,6 +159,24 @@ ...@@ -159,6 +159,24 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="停车位变更" /> android:text="停车位变更" />
<Button
android:id="@+id/bt_allline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全局路径发生切换" />
<Button
android:id="@+id/bt_jubuline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="局部路径" />
<Button
android:id="@+id/bt_rsi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="rsi事件" />
</LinearLayout> </LinearLayout>
<RelativeLayout <RelativeLayout
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment