diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/LineDataBean.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/LineDataBean.kt index 301dcfad63..d2b7d38eb4 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/LineDataBean.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/bean/LineDataBean.kt @@ -41,6 +41,16 @@ data class LineDataBean( const val lineDataTable: String = "line_data_table" } + + + fun getLineIdAndName(function: (lineId:Long,lineName:String) -> Unit) { + lineId?.let {id-> + lineName?.let {name-> + function(id,name) + } + } + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -53,11 +63,10 @@ data class LineDataBean( return true } - fun getLineIdAndName(function: (lineId:Long,lineName:String) -> Unit) { - lineId?.let {id-> - lineName?.let {name-> - function(id,name) - } - } + override fun hashCode(): Int { + var result = lineId?.hashCode() ?: 0 + result = 31 * result + (lineName?.hashCode() ?: 0) + return result } + } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/TaskSiteDataDao.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/TaskSiteDataDao.kt index 3f939e52dd..614bc86d0a 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/TaskSiteDataDao.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/dao/TaskSiteDataDao.kt @@ -14,7 +14,7 @@ interface TaskSiteDataDao { fun insert(vararg lineDataBean: TaskSiteDataBean):List //查询当天插入的所有数据 - @Query("SELECT * FROM ${TaskSiteDataBean.usedTaskDataTable} WHERE task_id = :taskId") + @Query("SELECT * FROM ${TaskSiteDataBean.usedTaskDataTable} WHERE task_id = :taskId order by seq") fun queryRunningTask(taskId: Long): List? @Query("UPDATE ${TaskSiteDataBean.usedTaskDataTable} SET leaving = :leave WHERE task_id = :taskId and site_id = :siteId") diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt index a3cb252780..b6c8690728 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt @@ -46,13 +46,6 @@ object LineDb: IDbRepository { // TODO: Ui展示需要动态刷新UI去 return } - val tempList = loadData.groupBy { it.lineId }.filter { it.value.size > 1 } - val needDelete = mutableListOf() - tempList.forEach {multData-> - needDelete.add(multData.value.first()) - } - // 删除本地重复的 - lineDao.delete(*needDelete.toTypedArray()) // 后台新增数据 val needAddDatas = serverDatalist-loadData // 后台没有本地数据库有的未分配线路 @@ -83,6 +76,34 @@ object LineDb: IDbRepository { } } } + + // 交集 服务器端 + val needUpdateByMd5 = serverDatalist-needAddDatas + // 交集 本地数据库 + val oldDataList = loadData-needMinusDatas + + val needDelete = mutableListOf() + val needUpDate = mutableListOf() + + needUpdateByMd5.forEach { + val oldList = oldDataList.filter { local -> local.lineId == it.lineId } + if(oldList.isNotEmpty()){ + oldList.forEachIndexed { index, lineBean -> + if(index==0){ + if (lineBean.lineName == it.lineName && lineBean.endStationName == it.endStationName) { + // 数据没有变化 + }else{ + it.id = lineBean.id + needUpDate.add(it) + } + }else{ + needDelete.add(lineBean) + } + } + } + } + lineDao.delete(*needDelete.toTypedArray()) + lineDao.insert(*needUpDate.toTypedArray()) } } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/SiteDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/SiteDb.kt index 7fea6ce643..726b0692e9 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/SiteDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/SiteDb.kt @@ -59,6 +59,10 @@ object SiteDb: IDbRepository { // 交集 本地数据库 val oldDataList = localAllSites-needMinusDatas + val needDelete = mutableListOf() + val needUpDate = mutableListOf() + + needUpdateByMd5.forEach { val md5Source = it.toString() val md5Hex = DigestUtils.md5Hex(md5Source) @@ -67,19 +71,23 @@ object SiteDb: IDbRepository { if(oldList.isNotEmpty()){ oldList.forEachIndexed { index, siteDataBean -> if(index==0){ - if(siteDataBean.md5==md5Hex){ + if (siteDataBean.md5 == md5Hex) { // 数据没有变化 }else{ it.id = siteDataBean.id it.md5 = md5Hex - siteDataDao.insert(it) + needUpDate.add(it) + } }else{ - siteDataDao.deleteById(siteDataBean) + needDelete.add(siteDataBean) + } } } } + siteDataDao.insert(*needUpDate.toTypedArray()) + siteDataDao.deleteById(*needDelete.toTypedArray()) checkData() } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt index d1b340a761..b3487fa0ce 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineAdapter.kt @@ -28,10 +28,6 @@ class SwitchLineAdapter( private var mItemClickListener: LineItemClickListener? = null fun setDataList(dataList: List) { - if (this.mData == dataList) { - // 如果新旧列表一致,则直接返回 - return - } val diffResult = DiffUtil.calculateDiff(MyDiffCallback(this.mData, dataList)) this.mData.clear() @@ -95,13 +91,13 @@ class SwitchLineAdapter( override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { val oldItem = oldData[oldItemPosition] val newItem = newData[newItemPosition] - return oldItem == newItem + return oldItem == newItem && oldItem.endStationName == newItem.endStationName } override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { val oldItem = oldData[oldItemPosition] val newItem = newData[newItemPosition] - return oldItem == newItem + return oldItem == newItem && oldItem.endStationName == newItem.endStationName } }