Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS into origin

This commit is contained in:
qiji4215
2023-12-01 17:59:04 +08:00
25 changed files with 233 additions and 92 deletions

View File

@@ -17,7 +17,7 @@ android {
compileSdk 33
defaultConfig {
applicationId "com.navinfo.omqs"
// applicationId "com.navinfo.omqs"
minSdk 21
targetSdk 21
versionCode 1
@@ -26,7 +26,7 @@ android {
multiDexEnabled true
ndk {
abiFilters "armeabi-v7a", "armeabi", "mips"
abiFilters "arm64-v8a", "armeabi-v7a", "armeabi", "mips"
}
}

View File

@@ -127,10 +127,10 @@ class LoginViewModel @Inject constructor(
if (userNameCache == userName && passwordCache == password) {
viewModelScope.launch(Dispatchers.IO) {
createUserFolder(context, userCodeCache, userRealName)
getOfflineCityList(context)
// getOfflineCityList(context)
// loginStatus.postValue(LoginStatus.LOGIN_STATUS_SUCCESS)
}
return
// return
}
}
//不指定IO会在主线程里运行

View File

@@ -20,6 +20,7 @@ import androidx.annotation.RequiresApi
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.alibaba.fastjson.JSON
import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.entity.*
import com.navinfo.collect.library.enums.DataCodeEnum
@@ -45,6 +46,8 @@ import io.realm.RealmList
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.json.JSONArray
import org.json.JSONObject
import org.locationtech.jts.geom.Geometry
import org.oscim.core.GeoPoint
import org.oscim.core.GeometryBuffer.GeometryType
@@ -69,7 +72,7 @@ class EvaluationResultViewModel @Inject constructor(
/**
* 车信列表
*/
var laneInfoList: MutableList<LaneInfoItem>? = null
val laneInfoList = MutableLiveData<MutableList<LaneInfoItem>>()
var liveDataLanInfoChange = MutableLiveData<String>()
@@ -139,7 +142,7 @@ class EvaluationResultViewModel @Inject constructor(
init {
mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
override fun onMapClick(tag: String, point: GeoPoint,other:String) {
override fun onMapClick(tag: String, point: GeoPoint, other: String) {
if (tag == TAG) {
liveDataQsRecordBean.value!!.geometry =
GeometryTools.createGeometry(point).toText()
@@ -174,7 +177,7 @@ class EvaluationResultViewModel @Inject constructor(
if (bean != null) {
renderEntity = bean.renderEntity
if (renderEntity!!.code == DataCodeEnum.OMDB_LANEINFO.code) {
laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!)
laneInfoList.postValue(SignUtil.getLineInfoIcons(renderEntity!!))
}
}
@@ -280,7 +283,7 @@ class EvaluationResultViewModel @Inject constructor(
if (bean != null) {
renderEntity = bean.renderEntity
if (renderEntity!!.code == DataCodeEnum.OMDB_LANEINFO.code) {
laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!)
laneInfoList.postValue(SignUtil.getLineInfoIcons(renderEntity!!))
}
}
@@ -454,7 +457,42 @@ class EvaluationResultViewModel @Inject constructor(
liveDataToastMessage.postValue("没有绑定到任何link请选择")
return@launch
}
if (liveDataQsRecordBean.value!!.classCode == DataCodeEnum.OMDB_LANEINFO.code)
try {
val jsonObject: JSONObject = if (liveDataQsRecordBean.value!!.remarks != "") {
JSONObject(liveDataQsRecordBean.value!!.remarks)
} else {
JSONObject()
}
if (!jsonObject.has("original")) {
renderEntity?.let {
val laneOldList = SignUtil.getLineInfoIcons(it)
val jsonOriginalArray = JSONArray()
for (lane in laneOldList) {
val jsonItem = JSONObject()
jsonItem.put("id", lane.id)
jsonItem.put("type", lane.type)
jsonOriginalArray.put(jsonItem)
}
jsonObject.put("original", jsonOriginalArray)
}
}
laneInfoList.value?.let {
val jsonOriginalArray = JSONArray()
for (lane in it) {
val jsonItem = JSONObject()
jsonItem.put("id", lane.id)
jsonItem.put("type", lane.type)
jsonOriginalArray.put(jsonItem)
}
jsonObject.put("now", jsonOriginalArray)
}
liveDataQsRecordBean.value!!.remarks = jsonObject.toString()
} catch (e: Exception) {
}
Log.e("jingo", "车信json ${liveDataQsRecordBean.value!!.remarks}")
val realm = realmOperateHelper.getRealmDefaultInstance()
liveDataQsRecordBean.value!!.taskId = liveDataTaskBean.value!!.id
liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime()
@@ -504,7 +542,7 @@ class EvaluationResultViewModel @Inject constructor(
@RequiresApi(Build.VERSION_CODES.N)
fun initData(id: String) {
Log.e("jingo", "捕捉到的要素 id = $id")
viewModelScope.launch(Dispatchers.Main) {
viewModelScope.launch(Dispatchers.IO) {
val realm = realmOperateHelper.getRealmDefaultInstance()
@@ -523,16 +561,43 @@ class EvaluationResultViewModel @Inject constructor(
}
liveDataQsRecordBean.postValue(it.copy())
val p = GeometryTools.createGeoPoint(it.geometry)
mapController.markerHandle.addMarker(
GeoPoint(
p.latitude, p.longitude
), TAG, "", null
)
//定位
val mapPosition = mapController.mMapView.vtmMap.mapPosition
mapPosition.setPosition(p.latitude, p.longitude)
mapController.mMapView.vtmMap.animator().animateTo(300, mapPosition)
var hisNowLanInfo = false
if (it.classCode == DataCodeEnum.OMDB_LANEINFO.code) {
try {
val jsonObject = JSONObject(it.remarks)
if (jsonObject.has("now")) {
val jsonArray = jsonObject.getJSONArray("now")
val list = mutableListOf<LaneInfoItem>()
for (i in 0 until jsonArray.length()) {
val itemObject = jsonArray[i] as JSONObject
if (itemObject.has("id") && itemObject.has("type")) {
list.add(LaneInfoItem(itemObject.getInt("id"), itemObject.getInt("type")))
}
}
hisNowLanInfo = true
laneInfoList.postValue(list)
}
// editLaneInfoProblem()
} catch (e: Exception) {
}
}
launch(Dispatchers.Main) {
val p = GeometryTools.createGeoPoint(it.geometry)
mapController.markerHandle.addMarker(
GeoPoint(
p.latitude, p.longitude
), TAG, "", null
)
//定位
val mapPosition = mapController.mMapView.vtmMap.mapPosition
mapPosition.setPosition(p.latitude, p.longitude)
mapController.mMapView.vtmMap.animator().animateTo(300, mapPosition)
}
//获取linkid
if (it.linkId.isNotEmpty()) {
val link = realmOperateHelper.queryLink(it.linkId)
@@ -548,15 +613,15 @@ class EvaluationResultViewModel @Inject constructor(
}
}
liveDataQsRecordBean.value?.attachmentBeanList = it.attachmentBeanList
liveDataLanInfoChange.value = it.description
liveDataLanInfoChange.postValue(it.description)
// 显示语音数据到界面
getChatMsgEntityList()
realm.close()
//增加要素高亮
if(it.elementId!=null){
if (it.elementId != null) {
val realm2 = realmOperateHelper.getSelectTaskRealmInstance()
val rEntity = realm2.where(RenderEntity::class.java).equalTo("id",it.elementId).findFirst()
if(rEntity!=null){
val rEntity = realm2.where(RenderEntity::class.java).equalTo("id", it.elementId).findFirst()
if (rEntity != null) {
show(rEntity!!)
}
if (it.classCode == DataCodeEnum.OMDB_LANEINFO.code) {
@@ -565,7 +630,8 @@ class EvaluationResultViewModel @Inject constructor(
.equalTo("linkPid", it.linkId).findFirst()
if (r != null) {
renderEntity = realm2.copyFromRealm(r)
laneInfoList = SignUtil.getLineInfoIcons(renderEntity!!)
if (!hisNowLanInfo)
laneInfoList.postValue(SignUtil.getLineInfoIcons(renderEntity!!))
}
}
realm2.close()
@@ -778,7 +844,10 @@ class EvaluationResultViewModel @Inject constructor(
* 增加车信
*/
fun updateLaneInfo(index: Int, id: Int, type: Int) {
laneInfoList?.let {
if (laneInfoList.value == null) {
laneInfoList.value = mutableListOf<LaneInfoItem>()
}
laneInfoList.value?.let {
val laneInfoItem = it[index]
if (laneInfoItem.id != id || laneInfoItem.type != type) {
laneInfoItem.id = id
@@ -792,7 +861,10 @@ class EvaluationResultViewModel @Inject constructor(
* 增加车信
*/
fun addLaneInfo(id: Int, type: Int): Int {
laneInfoList?.let {
if (laneInfoList.value == null) {
laneInfoList.value = mutableListOf<LaneInfoItem>()
}
laneInfoList.value?.let {
it.add(LaneInfoItem(id, type))
editLaneInfoProblem()
return it.size
@@ -804,7 +876,10 @@ class EvaluationResultViewModel @Inject constructor(
* 删除车信
*/
fun backspaceLaneInfo() {
laneInfoList?.let {
if (laneInfoList.value == null) {
laneInfoList.value = mutableListOf<LaneInfoItem>()
}
laneInfoList.value?.let {
if (it.isNotEmpty()) {
it.removeLast()
editLaneInfoProblem()
@@ -816,20 +891,76 @@ class EvaluationResultViewModel @Inject constructor(
* 删除车信
*/
fun removeAllLaneInfo() {
laneInfoList?.clear()
laneInfoList.value?.clear()
}
/**
* 组织车信备注文字
*/
private fun editLaneInfoProblem() {
laneInfoList?.let {
if (laneInfoList.value == null) {
laneInfoList.value = mutableListOf<LaneInfoItem>()
}
laneInfoList.value?.let {
liveDataQsRecordBean.value?.let { bean ->
var strBuffer = StringBuffer()
val strBuffer = StringBuffer()
if (bean.problemType == "遗漏")
strBuffer.append("车信缺失,车道从左到右分别是:")
strBuffer.append("车信缺失\n")
else if (bean.problemType == "错误")
strBuffer.append("车信错误,车道从左到右分别是:")
strBuffer.append("车信错误\n")
renderEntity?.let {
val oldList = SignUtil.getLineInfoIcons(it)
strBuffer.append("原车道:")
for (item in oldList) {
when (item.id) {
R.drawable.laneinfo_1 -> strBuffer.append("[直(1)")
R.drawable.laneinfo_2 -> strBuffer.append("[左(2)")
R.drawable.laneinfo_3 -> strBuffer.append("[右(3)")
R.drawable.laneinfo_5 -> strBuffer.append("[左斜前(5)")
R.drawable.laneinfo_6 -> strBuffer.append("[右斜前(6)")
R.drawable.laneinfo_4 -> strBuffer.append("[调(4)")
R.drawable.laneinfo_7 -> strBuffer.append("[反向调(7)")
R.drawable.laneinfo_1_2 -> strBuffer.append("[左直(1,2)")
R.drawable.laneinfo_1_5 -> strBuffer.append("[左斜前直(1,5)")
R.drawable.laneinfo_2_5 -> strBuffer.append("[左左斜前(2,5)")
R.drawable.laneinfo_2_6 -> strBuffer.append("[左右斜前(2,6)")
R.drawable.laneinfo_1_3 -> strBuffer.append("[直右(1,3)")
R.drawable.laneinfo_1_6 -> strBuffer.append("[右斜前直(1,6)")
R.drawable.laneinfo_3_5 -> strBuffer.append("[左斜前右(3,5)")
R.drawable.laneinfo_3_6 -> strBuffer.append("[右斜前右(3,6)")
R.drawable.laneinfo_2_3 -> strBuffer.append("[左右(2,3)")
R.drawable.laneinfo_5_6 -> strBuffer.append("[左斜前右斜前(5,6)")
R.drawable.laneinfo_1_4 -> strBuffer.append("[直调(1,4)")
R.drawable.laneinfo_4_5 -> strBuffer.append("[调左斜前(4,5)")
R.drawable.laneinfo_2_4 -> strBuffer.append("[左调(2,4)")
R.drawable.laneinfo_3_4 -> strBuffer.append("[右调(3,4)")
R.drawable.laneinfo_4_6 -> strBuffer.append("[调右斜前(4,6)")
R.drawable.laneinfo_1_7 -> strBuffer.append("[直反向调(1,7)")
R.drawable.laneinfo_1_2_3 -> strBuffer.append("[左直右(1,2,3)")
R.drawable.laneinfo_1_2_4 -> strBuffer.append("[调左直(1,2,4)")
R.drawable.laneinfo_1_2_5 -> strBuffer.append("[左左斜前直(1,2,5)")
R.drawable.laneinfo_1_2_6 -> strBuffer.append("[左直右斜前(1,2,6)")
R.drawable.laneinfo_1_3_4 -> strBuffer.append("[调直右(1,3,4)")
R.drawable.laneinfo_1_3_5 -> strBuffer.append("[左斜前直右(1,3,5)")
R.drawable.laneinfo_1_3_6 -> strBuffer.append("[直右斜前右(1,3,6)")
R.drawable.laneinfo_2_3_4 -> strBuffer.append("[调左右(2,3,4)")
R.drawable.laneinfo_0 -> strBuffer.append("[不允许存在(0)")
}
when (item.type) {
1 -> {
strBuffer.append("(附加)]")
}
2 -> {
strBuffer.append("(公交)]")
}
else -> {
strBuffer.append("]")
}
}
}
}
strBuffer.append("\n现车道:")
for (item in it) {
when (item.id) {
R.drawable.laneinfo_1 -> strBuffer.append("[直(1)")
@@ -865,12 +996,16 @@ class EvaluationResultViewModel @Inject constructor(
R.drawable.laneinfo_2_3_4 -> strBuffer.append("[调左右(2,3,4)")
R.drawable.laneinfo_0 -> strBuffer.append("[不允许存在(0)")
}
if (item.type == 1) {
strBuffer.append("(附加)]")
} else if (item.type == 2) {
strBuffer.append("(公交)]")
} else {
strBuffer.append("]")
when (item.type) {
1 -> {
strBuffer.append("(附加)]")
}
2 -> {
strBuffer.append("(公交)]")
}
else -> {
strBuffer.append("]")
}
}
}
liveDataQsRecordBean.value!!.description = strBuffer.toString()

View File

@@ -10,6 +10,7 @@ import android.widget.AdapterView
import android.widget.ImageView
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentLineInfoEditBinding
import com.navinfo.omqs.ui.activity.map.LaneInfoItem
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.other.shareViewModels
@@ -37,7 +38,10 @@ class LaneInfoEditFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initLaneInfo()
viewModel.laneInfoList.observe(viewLifecycleOwner){
initLaneInfo(it)
viewModel.laneInfoList.removeObservers(viewLifecycleOwner)
}
initFLowLayout()
binding.laneInfoBackspace.setOnClickListener {
@@ -271,61 +275,59 @@ class LaneInfoEditFragment : BaseFragment() {
/**
* 初始化车道信息
*/
private fun initLaneInfo() {
if (viewModel.laneInfoList != null) {
val container = binding.laneInfoTopContainer
container.removeAllViews()
val lineViewS = View(context)
lineViewS.layoutParams = ViewGroup.LayoutParams(24, 110)
lineViewS.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineViewS, lineViewS.layoutParams)
for (i in viewModel.laneInfoList!!.indices) {
val laneInfo = viewModel.laneInfoList!![i]
val imageView = ImageView(context)
val drawable = requireContext().getDrawable(laneInfo.id)
val color = when (laneInfo.type) {
1 -> requireContext().resources.getColor(R.color.lane_info_1)
2 -> requireContext().resources.getColor(R.color.lane_info_2)
else -> requireContext().resources.getColor(R.color.white)
}
// 创建 PorterDuffColorFilter 对象
val colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
// 将 PorterDuffColorFilter 设置给 Drawable
drawable!!.colorFilter = colorFilter
// 将 Drawable 设置给 ImageView
imageView.scaleType = ImageView.ScaleType.FIT_XY
imageView.setColorFilter(color, PorterDuff.Mode.SRC_IN)
imageView.setImageDrawable(drawable)
// 将 ImageView 的颜色设置为红色
imageView.layoutParams = ViewGroup.LayoutParams(45, 100)
container.addView(imageView, imageView.layoutParams)
if (i < viewModel.laneInfoList!!.size - 1) {
val lineView = View(context)
lineView.layoutParams = ViewGroup.LayoutParams(24, 110)
lineView.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineView, lineView.layoutParams)
}
imageView.tag = i
imageView.setOnClickListener {
selectView = if (selectView == it) {
private fun initLaneInfo(list:MutableList<LaneInfoItem>) {
val container = binding.laneInfoTopContainer
container.removeAllViews()
val lineViewS = View(context)
lineViewS.layoutParams = ViewGroup.LayoutParams(24, 110)
lineViewS.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineViewS, lineViewS.layoutParams)
for (i in list.indices) {
val laneInfo = list[i]
val imageView = ImageView(context)
val drawable = requireContext().getDrawable(laneInfo.id)
val color = when (laneInfo.type) {
1 -> requireContext().resources.getColor(R.color.lane_info_1)
2 -> requireContext().resources.getColor(R.color.lane_info_2)
else -> requireContext().resources.getColor(R.color.white)
}
// 创建 PorterDuffColorFilter 对象
val colorFilter = PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)
// 将 PorterDuffColorFilter 设置给 Drawable
drawable!!.colorFilter = colorFilter
// 将 Drawable 设置给 ImageView
imageView.scaleType = ImageView.ScaleType.FIT_XY
imageView.setColorFilter(color, PorterDuff.Mode.SRC_IN)
imageView.setImageDrawable(drawable)
// 将 ImageView 的颜色设置为红色
imageView.layoutParams = ViewGroup.LayoutParams(45, 100)
container.addView(imageView, imageView.layoutParams)
if (i < list.size - 1) {
val lineView = View(context)
lineView.layoutParams = ViewGroup.LayoutParams(24, 110)
lineView.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineView, lineView.layoutParams)
}
imageView.tag = i
imageView.setOnClickListener {
selectView = if (selectView == it) {
selectView!!.setBackgroundColor(requireContext().resources.getColor(R.color.gray))
null
} else {
if (selectView != null) {
selectView!!.setBackgroundColor(requireContext().resources.getColor(R.color.gray))
null
} else {
if (selectView != null) {
selectView!!.setBackgroundColor(requireContext().resources.getColor(R.color.gray))
}
imageView.setBackgroundColor(requireContext().resources.getColor(R.color.lane_info_0))
it as ImageView
}
imageView.setBackgroundColor(requireContext().resources.getColor(R.color.lane_info_0))
it as ImageView
}
}
val lineViewE = View(context)
lineViewE.layoutParams = ViewGroup.LayoutParams(24, 110)
lineViewE.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineViewE, lineViewE.layoutParams)
}
val lineViewE = View(context)
lineViewE.layoutParams = ViewGroup.LayoutParams(24, 110)
lineViewE.background =
requireContext().getDrawable(R.drawable.shape_vertical_dashed_line)
container.addView(lineViewE, lineViewE.layoutParams)
}
}