Merge branch 'refs/heads/dev_robotaxi-d_240912_6.7.2_local' into dev_robotaxi-d_241105_6.7.4

This commit is contained in:
yangyakun
2024-11-08 10:31:30 +08:00
5 changed files with 157 additions and 16 deletions

View File

@@ -49,6 +49,10 @@ android {
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
testImplementation 'junit:junit:4.12'
testImplementation project(path: ':OCH:shuttle:driver_weaknet')
implementation rootProject.ext.dependencies.kotlinstdlib
implementation rootProject.ext.dependencies.androidxappcompat
implementation rootProject.ext.dependencies.arouter

View File

@@ -99,5 +99,23 @@ data class SiteDataBean(
return "SiteDataBean(siteId=$siteId, lineId=$lineId, name=$name, nameKr=$nameKr, seq=$seq, gcjLon=$gcjLon, gcjLat=$gcjLat, lon=$lon, lat=$lat, introduction=$introduction, isPlayTts=$isPlayTts, videoList=$videoListDB)"
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as SiteDataBean
if (siteId != other.siteId) return false
if (lineId != other.lineId) return false
return true
}
override fun hashCode(): Int {
var result = siteId?.hashCode() ?: 0
result = 31 * result + (lineId?.hashCode() ?: 0)
return result
}
}

View File

@@ -25,6 +25,11 @@ interface SiteDataDao {
@Query("SELECT * FROM ${SiteDataBean.siteDataTable} WHERE md5 = :md5")
fun querySitesByMd5(md5:String): List<SiteDataBean>?
//查询线路对应的轨迹信息
@Query("SELECT * FROM ${SiteDataBean.siteDataTable}")
fun queryAllSites(): List<SiteDataBean>?
@Query("SELECT * FROM ${SiteDataBean.siteDataTable} WHERE line_id = :lineId and site_id = :siteId")
fun querySitesByLineIdAndSiteId(lineId: Long,siteId:Long):List<SiteDataBean>?

View File

@@ -25,25 +25,65 @@ object SiteDb: IDbRepository {
siteDataDao = null
}
fun addOrUpdate(siteDateList: List<SiteDataBean>) {
val runnable = Runnable {
siteDataDao?.let { siteDataDao ->
siteDateList.forEach {
val md5Source = it.toString()
val md5Hex = DigestUtils.md5Hex(md5Source)
val queryContrailByMd5 = siteDataDao.querySitesByMd5(md5Hex)
if (queryContrailByMd5.isNullOrEmpty()) {// 没有值或者值有变化
val needUpdate =
siteDataDao.querySiteByLineIdAndSiteId(it.lineId!!, it.siteId!!)
it.md5 = md5Hex
if (needUpdate != null) {
it.id = needUpdate.id
}
siteDataDao.insert(it)
fun addOrUpdate(serverDataList: List<SiteDataBean>) {
val runnable = object :Runnable {
override fun run() {
siteDataDao?.let { siteDataDao ->
val localAllSites = siteDataDao.queryAllSites()
if (localAllSites.isNullOrEmpty()) {
siteDataDao.insert(*serverDataList.toTypedArray())
return
}
// 后台新增数据
val needAddDatas = serverDataList-localAllSites
// 后台没有本地数据库有的未分配线路
val needMinusDatas = localAllSites - serverDataList
if (needAddDatas.isNotEmpty()) {
// 新增线路
needAddDatas.forEach {
val md5Source = it.toString()
val md5Hex = DigestUtils.md5Hex(md5Source)
it.md5 = md5Hex
}
siteDataDao.insert(*needAddDatas.toTypedArray())
}
if (needMinusDatas.isNotEmpty()) {
// 删除线路
siteDataDao.deleteById(*needMinusDatas.toTypedArray())
}
// 交集 服务器端
val needUpdateByMd5 = serverDataList-needAddDatas
// 交集 本地数据库
val oldDataList = localAllSites-needMinusDatas
needUpdateByMd5.forEach {
val md5Source = it.toString()
val md5Hex = DigestUtils.md5Hex(md5Source)
val oldList =
oldDataList.filter { local -> local.siteId == it.siteId && local.lineId == it.lineId }
if(oldList.isNotEmpty()){
oldList.forEachIndexed { index, siteDataBean ->
if(index==0){
if(siteDataBean.md5==md5Hex){
// 数据没有变化
}else{
it.id = siteDataBean.id
it.md5 = md5Hex
siteDataDao.insert(it)
}
}else{
siteDataDao.deleteById(siteDataBean)
}
}
}
}
checkData()
}
checkData()
}
}
BizLoopManager.runInIoThread(runnable)
}

View File

@@ -0,0 +1,74 @@
package com.mogo.och.common.module
import com.mogo.eagle.core.network.utils.digest.DigestUtils
import com.mogo.och.weaknet.repository.db.bean.SiteDataBean
import org.junit.Test
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
val serverDataList = mutableListOf<SiteDataBean>()
serverDataList.add(SiteDataBean(siteId = 1, lineId = 1, name = "北京站1"))
serverDataList.add(SiteDataBean(siteId = 2, lineId = 1, name = "北京站2"))
serverDataList.add(SiteDataBean(siteId = 3, lineId = 1, name = "北京站3"))
val localAllSites = mutableListOf<SiteDataBean>()
localAllSites.add(SiteDataBean(siteId = 1, lineId = 1, name = "北京站1"))
localAllSites.add(SiteDataBean(siteId = 2, lineId = 1, name = "北京站2"))
localAllSites.add(SiteDataBean(siteId = 3, lineId = 1, name = "北京站3"))
// 后台新增数据
val needAddDatas = serverDataList - localAllSites
// 后台没有本地数据库有的未分配线路
val needMinusDatas = localAllSites - serverDataList
if (needAddDatas.isNotEmpty()) {
// 新增线路
println("需要新增站点$needAddDatas")
}
if (needMinusDatas.isNotEmpty()) {
// 删除线路
println("需要删除站点$needMinusDatas")
}
// 交集 服务器端
val needUpdateByMd5 = serverDataList - needAddDatas
val oldDataList = localAllSites - needMinusDatas
needUpdateByMd5.forEach {
val md5Source = it.toString()
val md5Hex = DigestUtils.md5Hex(md5Source)
val oldList =
oldDataList.filter { local -> local.siteId == it.siteId && local.lineId == it.lineId }
if (oldList.isNotEmpty()) {
oldList.forEachIndexed { index, siteDataBean ->
if (index == 0) {
if (siteDataBean.md5 == md5Hex) {
// 数据没有变化
} else {
it.id = siteDataBean.id
it.md5 = md5Hex
println("需要更新的站点old:${siteDataBean}\n new:${it}")
}
} else {
println("多余数据需要删除:${siteDataBean}")
}
}
}
}
}
@Test
fun testData() {
}
}