Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
SuZhouAvp
Commits
a3f2ec3b
Commit
a3f2ec3b
authored
Jun 23, 2025
by
p x
Browse files
添加停车场车位数据
parent
1141bca5
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
a3f2ec3b
...
@@ -4,4 +4,39 @@
...
@@ -4,4 +4,39 @@
https://protobuf.dev/getting-started/javatutorial/
https://protobuf.dev/getting-started/javatutorial/
protoc --java_out=app
\s
rc
\m
ain
\j
ava
\
-I app
\s
rc
\m
ain
\p
roto
\
response.proto
protoc --java_out=app
\s
rc
\m
ain
\j
ava
\
-I app
\s
rc
\m
ain
\p
roto
\
response.proto
protoc --java_out=app
\s
rc
\m
ain
\j
ava
\
-I d:
\W
orkSpace
\s
uzhouavp
\a
pp
\s
rc
\m
ain
\p
roto
\
response.proto
protoc --java_out=app
\s
rc
\m
ain
\j
ava
\
-I d:
\W
orkSpace
\s
uzhouavp
\a
pp
\s
rc
\m
ain
\p
roto
\
response.proto
\ No newline at end of file
## websocket 订阅字典
var subDic = mapOf(
"/topic/vehicle" to "/avp/api/VL961/vehicle/1694264612474306561",//车辆位姿数据
"/topic/dataMerge" to "/avp/api/VL961/dataMerge",//感知目标物
"/topic/signal" to "/avp/api/VL961/signal",
"/topic/v2xStart" to "/avp/api/VL961/v2xStart",//v2x预警开始
"/topic/v2xEnd" to "/avp/api/VL961/v2xEnd",//v2x预警结束
"/topic/vehicleStatus" to "/avp/api/VL961/vehicleStatus",//联网车辆数据
"/topic/timeDelay" to "/avp/api/VL961/timeDelay",
"/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事件
)
## websocket回调字典
var dic = mapOf(
5231 to "/topic/vehicle",
5232 to "/topic/dataMerge",
5233 to "topic/signa",
5234 to "/topic/v2xStart",
5235 to "/topic/v2xEnd",
5236 to "/topic/vehicleStatus",
5237 to "/topic/timeDelay",
1 to "/topic/point",
52310 to "/topic/linePlaning",
52311 to "/topic/rsiEvent",
52312 to "/topic/partLine",
)
## 获取订单信息 getOrderData 后只有当avpStatus=3或5的时候需要路径规划
app/src/main/assets/SpaceJSON.json
0 → 100644
View file @
a3f2ec3b
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/bean/LinePlaningBean.kt
View file @
a3f2ec3b
package
com.sd.cavphmi.bean
package
com.sd.cavphmi.bean
/**全局路径发生切换***/
/**全局路径发生切换***/
class
LinePlaningBean
{
data class
LinePlaningBean
(
}
val
objectData
:
List
<
LinePlaning
>,
\ No newline at end of file
val
wsTime
:
Long
)
data class
LinePlaning
(
var
line
:
List
<
List
<
Double
>>)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/PartLineBean.kt
View file @
a3f2ec3b
package
com.sd.cavphmi.bean
package
com.sd.cavphmi.bean
/**局部路径***/
/**局部路径***/
class
PartLineBean
{
data class
PartLineBean
(
val
objectData
:
List
<
PartLine
>)
}
\ No newline at end of file
data class
PartLine
(
var
type
:
Int
,
var
pointStr
:
String
,
val
globalPath
:
List
<
List
<
Double
>>,
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/SpaceDataLocBean.kt
0 → 100644
View file @
a3f2ec3b
package
com.sd.cavphmi.bean
//class SpaceDataLocBean : ArrayList<SpaceDataLocBeanItem>()
/***本地停车场***/
data class
SpaceDataLocBeanItem
(
val
center
:
List
<
Double
>,
val
controlPoint
:
List
<
Double
>,
val
coordinates
:
List
<
List
<
Double
>>,
val
heading
:
Int
,
val
spaceCode
:
String
,
val
type
:
String
)
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/bean/WebSetBean.kt
View file @
a3f2ec3b
...
@@ -4,12 +4,12 @@ object WebSetBean {
...
@@ -4,12 +4,12 @@ object WebSetBean {
/* "/topic/vehicle"to "/topic/vehicle/1556919708184276993", */
/* "/topic/vehicle"to "/topic/vehicle/1556919708184276993", */
//目前只有车辆和感知
//目前只有车辆和感知
var
subDic
=
mapOf
(
var
subDic
=
mapOf
(
"/topic/vehicle"
to
"/avp/api/VL961/vehicle/1694264612474306561"
,
"/topic/vehicle"
to
"/avp/api/VL961/vehicle/1694264612474306561"
,
//车辆位姿数据
"/topic/dataMerge"
to
"/avp/api/VL961/dataMerge"
,
"/topic/dataMerge"
to
"/avp/api/VL961/dataMerge"
,
//感知目标物
"/topic/signal"
to
"/avp/api/VL961/signal"
,
"/topic/signal"
to
"/avp/api/VL961/signal"
,
"/topic/v2xStart"
to
"/avp/api/VL961/v2xStart"
,
"/topic/v2xStart"
to
"/avp/api/VL961/v2xStart"
,
//v2x预警开始
"/topic/v2xEnd"
to
"/avp/api/VL961/v2xEnd"
,
"/topic/v2xEnd"
to
"/avp/api/VL961/v2xEnd"
,
//v2x预警结束
"/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/linePlaning"
to
"/avp/api/VL961/linePlaning"
,
//全局路径发生切换
...
...
app/src/main/java/com/sd/cavphmi/moudule/NetworkModule.kt
View file @
a3f2ec3b
...
@@ -37,7 +37,7 @@ object NetworkModule {
...
@@ -37,7 +37,7 @@ object NetworkModule {
var
logging
=
HttpLoggingInterceptor
()
var
logging
=
HttpLoggingInterceptor
()
init
{
init
{
logging
.
level
=
HttpLoggingInterceptor
.
Level
.
NONE
logging
.
level
=
HttpLoggingInterceptor
.
Level
.
BODY
}
}
...
...
app/src/main/java/com/sd/cavphmi/repositorys/ParseSocketRepo.kt
View file @
a3f2ec3b
...
@@ -80,7 +80,7 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
...
@@ -80,7 +80,7 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
}
}
/***获取路径规划***/
/***获取路径规划***/
suspend
fun
getLinePlaning
(
vehiclePlate
:
String
):
MyResult
<
ParkLinePlan
>
{
suspend
fun
getLinePlaning
(
vehiclePlate
:
String
=
"吉AC242"
):
MyResult
<
ParkLinePlan
>
{
var
map
=
mutableMapOf
(
"vehiclePlate"
to
vehiclePlate
)
var
map
=
mutableMapOf
(
"vehiclePlate"
to
vehiclePlate
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
try
{
...
...
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
a3f2ec3b
...
@@ -51,6 +51,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
...
@@ -51,6 +51,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
viewModel
.
getCurrentTime
()
viewModel
.
getCurrentTime
()
viewModel
.
getMobileNetworkSignal
()
viewModel
.
getMobileNetworkSignal
()
viewModel
.
getOrderData
()
viewModel
.
getOrderData
()
viewModel
.
getSpaceDataLoc
()
// viewModel.getSpaceData()
// viewModel.getSpaceData()
//test
//test
// viewModel.findPathPlanning()
// viewModel.findPathPlanning()
...
...
app/src/main/java/com/sd/cavphmi/utils/FileIoUtils.kt
View file @
a3f2ec3b
...
@@ -21,35 +21,36 @@ object FileIoUtils {
...
@@ -21,35 +21,36 @@ object FileIoUtils {
/**
/**
* 读取asset 文件
* 读取asset 文件
*/
*/
fun
getAssetContent
(
context
:
Context
,
fileName
:
String
):
String
{
suspend
fun
getAssetContent
(
context
:
Context
,
fileName
:
String
):
String
{
val
assetManager
=
context
.
assets
return
withContext
(
Dispatchers
.
IO
)
{
var
stringBuilder
=
StringBuilder
()
val
assetManager
=
context
.
assets
var
bf
:
BufferedReader
?
=
null
var
stringBuilder
=
StringBuilder
()
try
{
var
bf
:
BufferedReader
?
=
null
val
inputReader
=
InputStreamReader
(
assetManager
.
open
(
fileName
))
try
{
bf
=
BufferedReader
(
inputReader
)
val
inputReader
=
InputStreamReader
(
assetManager
.
open
(
fileName
))
var
line
=
""
bf
=
BufferedReader
(
inputReader
)
while
(!
bf
.
run
{
var
line
=
""
line
=
readLine
()
while
(!
bf
.
run
{
return
@run
line
line
=
readLine
()
}.
isNullOrEmpty
())
{
return
@run
line
stringBuilder
.
append
(
line
)
}.
isNullOrEmpty
())
{
stringBuilder
.
append
(
line
)
}
bf
?.
close
()
return
@withContext
stringBuilder
.
toString
()
}
catch
(
e
:
IOException
)
{
e
.
printStackTrace
()
}
finally
{
bf
?.
close
()
assetManager
.
close
()
}
}
bf
?.
close
()
return
@withContext
""
assetManager
.
close
()
return
stringBuilder
.
toString
()
}
catch
(
e
:
IOException
)
{
e
.
printStackTrace
()
return
""
}
finally
{
bf
?.
close
()
assetManager
.
close
()
}
}
}
}
suspend
fun
getAssetMock
(
context
:
Context
,
fileName
:
String
,
dst
:
MutableList
<
String
>):
Int
{
suspend
fun
getAssetMock
(
context
:
Context
,
fileName
:
String
,
dst
:
MutableList
<
String
>):
Int
{
return
withContext
(
Dispatchers
.
IO
)
{
return
withContext
(
Dispatchers
.
IO
)
{
val
assetManager
=
context
.
assets
val
assetManager
=
context
.
assets
var
bf
:
BufferedReader
?
=
null
var
bf
:
BufferedReader
?
=
null
try
{
try
{
...
@@ -69,7 +70,7 @@ object FileIoUtils {
...
@@ -69,7 +70,7 @@ object FileIoUtils {
}
finally
{
}
finally
{
bf
?.
close
()
bf
?.
close
()
}
}
return
@withContext
0
return
@withContext
0
}
}
}
}
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
a3f2ec3b
package
com.sd.cavphmi.viewmodels
package
com.sd.cavphmi.viewmodels
import
android.content.Context
import
android.content.Context
import
android.text.TextUtils
import
androidx.activity.viewModels
import
androidx.databinding.ObservableField
import
androidx.databinding.ObservableField
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.viewModelScope
import
androidx.lifecycle.viewModelScope
import
com.google.gson.Gson
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
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.LinePlaningBean
...
@@ -17,6 +16,7 @@ import com.sd.cavphmi.bean.PartLineBean
...
@@ -17,6 +16,7 @@ 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.RsiEventBean
import
com.sd.cavphmi.bean.SpaceDataLocBeanItem
import
com.sd.cavphmi.bean.SpaceNoBean
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
...
@@ -35,6 +35,7 @@ import kotlinx.coroutines.launch
...
@@ -35,6 +35,7 @@ import kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
kotlinx.coroutines.withContext
import
org.java_websocket.handshake.ServerHandshake
import
org.java_websocket.handshake.ServerHandshake
import
protocol.Response
import
protocol.Response
import
java.lang.reflect.Type
import
java.net.URI
import
java.net.URI
import
java.util.Timer
import
java.util.Timer
import
java.util.TimerTask
import
java.util.TimerTask
...
@@ -51,6 +52,7 @@ class MainVm @Inject constructor(
...
@@ -51,6 +52,7 @@ class MainVm @Inject constructor(
private
var
client
:
MyWebSocketClient
?
=
null
private
var
client
:
MyWebSocketClient
?
=
null
private
var
gson
=
Gson
()
private
var
gson
=
Gson
()
//模拟操作
//模拟操作
lateinit
var
mockVM
:
MockVM
lateinit
var
mockVM
:
MockVM
...
@@ -73,7 +75,7 @@ class MainVm @Inject constructor(
...
@@ -73,7 +75,7 @@ class MainVm @Inject constructor(
var
orderBean
=
MutableLiveData
<
OrderBean
>()
var
orderBean
=
MutableLiveData
<
OrderBean
>()
//老停车状态,用于判断状态切换
//老停车状态,用于判断状态切换
private
var
oldAvpStatus
=
-
1
//
private var oldAvpStatus = -1
// 是否处理路径规划显示的路径
// 是否处理路径规划显示的路径
private
var
needDealPath
=
false
private
var
needDealPath
=
false
...
@@ -143,10 +145,11 @@ class MainVm @Inject constructor(
...
@@ -143,10 +145,11 @@ class MainVm @Inject constructor(
fun
getOrderData
()
{
fun
getOrderData
()
{
orderTimer
.
schedule
(
object
:
TimerTask
()
{
orderTimer
.
schedule
(
object
:
TimerTask
()
{
override
fun
run
()
{
override
fun
run
()
{
var
vehiclePlate
=
carVehicle
.
value
?.
vehicleData
?.
get
(
0
)
?.
vehiclePlate
?:
""
// var vehiclePlate = carVehicle.value?.vehicleData?.get(0)?.vehiclePlate ?: ""
if
(
TextUtils
.
isEmpty
(
vehiclePlate
))
{
// if (TextUtils.isEmpty(vehiclePlate)) {
return
// return
}
// }
var
vehiclePlate
=
"吉AC242"
viewModelScope
.
launch
{
viewModelScope
.
launch
{
var
result
=
var
result
=
parseSocketRepo
.
getOrderData
(
vehiclePlate
)
parseSocketRepo
.
getOrderData
(
vehiclePlate
)
...
@@ -155,24 +158,31 @@ class MainVm @Inject constructor(
...
@@ -155,24 +158,31 @@ class MainVm @Inject constructor(
println
(
"-------订单信息---- = ${result.data}"
)
println
(
"-------订单信息---- = ${result.data}"
)
orderBean
.
value
=
result
.
data
orderBean
.
value
=
result
.
data
var
avpStatus
=
result
.
data
.
avpStatus
var
avpStatus
=
result
.
data
.
avpStatus
var
plateNo
=
result
.
data
.
plateNo
// var plateNo = result.data.plateNo
if
(
oldAvpStatus
!=
avpStatus
)
{
if
(
avpStatus
==
3
)
{
//泊车
if
(
avpStatus
!=
3
&&
oldAvpStatus
==
3
)
{
startParkingVehicle
(
"吉AC242"
)
// endParkingVehicle() // 结束泊车
}
else
if
(
avpStatus
==
5
)
{
//招车
}
else
if
(
avpStatus
==
3
)
{
startRecruitmentVehicle
(
"吉AC242"
)
startParkingVehicle
(
plateNo
)
// 开始泊车
}
else
{
}
endParkingVehicle
()
// 结束泊车
if
(
avpStatus
!=
5
&&
oldAvpStatus
==
5
)
{
endRecruitmentVehicle
()
//// 由招车转为其他状态
// 由招车转为其他状态
endRecruitmentVehicle
()
}
else
if
(
avpStatus
==
5
)
{
// 招车需要显示路径
startRecruitmentVehicle
(
plateNo
)
}
oldAvpStatus
=
avpStatus
}
}
}
}
// 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
->
{
is
MyResult
.
Error
->
{
println
(
"-------订单信息 ERROR---- = ${result}"
)
println
(
"-------订单信息 ERROR---- = ${result}"
)
}
}
...
@@ -180,7 +190,7 @@ class MainVm @Inject constructor(
...
@@ -180,7 +190,7 @@ class MainVm @Inject constructor(
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
// FileIoUtils.writeToFile(gson.toJson(bean), "carvehicle.txt")
}
}
}
}
},
3000
,
1000
*
1
0
)
},
3000
,
1000
*
5
0
)
}
}
/**开始泊车*/
/**开始泊车*/
...
@@ -259,7 +269,7 @@ class MainVm @Inject constructor(
...
@@ -259,7 +269,7 @@ class MainVm @Inject constructor(
/**
/**
* 获取路径规划
* 获取路径规划
*/
*/
fun
findPathPlanning
(
vehiclePlate
:
String
=
"吉AC242"
,
ifParking
:
Boolean
=
true
)
{
fun
findPathPlanning
(
vehiclePlate
:
String
,
ifParking
:
Boolean
=
true
)
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
var
result
=
parseSocketRepo
.
getLinePlaning
(
vehiclePlate
)
var
result
=
parseSocketRepo
.
getLinePlaning
(
vehiclePlate
)
when
(
result
)
{
when
(
result
)
{
...
@@ -285,8 +295,7 @@ class MainVm @Inject constructor(
...
@@ -285,8 +295,7 @@ class MainVm @Inject constructor(
}
}
/**查询车位信息 判断车位上是否有车**/
/**查询车位信息**/
fun
getSpaceData
()
{
fun
getSpaceData
()
{
carSpaNoTimer
.
schedule
(
object
:
TimerTask
()
{
carSpaNoTimer
.
schedule
(
object
:
TimerTask
()
{
override
fun
run
()
{
override
fun
run
()
{
...
@@ -308,6 +317,17 @@ class MainVm @Inject constructor(
...
@@ -308,6 +317,17 @@ class MainVm @Inject constructor(
},
4000
,
1000
*
20
)
},
4000
,
1000
*
20
)
}
}
/**获取本地车位**/
fun
getSpaceDataLoc
()
{
viewModelScope
.
launch
{
var
str
=
FileIoUtils
.
getAssetContent
(
context
,
"SpaceJSON.json"
)
var
ty
=
object
:
TypeToken
<
List
<
SpaceDataLocBeanItem
>>()
{
}.
type
var
carNo
=
gson
.
fromJson
<
List
<
SpaceDataLocBeanItem
>>(
str
,
ty
)
}
}
/**
/**
* 根据停车位编号,获取停车位的具体信息
* 根据停车位编号,获取停车位的具体信息
* @param {*} parkingValue
* @param {*} parkingValue
...
@@ -468,7 +488,7 @@ class MainVm @Inject constructor(
...
@@ -468,7 +488,7 @@ class MainVm @Inject constructor(
/*** 联网车辆位姿数据**/
/*** 联网车辆位姿数据**/
fun
subVehicle
(
mock
:
Boolean
=
false
):
LiveData
<
CarVehicle
>
{
fun
subVehicle
(
mock
:
Boolean
=
false
):
LiveData
<
CarVehicle
>
{
if
(
mock
)
{
if
(
mock
)
{
mockVM
.
onVehicleMock
(
carVehicle
,
heading
,
speed
)
mockVM
.
onVehicleMock
(
carVehicle
,
heading
,
speed
)
}
else
{
}
else
{
client
?.
send
(
getSendData
(
"/topic/vehicle"
))
client
?.
send
(
getSendData
(
"/topic/vehicle"
))
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment