[6.7.2]
[fix] [site add 、 delete or update]
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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>?
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user