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
0a5baef9
Commit
0a5baef9
authored
Aug 18, 2025
by
p x
Browse files
登录
parent
09291f32
Changes
59
Expand all
Hide whitespace changes
Inline
Side-by-side
app/src/main/java/com/sd/cavphmi/repositorys/ParseSocketRepo.kt
View file @
0a5baef9
...
...
@@ -2,8 +2,8 @@ package com.sd.cavphmi.repositorys
import
com.google.gson.Gson
import
com.sd.cavphmi.bean.ParkLinePlan
import
com.sd.cavphmi.bean.OrderBean
import
com.sd.cavphmi.bean.SpaceNoBean
import
com.sd.cavphmi.bean.VehDetailBean
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.net.RequestBodyUtil
import
com.sd.cavphmi.net.httpmothod.ClientRetrofitMethod
...
...
@@ -13,7 +13,7 @@ import kotlinx.coroutines.withContext
import
retrofit2.HttpException
import
javax.inject.Inject
class
ParseSocketRepo
@Inject
constructor
(
private
va
l
clientRetrofitMethod
:
ClientRetrofitMethod
)
{
class
ParseSocketRepo
@Inject
constructor
(
private
va
r
clientRetrofitMethod
:
ClientRetrofitMethod
)
{
private
var
gson
=
Gson
()
...
...
@@ -26,16 +26,18 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
}
}
/***订单信息**/
suspend
fun
getOrderData
(
carPlate
:
String
?):
MyResult
<
OrderBean
>
{
if
(
carPlate
.
isNullOrEmpty
())
{
/***获取车辆详情
* @param id 车辆id
* **/
suspend
fun
getVehDetail
(
id
:
String
):
MyResult
<
VehDetailBean
>
{
if
(
id
.
isNullOrEmpty
())
{
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
"error"
)
}
// if (!orderCalled.getAndSet(true)) {
var
map
=
mapOf
(
"
vehiclePlate"
to
carPlate
)
var
map
=
mapOf
(
"
id"
to
id
)
var
body
=
RequestBodyUtil
.
toRequestBody
(
map
)
try
{
var
bean
=
clientRetrofitMethod
.
get
OrderData
(
body
)
var
bean
=
clientRetrofitMethod
.
get
VehDetail
(
body
)
return
MyResult
.
Success
(
bean
)
}
catch
(
e
:
HttpException
)
{
// println("e.message = ${e.message}")
...
...
@@ -47,52 +49,52 @@ class ParseSocketRepo @Inject constructor(private val clientRetrofitMethod: Clie
// return MyResult.Error(MyContants.ALREADT_ONCE, "")
// }
}
/**测试网络超时***/
suspend
fun
getTimeOut
():
MyResult
<
Int
>
{
try
{
var
star
=
System
.
currentTimeMillis
()
clientRetrofitMethod
.
getTimeOut
()
var
end
=
System
.
currentTimeMillis
()
return
MyResult
.
Success
(
end
.
minus
(
star
).
toInt
())
}
catch
(
e
:
HttpException
)
{
return
MyResult
.
Error
(
e
.
code
(),
e
.
message
()
?:
"error"
)
}
catch
(
e
:
Exception
)
{
return
MyResult
.
Error
(
MyContants
.
HTTP_ERROR
,
e
.
message
?:
"error"
)
}
}
/***查询车位信息
* 苏州hmi用的这个接口判断空闲车位
* ***/
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
)
{
//
// /**测试网络超时***/
// suspend fun getTimeOut(): MyResult<Int> {
// try {
// var star = System.currentTimeMillis()
// clientRetrofitMethod.getTimeOut()
// var end = System.currentTimeMillis()
// return MyResult.Success(end.minus(star).toInt())
// } catch (e: HttpException) {
// return MyResult.Error(e.code(), e.message() ?: "error")
// } catch (e: Exception) {
// return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
// }
// }
//
// /***查询车位信息
// * 苏州hmi用的这个接口判断空闲车位
// * ***/
// 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 = "吉AC242"): 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"
)
}
}
/***获取路径规划***/
suspend
fun
getLinePlaning
(
vehiclePlate
:
String
=
"吉AC242"
):
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"
)
}
}
// return MyResult.Error(e.code(), e.message() ?: "error")
// } catch (e: Exception) {
// return MyResult.Error(MyContants.HTTP_ERROR, e.message ?: "error")
// }
// }
// /**联网车辆状态数据***/
...
...
app/src/main/java/com/sd/cavphmi/ui/LoginActivity.kt
0 → 100644
View file @
0a5baef9
package
com.sd.cavphmi.ui
import
android.os.Bundle
import
androidx.activity.viewModels
import
com.google.android.material.snackbar.Snackbar
import
androidx.appcompat.app.AppCompatActivity
import
androidx.navigation.findNavController
import
androidx.navigation.ui.AppBarConfiguration
import
androidx.navigation.ui.navigateUp
import
androidx.navigation.ui.setupActionBarWithNavController
import
com.sd.cavphmi.R
import
com.sd.cavphmi.databinding.ActivityLoginBinding
import
com.sd.cavphmi.utils.SM4CryptoHelper
import
com.sd.cavphmi.viewmodels.LoginVm
import
com.sd.cavphmi.viewmodels.MainVm
import
dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class
LoginActivity
:
AppCompatActivity
()
{
private
lateinit
var
binding
:
ActivityLoginBinding
private
val
loginVm
:
LoginVm
by
viewModels
()
private
val
mainVm
:
MainVm
by
viewModels
()
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
binding
=
ActivityLoginBinding
.
inflate
(
layoutInflater
)
setContentView
(
binding
.
root
)
binding
.
btLogin
.
setOnClickListener
{
var
user
=
binding
.
etAccount
.
text
.
toString
()
var
pwd
=
binding
.
etPwd
.
text
.
toString
()
// "4CIHV37pDF8sx0ZXYmYah6HSgys7F7ULSMmm39uzppc"
var
key
=
"Cusc@itmp-sm4key"
.
toByteArray
()
var
pp
=
SM4CryptoHelper
.
encryptECB
(
key
,
pwd
.
toByteArray
())
loginVm
.
login
(
user
,
pp
,
276135
)
}
//获取车辆信息
binding
.
btVehinfo
.
setOnClickListener
{
mainVm
.
getVehDetail
()
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
0a5baef9
...
...
@@ -6,9 +6,6 @@ import androidx.lifecycle.ViewModelProvider
import
com.sd.cavphmi.BR
import
com.sd.cavphmi.R
import
com.sd.cavphmi.base.BaseActivity
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.ParkBean
import
com.sd.cavphmi.bean.VehicleStats
import
com.sd.cavphmi.databinding.ActivityMainBinding
import
com.sd.cavphmi.intfaces.OnConCan
import
com.sd.cavphmi.ui.fragment.CarPanelFragment
...
...
@@ -38,7 +35,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
}
private
val
mockVM
:
MockVM
by
viewModels
()
private
val
avpMapVM
:
AvpMapVM
by
viewModels
()
//
private val avpMapVM: AvpMapVM by viewModels()
private
lateinit
var
dialogFragment
:
ExitAppDialog
...
...
@@ -55,18 +52,11 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
override
fun
getToData
()
{
viewModel
.
startWS
()
// viewModel.getOrderData()
// viewModel.getSpaceDataLoc()
}
override
fun
initListener
()
{
mockBt
()
mockLis
()
//订单数据
viewModel
.
orderBean
.
observe
(
this
)
{
binding
.
order
=
it
}
}
private
fun
mockLis
()
{
...
...
@@ -88,71 +78,25 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
binding
.
btV2x
.
setOnClickListener
{
viewModel
.
subStartV2x
()
}
//网联车辆状态
binding
.
btStatus
.
setOnClickListener
{
viewModel
.
subVehicleStatus
().
observe
(
this
)
{
// println("time = ${time}")
// topicVehicleStatus(it)
}
}
//感知延时
binding
.
btPredelay
.
setOnClickListener
{
viewModel
.
subPreDelay
()
//HTTP获取车辆详情
binding
.
btGetveh
.
setOnClickListener
{
viewModel
.
getVehDetail
()
}
//交通感知事件
binding
.
btTarpre
.
setOnClickListener
{
viewModel
.
subTrafficPre
().
observe
(
this
)
{
}
}
//交通信号灯
binding
.
btTarlight
.
setOnClickListener
{
viewModel
.
subTrafficLight
()
}
// binding.btJubuline.setOnClickListener {
// viewModel.subPartLine()
// }
// binding.btRsi.setOnClickListener {
// viewModel.subRsiEvent()
//网联车辆状态
// binding.btStatus.setOnClickListener {
// viewModel.subVehicleStatus()
// }
}
/**车辆姿态**/
private
fun
topicVehicle
(
bean
:
CarVehicle
)
{
}
/**联网车辆状态数据**/
private
fun
topicVehicleStatus
(
bean
:
VehicleStats
)
{
// if ((bean.vehicleData.count()) > 0) {
//交通感知事件
// binding.btTarpre.setOnClickListener {
// viewModel.subTrafficPre()
// }
//交通信号灯
// binding.btTarlight.setOnClickListener {
// viewModel.subTrafficLight()
// }
}
/**停车位变更**/
private
fun
topicvPoints
(
bean
:
ParkBean
)
{
var
curValue
=
bean
.
parkingSpace
//
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)
}
...
...
app/src/main/java/com/sd/cavphmi/utils/MyContants.kt
View file @
0a5baef9
...
...
@@ -3,12 +3,24 @@ package com.sd.cavphmi.utils
object
MyContants
{
// const val IS_DEBUG = true
var
HOST
=
"https://faw.cuscavp.cn:8443"
private
val
token
=
"111"
private
val
reType
=
"51world"
var
WSHOST
=
"wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${token}&reType=${reType}&"
// var HOST = "https://itg-dev.cu-sc.com:19443/"
//开发环境切勿动
var
HOST
=
"https://itg-yz.cu-sc.com:13443"
// var HOST = "https://itg-yz.cu-sc.com:13443/api/avpweb/"
// private val token="111"
private
val
WSTOKEN
=
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiI0MTc0NDY3NGNlOGM0MDZmOTVkZTVkYWYyMWVlOWQ0ZiIsImNyZWF0ZVRpbWUiOjE3NTUwNzYxMTgxMjQsInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6ImNoZW5ieTUxIn0.aPYHCxXgQHj4eYGGZnce5MPJCtmMoRcIIHcNXzMMOHE"
//正式环境Token
var
HTTP_TOKEN
=
"3W6UeYoWsr3Hged3iJDqw5RQrLyTDwDkkX481PIiuYGwPCamTVdGHhmAxaCgHtns4IaNTEynJ8JfY46bvkzoqqDA9YcGUmkMZ31sV7QAVrk91yOPTv9mCvPLUgOeBgRl"
// var HTTP_TOKEN =
// "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIyM2UzYWU3MGZhMGQ0ZGZjYTIwNGU0NzcwOGNjNDJiNiIsImNyZWF0ZVRpbWUiOjE3NTUyNDA0MjcyNzksInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6InhpYW9wMDAxIn0.uiSdxuI34J_U3IuMywZNs_adaWoV2fqMsnx-vMxVWXo"
// val Authorization =
// "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiIyM2UzYWU3MGZhMGQ0ZGZjYTIwNGU0NzcwOGNjNDJiNiIsImNyZWF0ZVRpbWUiOjE3NTUyNDA0MjcyNzksInVzZXJUeXBlIjoxLCJzb3VyY2UiOjAsInB3ZEV4cGlyZWQiOmZhbHNlLCJ1c2VybmFtZSI6InhpYW9wMDAxIn0.uiSdxuI34J_U3IuMywZNs_adaWoV2fqMsnx-vMxVWXo"
private
val
reType
=
"51world"
var
WSHOST
=
"wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&reType=${reType}&"
// var PORT = if (IS_DEBUG) "123" else "34534"
/***感知目标物***/
...
...
app/src/main/java/com/sd/cavphmi/utils/SM4CryptoHelper.java
0 → 100644
View file @
0a5baef9
package
com.sd.cavphmi.utils
;
import
org.bouncycastle.jce.provider.BouncyCastleProvider
;
import
java.security.Security
;
import
java.util.Base64
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.IvParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
public
class
SM4CryptoHelper
{
private
static
final
String
ALGORITHM
=
"SM4"
;
private
static
final
String
TRANSFORMATION_ECB
=
"SM4/ECB/PKCS7Padding"
;
private
static
final
String
TRANSFORMATION_CBC
=
"SM4/CBC/PKCS7Padding"
;
static
{
Security
.
removeProvider
(
BouncyCastleProvider
.
PROVIDER_NAME
);
Security
.
addProvider
(
new
BouncyCastleProvider
());
}
// ECB模式加密
public
static
String
encryptECB
(
byte
[]
key
,
byte
[]
data
)
throws
Exception
{
Cipher
cipher
=
Cipher
.
getInstance
(
TRANSFORMATION_ECB
,
"BC"
);
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
new
SecretKeySpec
(
key
,
ALGORITHM
));
byte
[]
encrypted
=
cipher
.
doFinal
(
data
);
return
Base64
.
getEncoder
().
encodeToString
(
encrypted
);
}
// CBC模式加密(需IV参数)
public
static
byte
[]
encryptCBC
(
byte
[]
key
,
byte
[]
iv
,
byte
[]
data
)
throws
Exception
{
Cipher
cipher
=
Cipher
.
getInstance
(
TRANSFORMATION_CBC
,
"BC"
);
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
new
SecretKeySpec
(
key
,
ALGORITHM
),
new
IvParameterSpec
(
iv
));
return
cipher
.
doFinal
(
data
);
}
}
app/src/main/java/com/sd/cavphmi/viewmodels/LoginVm.kt
0 → 100644
View file @
0a5baef9
package
com.sd.cavphmi.viewmodels
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.viewModelScope
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.repositorys.AvpDataRepo
import
com.sd.cavphmi.utils.MyContants
import
dagger.hilt.android.lifecycle.HiltViewModel
import
kotlinx.coroutines.launch
import
javax.inject.Inject
@HiltViewModel
class
LoginVm
@Inject
constructor
(
private
var
avpDataRepo
:
AvpDataRepo
)
:
ViewModel
()
{
fun
login
(
user
:
String
=
"xiaop001"
,
pwd
:
String
=
"E@H^@Lxom7v@VY@x"
,
verifyCode
:
Int
=
276135
)
{
viewModelScope
.
launch
{
var
result
=
avpDataRepo
.
login
(
user
,
pwd
,
verifyCode
)
when
(
result
)
{
is
MyResult
.
Success
<
String
>
->
{
MyContants
.
HTTP_TOKEN
=
result
.
data
}
else
->
{
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
0a5baef9
This diff is collapsed.
Click to expand it.
app/src/main/java/com/sd/cavphmi/viewmodels/MockVM.kt
View file @
0a5baef9
...
...
@@ -3,34 +3,26 @@ package com.sd.cavphmi.viewmodels
import
android.content.Context
import
androidx.databinding.ObservableField
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.viewModelScope
import
com.google.gson.Gson
import
com.sd.cavphmi.base.MyBaseViewModel
import
com.sd.cavphmi.bean.CarVehicle
import
com.sd.cavphmi.bean.AllLinePlaningBean
import
com.sd.cavphmi.bean.ParkBean
import
com.sd.cavphmi.bean.ParkLinePlan
import
com.sd.cavphmi.bean.PartLineBean
import
com.sd.cavphmi.bean.PerTarget
import
com.sd.cavphmi.net.MyResult
import
com.sd.cavphmi.net.RequestBodyUtil
import
com.sd.cavphmi.repositorys.ParseSocketRepo
import
com.sd.cavphmi.utils.FileIoUtils
import
com.sd.cavphmi.utils.MyContants
import
dagger.hilt.android.lifecycle.HiltViewModel
import
dagger.hilt.android.qualifiers.ApplicationContext
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
import
retrofit2.HttpException
import
javax.inject.Inject
@HiltViewModel
class
MockVM
@Inject
constructor
(
@ApplicationContext
private
var
context
:
Context
,
private
var
parseSocketRepo
:
ParseSocketRepo
)
:
MyBaseViewModel
()
{
)
:
ViewModel
()
{
private
var
gson
=
Gson
()
...
...
@@ -66,55 +58,55 @@ class MockVM @Inject constructor(
//感知目标物
fun
onSubTargetMock
(
targetPre
:
MutableLiveData
<
PerTarget
>)
{
viewModelScope
.
launch
{
val
parts
=
mutableListOf
<
String
>()
FileIoUtils
.
getAssetMock
(
context
,
"mock/PerTarget.txt"
,
parts
)
parts
.
forEach
{
str
->
delay
(
1000
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
str
,
PerTarget
::
class
.
java
)
println
(
"------模拟感知目标物数据 = ${bean}"
)
targetPre
.
value
=
bean
}
}
//
viewModelScope.launch {
//
val parts = mutableListOf<String>()
//
FileIoUtils.getAssetMock(context, "mock/PerTarget.txt", parts)
//
parts.forEach { str ->
//
delay(1000)
//
var bean = parseSocketRepo.parseDataBean(str, PerTarget::class.java)
//
println("------模拟感知目标物数据 = ${bean}")
//
targetPre.value = bean
//
}
//
}
}
//全局路径发生切换
fun
onSubLinePlaningMock
(
allLine
:
MutableLiveData
<
AllLinePlaningBean
>
)
{
viewModelScope
.
launch
{
val
alls
=
mutableListOf
<
String
>()
FileIoUtils
.
getAssetMock
(
context
,
"mock/all_line.txt"
,
alls
)
alls
.
forEach
{
str
->
delay
(
1000
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
str
,
AllLinePlaningBean
::
class
.
java
)
allLine
.
value
=
bean
}
}
fun
onSubLinePlaningMock
()
{
//
viewModelScope.launch {
//
val alls = mutableListOf<String>()
//
FileIoUtils.getAssetMock(context, "mock/all_line.txt", alls)
//
alls.forEach { str ->
//
delay(1000)
//
var bean = parseSocketRepo.parseDataBean(str, AllLinePlaningBean::class.java)
//
allLine.value = bean
//
}
//
}
}
//局部路径
fun
onSubPartLineMock
(
allLine
:
MutableLiveData
<
PartLineBean
>
)
{
viewModelScope
.
launch
{
val
lines
=
mutableListOf
<
String
>()
lines
.
forEach
{
str
->
delay
(
1000
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
str
,
PartLineBean
::
class
.
java
)
allLine
.
value
=
bean
}
}
fun
onSubPartLineMock
()
{
//
viewModelScope.launch {
//
val lines = mutableListOf<String>()
//
lines.forEach { str ->
//
delay(1000)
//
var bean = parseSocketRepo.parseDataBean(str, PartLineBean::class.java)
//
allLine.value = bean
//
}
//
}
}
//更新停车位
fun
onPointsMock
(
parkBean
:
MutableLiveData
<
ParkBean
>
)
{
viewModelScope
.
launch
{
val
points
=
mutableListOf
<
String
>()
FileIoUtils
.
getAssetMock
(
context
,
"mock/change_park.txt"
,
points
)
points
.
forEach
{
str
->
delay
(
1000
)
var
bean
=
parseSocketRepo
.
parseDataBean
(
str
,
ParkBean
::
class
.
java
)
println
(
"------模拟停车位变更 = ${bean}"
)
parkBean
.
value
=
bean
}
}
fun
onPointsMock
()
{
//
viewModelScope.launch {
//
val points = mutableListOf<String>()
//
FileIoUtils.getAssetMock(context, "mock/change_park.txt", points)
//
points.forEach { str ->
//
delay(1000)
//
var bean = parseSocketRepo.parseDataBean(str, ParkBean::class.java)
//
println("------模拟停车位变更 = ${bean}")
//
parkBean.value = bean
//
}
//
}
}
...
...
app/src/main/java/com/sd/cavphmi/websockets/VecLocWSClient.kt
View file @
0a5baef9
package
com.sd.cavphmi.websockets
import
com.sd.cavphmi.viewmodels.MainVm
import
org.java_websocket.client.WebSocketClient
import
org.java_websocket.drafts.Draft
import
org.java_websocket.handshake.ServerHandshake
import
protocol.Response
import
java.net.URI
import
java.nio.ByteBuffer
/*****
往来你
车辆位姿**/
/*****
网联
车辆位姿**/
class
VecLocWSClient
:
WebSocketClient
{
private
val
TAG
=
"-----VecLocWSClient"
...
...
app/src/main/res/drawable-xhdpi/et_pwd.png
0 → 100644
View file @
0a5baef9
490 Bytes
app/src/main/res/drawable-xhdpi/smartphone_line.png
0 → 100644
View file @
0a5baef9
241 Bytes
app/src/main/res/drawable/login_bg.xml
0 → 100644
View file @
0a5baef9
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<gradient
android:startColor=
"#1B5BDB40"
android:endColor=
"#FFFFFF"
android:centerColor=
"#1B5BDB1A"
android:type=
"linear"
android:angle=
"45"
/>
</shape>
app/src/main/res/drawable/rect_white_20.xml
0 → 100644
View file @
0a5baef9
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<corners
android:radius=
"20dp"
/>
<solid
android:color=
"@color/white"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_login.xml
0 → 100644
View file @
0a5baef9
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@drawable/login_bg"
android:fitsSystemWindows=
"true"
android:orientation=
"vertical"
tools:context=
".ui.LoginActivity"
>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"?attr/actionBarSize"
android:background=
"@color/white"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:text=
"登录"
android:textColor=
"#3D3D3D"
android:textSize=
"16sp"
/>
</RelativeLayout>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"30dp"
android:src=
"@mipmap/ic_launcher"
/>
<LinearLayout
android:layout_width=
"220dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"25dp"
android:background=
"@drawable/rect_white_20"
android:gravity=
"center_vertical"
android:paddingHorizontal=
"10dp"
android:paddingVertical=
"5dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/smartphone_line"
/>
<EditText
android:id=
"@+id/et_account"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
android:background=
"@null"
android:hint=
"请输入账号"
android:maxLines=
"1"
android:text=
"18501971666"
android:textColor=
"@color/text_black"
android:textSize=
"10sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width=
"220dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"25dp"
android:background=
"@drawable/rect_white_20"
android:gravity=
"center_vertical"
android:paddingHorizontal=
"10dp"
android:paddingVertical=
"5dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/et_pwd"
/>
<EditText
android:id=
"@+id/et_pwd"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
android:background=
"@null"
android:hint=
"请输入密码"
android:inputType=
"textPassword"
android:maxLines=
"1"
android:text=
"vUO2dStZDhbd*88FfT84"
android:textColor=
"@color/text_black"
android:textSize=
"10sp"
/>
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id=
"@+id/bt_login"
android:layout_width=
"220dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"40dp"
android:text=
"登录"
android:textColor=
"@color/white"
android:textSize=
"15sp"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
<Button
android:id=
"@+id/bt_vehinfo"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:text=
"获取车辆信息"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
0a5baef9
...
...
@@ -9,10 +9,6 @@
name=
"vm"
type=
"com.sd.cavphmi.viewmodels.MainVm"
/>
<variable
name=
"order"
type=
"com.sd.cavphmi.bean.OrderBean"
/>
</data>
<RelativeLayout
...
...
@@ -70,10 +66,10 @@
android:text=
"V2X预警开始"
/>
<Button
android:id=
"@+id/bt_
predelay
"
android:id=
"@+id/bt_
getveh
"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"
感知延时
"
/>
android:text=
"
HTTP 获取车辆详情
"
/>
<Button
android:id=
"@+id/bt_tarpre"
...
...
@@ -88,21 +84,6 @@
android:text=
"交通信号灯"
/>
<Button
android:id=
"@+id/bt_allline"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"全局路径发生切换"
android:visibility=
"gone"
/>
<Button
android:id=
"@+id/bt_jubuline"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:visibility=
"gone"
android:text=
"局部路径"
/>
</LinearLayout>
...
...
app/src/main/res/layout/activity_tdtiles.xml
deleted
100644 → 0
View file @
09291f32
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<com.minedata.minemap.map.MapView
android:id=
"@+id/mapView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
<!-- <com.minedata.minemap.map.MapView-->
<!-- android:id="@id/mapView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- app:minemap_apiBaseUrl="@string/minemap_apiBaseUrl"-->
<!-- app:minemap_apiUrl="@string/minemap_apiUrl"-->
<!-- app:minemap_apiDynamicDataUrl="@string/minemap_apiDynamicDataUrl"-->
<!-- app:minemap_apiVersion="@string/minemap_apiVersion"-->
<!-- app:minemap_uiLogoGravity="center" />-->
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/order_detail.xml
View file @
0a5baef9
...
...
@@ -6,13 +6,13 @@
<data>
<variable
name=
"order"
type=
"com.sd.cavphmi.bean.OrderBean"
/>
<!--
<variable
-->
<!--
name="order"
-->
<!--
type="com.sd.cavphmi.bean.OrderBean" />
-->
</data>
<!-- app:showOrderLayout="@{order.avpStatus}"-->
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
@@ -20,7 +20,7 @@
android:orientation=
"vertical"
android:padding=
"15dp"
android:visibility=
"gone"
app:showOrderLayout=
"@{order.avpStatus}"
>
<LinearLayout
...
...
@@ -33,11 +33,12 @@
android:layout_height=
"wrap_content"
android:src=
"@drawable/bookmark_24"
/>
<!-- android:text="@{order.orderNo}"-->
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
android:text=
"@{
order.orderNo
}"
android:text=
"@{}"
android:textColor=
"@color/text_black"
tools:text=
"32423427364862386482368462"
/>
...
...
@@ -55,11 +56,12 @@
android:layout_height=
"wrap_content"
android:src=
"@drawable/access_alarms_24"
/>
<!-- order.durationString-->
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
android:text=
"@{
order.durationString
}"
android:text=
"@{}"
android:textColor=
"@color/text_black"
tools:text=
"1小时29分钟"
/>
...
...
@@ -75,12 +77,12 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/access_time_24"
/>
<!-- {order.enterTime-->
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
android:text=
"@{
order.enterTime
}"
android:text=
"@{}"
android:textColor=
"@color/text_black"
tools:text=
"2025-06-18 09:16:51"
/>
...
...
@@ -97,11 +99,11 @@
android:layout_height=
"wrap_content"
android:src=
"@drawable/attach_money_24"
/>
<!-- app:showOrderCost="@{}"-->
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginLeft=
"5dp"
app:showOrderCost=
"@{order.actualCost}"
android:textColor=
"@color/text_black"
tools:text=
"2025-06-18 09:16:51"
/>
...
...
app/src/main/res/mipmap-anydpi/ic_launcher.xml
deleted
100644 → 0
View file @
09291f32
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<background
android:drawable=
"@drawable/ic_launcher_background"
/>
<foreground
android:drawable=
"@drawable/ic_launcher_foreground"
/>
<monochrome
android:drawable=
"@drawable/ic_launcher_foreground"
/>
</adaptive-icon>
\ No newline at end of file
app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
deleted
100644 → 0
View file @
09291f32
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<background
android:drawable=
"@drawable/ic_launcher_background"
/>
<foreground
android:drawable=
"@drawable/ic_launcher_foreground"
/>
<monochrome
android:drawable=
"@drawable/ic_launcher_foreground"
/>
</adaptive-icon>
\ No newline at end of file
app/src/main/res/mipmap-hdpi/ic_launcher.png
0 → 100644
View file @
0a5baef9
3.44 KB
Prev
1
2
3
Next
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