From 87da63bec737f8354f3b138784eeabc339a44fa4 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Mon, 22 Sep 2025 23:29:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=87=87=E9=85=8D=E7=BD=AE=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=B9=B6=E8=BF=9B=E5=9C=BA=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=92=8C=E6=9F=A5=E8=AF=A2=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zmkg/coaloperation/db/AppDatabase.kt | 12 ++ .../db/dao/MiningCoalHeightDao.kt | 44 ++++++ .../db/dao/MiningWorkingFaceDao.kt | 40 ++++++ .../db/dao/MiningWorkingFaceRecordDao.kt | 37 +++++ ...ogyEntity.kt => MiningCoalHeightEntity.kt} | 25 ++-- .../mining/MiningWorkingFaceRecordEntity.kt | 2 +- .../repository/MiningCoalHeightRepository.kt | 51 +++++++ .../MiningWorkingFaceRecordRepository.kt | 43 ++++++ .../repository/MiningWorkingFaceRepository.kt | 40 ++++++ .../db/viewmodel/MiningCoalHeightViewModel.kt | 89 ++++++++++++ .../MiningWorkingFaceRecordViewModel.kt | 70 ++++++++++ .../viewmodel/MiningWorkingFaceViewModel.kt | 91 +++++++++++++ .../mining/activity/AddMiningFaceActivity.kt | 66 ++++++--- .../ui/mining/activity/MiningActivity.kt | 128 +++++++++++++----- .../res/layout/activity_add_mining_face.xml | 2 +- .../main/res/layout/list_item_data_sync.xml | 6 +- 16 files changed, 669 insertions(+), 77 deletions(-) create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningCoalHeightDao.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceDao.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceRecordDao.kt rename coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/{MiningRoofLithologyEntity.kt => MiningCoalHeightEntity.kt} (67%) create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningCoalHeightRepository.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRecordRepository.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRepository.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningCoalHeightViewModel.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceRecordViewModel.kt create mode 100644 coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceViewModel.kt diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/AppDatabase.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/AppDatabase.kt index d77faee..601138b 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/AppDatabase.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/AppDatabase.kt @@ -6,9 +6,15 @@ import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase +import com.zmkg.coaloperation.db.dao.MiningCoalHeightDao +import com.zmkg.coaloperation.db.dao.MiningWorkingFaceDao +import com.zmkg.coaloperation.db.dao.MiningWorkingFaceRecordDao import com.zmkg.coaloperation.db.dao.TunnelRoofLithologyDao import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceDao import com.zmkg.coaloperation.db.dao.TunnelWorkingFaceRecordDao +import com.zmkg.coaloperation.db.entity.mining.MiningCoalHeightEntity +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceRecordEntity import com.zmkg.coaloperation.db.entity.tunnel.TunnelRoofLithologyEntity import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity @@ -18,6 +24,9 @@ import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity TunnelWorkingFaceEntity::class, TunnelWorkingFaceRecordEntity::class, TunnelRoofLithologyEntity::class, + MiningWorkingFaceEntity::class, + MiningWorkingFaceRecordEntity::class, + MiningCoalHeightEntity::class, ], version = 1, exportSchema = true @@ -26,6 +35,9 @@ abstract class AppDatabase : RoomDatabase() { abstract fun tunnelWorkingFaceDao(): TunnelWorkingFaceDao abstract fun tunnelWorkingFaceRecordDao(): TunnelWorkingFaceRecordDao abstract fun tunnelRoofLithologyDao(): TunnelRoofLithologyDao + abstract fun miningWorkingFaceDao(): MiningWorkingFaceDao + abstract fun miningWorkingFaceRecordDao(): MiningWorkingFaceRecordDao + abstract fun miningCoalHeightDao(): MiningCoalHeightDao companion object { @Volatile diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningCoalHeightDao.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningCoalHeightDao.kt new file mode 100644 index 0000000..c0609e1 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningCoalHeightDao.kt @@ -0,0 +1,44 @@ +package com.zmkg.coaloperation.db.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Update +import com.zmkg.coaloperation.db.entity.mining.MiningCoalHeightEntity + +@Dao +interface MiningCoalHeightDao { + @Insert + fun insert(entity: MiningCoalHeightEntity): Long + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertList(list: MutableList): Array + + @Update + fun update(entity: MiningCoalHeightEntity) + + @Query("SELECT * FROM mining_coal_height WHERE recordId = :recordId ORDER BY createTime ASC") + fun getEntityList(recordId: Long): MutableList? + + @Query("SELECT * FROM mining_coal_height WHERE dataState = :dataState ORDER BY createTime ASC") + fun getEntityListByState(dataState: String): MutableList? + + @Query("SELECT * FROM mining_coal_height WHERE surfaceId = :surfaceId ORDER BY createTime ASC") + fun getEntityListByFaceId(surfaceId: Long): MutableList? + + @Query("SELECT * FROM mining_coal_height WHERE surfaceId = :surfaceId AND recordId = :recordId ORDER BY createTime ASC") + fun getEntityListByRecordId( + surfaceId: Long, + recordId: Long + ): MutableList? + + @Query("SELECT * FROM mining_coal_height WHERE coalId = :lithologyId") + fun getEntityById(lithologyId: Long): MiningCoalHeightEntity? + + @Query("DELETE FROM mining_coal_height") + fun deleteAll(): Int + + @Query("DELETE FROM mining_coal_height WHERE recordId = :recordId") + fun deleteList(recordId: Long): Int +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceDao.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceDao.kt new file mode 100644 index 0000000..4c279a5 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceDao.kt @@ -0,0 +1,40 @@ +package com.zmkg.coaloperation.db.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.RawQuery +import androidx.room.Update +import androidx.sqlite.db.SupportSQLiteQuery +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity + +//import kotlinx.coroutines.flow.Flow + +@Dao +interface MiningWorkingFaceDao { + @Insert + fun insert(entity: MiningWorkingFaceEntity): Long + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertList(list: MutableList): Array + + @Update + fun update(entity: MiningWorkingFaceEntity) + + @Query("SELECT * FROM mining_working_face ORDER BY createTime DESC") + fun getEntityList(): MutableList? + + @RawQuery + fun getEntityListBySql(query: SupportSQLiteQuery): MutableList? + + @Query("SELECT * FROM mining_working_face WHERE dataState = :dataState ORDER BY createTime DESC") + fun getEntityListByState(dataState: String): MutableList? + + @Query("SELECT * FROM mining_working_face WHERE surfaceId = :surfaceId") + fun getEntityById(surfaceId: Long): MiningWorkingFaceEntity? + + @Query("DELETE FROM mining_working_face") + fun deleteAll(): Int + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceRecordDao.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceRecordDao.kt new file mode 100644 index 0000000..fec86c4 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/dao/MiningWorkingFaceRecordDao.kt @@ -0,0 +1,37 @@ +package com.zmkg.coaloperation.db.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Update +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceRecordEntity + +import kotlinx.coroutines.flow.Flow + +@Dao +interface MiningWorkingFaceRecordDao { + @Insert + fun insert(entity: MiningWorkingFaceRecordEntity): Long + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertList(list: MutableList): Array + + @Update + fun update(entity: MiningWorkingFaceRecordEntity) + + @Query("SELECT * FROM mining_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime DESC") + fun getEntityList(surfaceId: Long): MutableList? + + @Query("SELECT * FROM mining_working_face_record WHERE dataState = :dataState ORDER BY createTime DESC") + fun getEntityListByState(dataState: String): MutableList? + + @Query("SELECT * FROM mining_working_face_record WHERE surfaceId = :recordId") + fun getEntityById(recordId: Long): MiningWorkingFaceRecordEntity + + @Query("SELECT * FROM mining_working_face_record WHERE surfaceId = :surfaceId AND latestRecordState = '1' ORDER BY createTime DESC LIMIT 1") + fun getLastEntity(surfaceId: Long): MiningWorkingFaceRecordEntity? + + @Query("DELETE FROM mining_working_face_record") + fun deleteAll(): Int +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningRoofLithologyEntity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningCoalHeightEntity.kt similarity index 67% rename from coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningRoofLithologyEntity.kt rename to coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningCoalHeightEntity.kt index 15f310b..042cafa 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningRoofLithologyEntity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningCoalHeightEntity.kt @@ -9,32 +9,27 @@ import kotlinx.parcelize.Parcelize import java.time.LocalDateTime /** - * 回采工作面-顶板岩性数据表 + * 回采工作面-煤层厚度数据表 */ @Parcelize -@Entity(tableName = "mining_roof_lithology") -class MiningRoofLithologyEntity ( +@Entity(tableName = "mining_coal_height") +class MiningCoalHeightEntity ( /** - * 岩性Id + * 煤层Id */ @PrimaryKey - var lithologyId: Long = 0, + var coalId: Long = 0, /** - * 岩性类型名称 + * 支架号 */ - var lithologyType: String = "", + var supportNo: String = "", /** - * 岩性值结束 + * 煤层厚度值 */ - var positionEnd: String = "", - - /** - * 岩性值起始 - */ - var positionStart: String = "", + var coalHeight: String = "", /** * 工作面id @@ -62,5 +57,5 @@ class MiningRoofLithologyEntity ( var dataState: String = "0" ): Parcelable { @Ignore - constructor():this(lithologyId = 0) + constructor():this(coalId = 0) } diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningWorkingFaceRecordEntity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningWorkingFaceRecordEntity.kt index 28c02da..25cbca3 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningWorkingFaceRecordEntity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/mining/MiningWorkingFaceRecordEntity.kt @@ -93,7 +93,7 @@ data class MiningWorkingFaceRecordEntity ( var latestRecordState: String = "0", @Ignore - var mineWorkingLithologyList: MutableList? = null, + var coalHeightList: MutableList? = null, @Ignore var operationType: String = "1" diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningCoalHeightRepository.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningCoalHeightRepository.kt new file mode 100644 index 0000000..53c170c --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningCoalHeightRepository.kt @@ -0,0 +1,51 @@ +package com.zmkg.coaloperation.db.repository + +import com.zmkg.coaloperation.db.dao.MiningCoalHeightDao +import com.zmkg.coaloperation.db.entity.mining.MiningCoalHeightEntity +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class MiningCoalHeightRepository(private val dao: MiningCoalHeightDao) { + suspend fun getEntityList(recordId: Long) = withContext(Dispatchers.IO) { + dao.getEntityList(recordId) + } + + suspend fun getEntityListByState(dataState: String) = withContext(Dispatchers.IO) { + dao.getEntityListByState(dataState) + } + + suspend fun insert(entity: MiningCoalHeightEntity) = withContext(Dispatchers.IO) { + dao.insert(entity) + } + + suspend fun insertList(list: MutableList) = + withContext(Dispatchers.IO) { + dao.insertList(list) + } + + suspend fun update(entity: MiningCoalHeightEntity) = withContext(Dispatchers.IO) { + dao.update(entity) + } + + suspend fun getEntityListByFaceId(surfaceId: Long) = withContext(Dispatchers.IO) { + dao.getEntityListByFaceId(surfaceId) + } + + suspend fun getEntityListByRecordId(surfaceId: Long, recordId: Long) = + withContext(Dispatchers.IO) { + dao.getEntityListByRecordId(surfaceId, recordId) + } + + suspend fun getEntityById(lithologyId: Long) = withContext(Dispatchers.IO) { + dao.getEntityById(lithologyId) + } + + suspend fun deleteAll() = withContext(Dispatchers.IO) { + dao.deleteAll() + } + + suspend fun deleteList(recordId: Long) = withContext(Dispatchers.IO) { + dao.deleteList(recordId) + } + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRecordRepository.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRecordRepository.kt new file mode 100644 index 0000000..2957f23 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRecordRepository.kt @@ -0,0 +1,43 @@ +package com.zmkg.coaloperation.db.repository + +import com.zmkg.coaloperation.db.dao.MiningWorkingFaceRecordDao +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceRecordEntity +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class MiningWorkingFaceRecordRepository(private val dao: MiningWorkingFaceRecordDao) { + suspend fun getEntityList(surfaceId: Long) = withContext(Dispatchers.IO) { + dao.getEntityList(surfaceId) + } + + suspend fun getEntityListByState(dataState: String) = + withContext(Dispatchers.IO) { + dao.getEntityListByState(dataState) + } + + suspend fun insert(entity: MiningWorkingFaceRecordEntity) = withContext(Dispatchers.IO) { + dao.insert(entity) + } + + suspend fun insertList(list: MutableList) = + withContext(Dispatchers.IO) { + dao.insertList(list) + } + + suspend fun update(entity: MiningWorkingFaceRecordEntity) = withContext(Dispatchers.IO) { + dao.update(entity) + } + + suspend fun getEntityById(faceId: Long) = withContext(Dispatchers.IO) { + dao.getEntityById(faceId) + } + + suspend fun getLastEntity(surfaceId: Long) = withContext(Dispatchers.IO) { + dao.getLastEntity(surfaceId) + } + + suspend fun deleteAll() = withContext(Dispatchers.IO) { + dao.deleteAll() + } + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRepository.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRepository.kt new file mode 100644 index 0000000..441fa2f --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/repository/MiningWorkingFaceRepository.kt @@ -0,0 +1,40 @@ +package com.zmkg.coaloperation.db.repository + +import androidx.sqlite.db.SupportSQLiteQuery +import com.zmkg.coaloperation.db.dao.MiningWorkingFaceDao +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class MiningWorkingFaceRepository(private val dao: MiningWorkingFaceDao) { + suspend fun getEntityList() = withContext(Dispatchers.IO) { + dao.getEntityList() + } + + suspend fun getEntityListBySql(query: SupportSQLiteQuery) = withContext(Dispatchers.IO) { + dao.getEntityListBySql(query) + } + + suspend fun getEntityListByState(dataState: String) = withContext(Dispatchers.IO) { + dao.getEntityListByState(dataState) + } + + suspend fun insert(entity: MiningWorkingFaceEntity) = withContext(Dispatchers.IO) { + dao.insert(entity) + } + + suspend fun insertList(list: MutableList) = withContext(Dispatchers.IO) { + dao.insertList(list) + } + + suspend fun update(entity: MiningWorkingFaceEntity) = withContext(Dispatchers.IO) { + dao.update(entity) + } + + suspend fun getEntityById(faceId: Long) = withContext(Dispatchers.IO) { + dao.getEntityById(faceId) + } + suspend fun deleteAll() = withContext(Dispatchers.IO) { + dao.deleteAll() + } +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningCoalHeightViewModel.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningCoalHeightViewModel.kt new file mode 100644 index 0000000..18bb74d --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningCoalHeightViewModel.kt @@ -0,0 +1,89 @@ +package com.zmkg.coaloperation.db.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import com.zmkg.coaloperation.db.AppDatabase +import com.zmkg.coaloperation.db.entity.mining.MiningCoalHeightEntity +import com.zmkg.coaloperation.db.repository.MiningCoalHeightRepository +import kotlinx.coroutines.launch + +class MiningCoalHeightViewModel(application: Application) : AndroidViewModel(application) { + private val repository: MiningCoalHeightRepository + + init { + val dao = AppDatabase.getDatabase(application).miningCoalHeightDao() + repository = MiningCoalHeightRepository(dao) + } + + fun getEntityList(recordId: Long, action: (MutableList?) -> Unit) = + viewModelScope.launch { + val list: MutableList? = repository.getEntityList(recordId) + action(list) + } + + fun getEntityListByState( + dataState: String, + action: (MutableList?) -> Unit + ) = + viewModelScope.launch { + val list: MutableList? = + repository.getEntityListByState(dataState) + action(list) + } + + fun getEntityListByFaceId( + surfaceId: Long, + action: (MutableList?) -> Unit + ) = viewModelScope.launch { + val list: MutableList? = + repository.getEntityListByFaceId(surfaceId) + action(list) + } + + fun getEntityListByRecordId( + surfaceId: Long, + recordId: Long, + action: (MutableList?) -> Unit + ) = viewModelScope.launch { + val list: MutableList? = + repository.getEntityListByRecordId(surfaceId, recordId) + action(list) + } + + fun insertList(list: MutableList, action: () -> Unit = {}) = + viewModelScope.launch { + repository.insertList(list) + action() + } + + fun insert(entity: MiningCoalHeightEntity, action: () -> Unit) = viewModelScope.launch { + repository.insert(entity) + action() + } + + fun update(entity: MiningCoalHeightEntity, action: () -> Unit) = viewModelScope.launch { + repository.update(entity) + action() + } + + fun getEntityById(faceId: Long, action: (MiningCoalHeightEntity) -> Unit) = + viewModelScope.launch { + val entity = repository.getEntityById(faceId) + entity?.let { action(it) } + } + + fun deleteList(recordId: Long, action: () -> Unit = {}) = + viewModelScope.launch { + repository.deleteList(recordId) + action() + } + + fun deleteAll(action: () -> Unit = {}) = + viewModelScope.launch { + repository.deleteAll() + action() + } + + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceRecordViewModel.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceRecordViewModel.kt new file mode 100644 index 0000000..98899ac --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceRecordViewModel.kt @@ -0,0 +1,70 @@ +package com.zmkg.coaloperation.db.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import com.zmkg.coaloperation.db.AppDatabase +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceRecordEntity +import com.zmkg.coaloperation.db.repository.MiningWorkingFaceRecordRepository +import kotlinx.coroutines.launch + +class MiningWorkingFaceRecordViewModel(application: Application) : AndroidViewModel(application) { + private val repository: MiningWorkingFaceRecordRepository + + init { + val dao = AppDatabase.getDatabase(application).miningWorkingFaceRecordDao() + repository = MiningWorkingFaceRecordRepository(dao) + } + + fun getEntityList( + surfaceId: Long, + action: (MutableList?) -> Unit + ) = + viewModelScope.launch { + val list: MutableList? = + repository.getEntityList(surfaceId) + action(list) + } + + fun getEntityListByState( + dataState: String, + action: (MutableList?) -> Unit + ) = + viewModelScope.launch { + val list: MutableList? = + repository.getEntityListByState(dataState) + action(list) + } + + fun insert(entity: MiningWorkingFaceRecordEntity, action: () -> Unit) = viewModelScope.launch { + repository.insert(entity) + action() + } + + fun insertList(list: MutableList, action: () -> Unit = {}) = + viewModelScope.launch { + repository.insertList(list) + action() + } + + fun update(entity: MiningWorkingFaceRecordEntity, action: () -> Unit) = viewModelScope.launch { + repository.update(entity) + action() + } + + fun getEntityById(recordId: Long) = viewModelScope.launch { + repository.getEntityById(recordId) + } + + fun getLastEntity(surfaceId: Long, action: (MiningWorkingFaceRecordEntity?) -> Unit) = viewModelScope.launch { + val record = repository.getLastEntity(surfaceId) + action(record) + } + + fun deleteAll(action: () -> Unit={}) = viewModelScope.launch { + repository.deleteAll() + action() + } + + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceViewModel.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceViewModel.kt new file mode 100644 index 0000000..86376d0 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/viewmodel/MiningWorkingFaceViewModel.kt @@ -0,0 +1,91 @@ +package com.zmkg.coaloperation.db.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import androidx.sqlite.db.SimpleSQLiteQuery +import androidx.sqlite.db.SupportSQLiteQuery +import com.zmkg.coaloperation.db.AppDatabase +import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity +import com.zmkg.coaloperation.db.repository.MiningWorkingFaceRepository +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.launch + +class MiningWorkingFaceViewModel(application: Application) : AndroidViewModel(application) { + private val repository: MiningWorkingFaceRepository + + val faceList = MutableSharedFlow?>() + val faceListByState = MutableSharedFlow?>() + val insertOne = MutableSharedFlow() + val updateOne = MutableSharedFlow() + val insertArray = MutableSharedFlow>() + val queryOne = MutableSharedFlow() + val deleteFinish = MutableSharedFlow() + + init { + val dao = AppDatabase.getDatabase(application).miningWorkingFaceDao() + repository = MiningWorkingFaceRepository(dao) + } + +// fun getEntityList() = viewModelScope.launch { +// val list: MutableList? = repository.getEntityList() +// faceList.emit(list) +// } + + fun getEntityListByUserId(userId:String) = + viewModelScope.launch { + val sql = buildString { + append("SELECT * FROM mining_working_face WHERE 1=1 ") + if (userId.isNotBlank()) { + append(" AND userId = $userId") + } + } + val query = SimpleSQLiteQuery(sql) + val list: MutableList? = repository.getEntityListBySql(query) + faceList.emit(list) + } + + fun getEntityListBySql( + query: SupportSQLiteQuery, + action: (MutableList?) -> Unit + ) = + viewModelScope.launch { + val list: MutableList? = repository.getEntityListBySql(query) + action(list) + } + + fun getEntityListByState(dataState: String) = viewModelScope.launch { + val list: MutableList? = repository.getEntityListByState(dataState) + faceListByState.emit(list) + } + + fun insert(entity: MiningWorkingFaceEntity) = viewModelScope.launch { + val faceId = repository.insert(entity) + insertOne.emit(faceId) + } + + fun insertList(list: MutableList) = + viewModelScope.launch { + val array = repository.insertList(list) + insertArray.emit(array) + } + + fun update(entity: MiningWorkingFaceEntity) = viewModelScope.launch { + repository.update(entity) + updateOne.emit(true) + } + + fun getEntityById(faceId: Long) = + viewModelScope.launch { + val entity = repository.getEntityById(faceId) + entity?.let { + queryOne.emit(it) + } + } + + fun deleteAll() = + viewModelScope.launch { + repository.deleteAll() + deleteFinish.emit(true) + } +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/AddMiningFaceActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/AddMiningFaceActivity.kt index 1e60da7..c5781d9 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/AddMiningFaceActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/AddMiningFaceActivity.kt @@ -4,6 +4,10 @@ import android.os.Bundle import android.text.TextUtils import android.view.View import android.widget.TextView +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.LinearLayoutManager import com.zmkg.coaloperation.R import com.zmkg.coaloperation.adapter.AddMiningFaceAdapter @@ -13,10 +17,15 @@ import com.zmkg.coaloperation.bean.AddMiningFaceItem import com.zmkg.coaloperation.bean.WorkOption import com.zmkg.coaloperation.databinding.ActivityAddMiningFaceBinding import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity +import com.zmkg.coaloperation.db.viewmodel.MiningWorkingFaceViewModel import com.zmkg.coaloperation.ui.tunneling.activity.AddWorkingFaceActivity import com.zmkg.coaloperation.ui.tunneling.activity.WorkingFaceDetailActivity import com.zmkg.coaloperation.utils.DictUtils import com.zmkg.coaloperation.utils.PickerUtil +import com.zmkg.coaloperation.utils.SpTool +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -48,6 +57,9 @@ class AddMiningFaceActivity : private var faceDetail: MiningWorkingFaceEntity? = null private val miningList = mutableListOf() + private val workingFaceViewModel: MiningWorkingFaceViewModel by lazy { + ViewModelProvider(this)[MiningWorkingFaceViewModel::class.java] + } private val addFaceAdapter by lazy { AddMiningFaceAdapter(miningList).apply { addChildClickViewIds(R.id.tvSelectValue, R.id.imgExpand) @@ -74,14 +86,14 @@ class AddMiningFaceActivity : when (stringExtra) { WorkFaceType.ADD.name -> { currentFaceType = WorkFaceType.ADD - mBinding.confirm.text = "确认新增" + mBinding.btnConfirm.text = "确认新增" mBinding.toolbarLay.title = "新增工作面" initMiningList(true) } WorkFaceType.EDIT.name -> { currentFaceType = WorkFaceType.EDIT - mBinding.confirm.text = "确认修改" + mBinding.btnConfirm.text = "确认修改" mBinding.toolbarLay.title = "修改工作面" faceDetail = intent.getParcelableExtra(WorkingFaceDetailActivity.Companion.FACE_WORK_DETAIL_DATA) as MiningWorkingFaceEntity? @@ -123,11 +135,33 @@ class AddMiningFaceActivity : } override fun bindEvent() { - + mBinding.btnConfirm.setOnClickListener { + if (currentFaceType == WorkFaceType.ADD) { + addNewFace() + return@setOnClickListener + } + if (currentFaceType == WorkFaceType.EDIT) { + editFace() + return@setOnClickListener + } + } } - + private var workingFaceEntity: MiningWorkingFaceEntity?=null override fun createObserve() { super.createObserve() + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + launch { + workingFaceViewModel.insertOne.collectLatest{ + showToast("工作面新增完成") + workingFaceEntity?.let { + EventBus.getDefault().post(workingFaceEntity!!) + } + finish() + } + } + } + } } override fun processClick(v: View?) { @@ -142,17 +176,6 @@ class AddMiningFaceActivity : // } // } - R.id.confirm -> { - if (currentFaceType == WorkFaceType.ADD) { - addNewFace() - return - } - if (currentFaceType == WorkFaceType.EDIT) { - editFace() - return - } - } - } } @@ -160,13 +183,16 @@ class AddMiningFaceActivity : } private fun addNewFace() { -// workingFaceViewModel.insert(workingFaceEntity) { -// showToast("工作面新增完成") -// EventBus.getDefault().post(workingFaceEntity) -// finish() -// } + workingFaceEntity = MiningWorkingFaceEntity().also { + it.surfaceId = System.currentTimeMillis() + it.surfaceName = miningList[0].funcValue + it.userId = SpTool.getString(SpTool.USER_ID) + } + + workingFaceViewModel.insert(workingFaceEntity!!) } + private fun editFace() { // workingFaceViewModel.update(workingFaceEntity) { // showToast("工作面修改完成") diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/MiningActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/MiningActivity.kt index fe4f751..1243b61 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/MiningActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/mining/activity/MiningActivity.kt @@ -2,7 +2,12 @@ package com.zmkg.coaloperation.ui.mining.activity import android.annotation.SuppressLint import android.os.Bundle +import android.util.Log import android.view.View +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.LinearLayoutManager import com.zmkg.coaloperation.R import com.zmkg.coaloperation.adapter.MiningWorkingFaceAdapter @@ -16,10 +21,18 @@ import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceEntity import com.zmkg.coaloperation.db.entity.mining.MiningWorkingFaceRecordEntity import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceEntity import com.zmkg.coaloperation.db.entity.tunnel.TunnelWorkingFaceRecordEntity +import com.zmkg.coaloperation.db.viewmodel.MiningWorkingFaceRecordViewModel +import com.zmkg.coaloperation.db.viewmodel.MiningWorkingFaceViewModel +import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceRecordViewModel +import com.zmkg.coaloperation.db.viewmodel.TunnelWorkingFaceViewModel import com.zmkg.coaloperation.ui.mining.activity.AddMiningFaceActivity.Companion.WORK_FACE_TYPE import com.zmkg.coaloperation.ui.mining.activity.AddMiningFaceActivity.WorkFaceType import com.zmkg.coaloperation.ui.tunneling.activity.AddWorkingFaceRecordActivity import com.zmkg.coaloperation.ui.tunneling.activity.WorkingFaceStatisticsActivity +import com.zmkg.coaloperation.utils.SpTool +import com.zmkg.coaloperation.utils.toJsonString +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -29,6 +42,16 @@ import org.greenrobot.eventbus.ThreadMode class MiningActivity : BaseVMBActivity(R.layout.activity_mining) { + companion object { + private const val TAG = "MiningActivity" + } + + private val workingFaceViewModel: MiningWorkingFaceViewModel by lazy { + ViewModelProvider(this)[MiningWorkingFaceViewModel::class.java] + } + private val workingFaceRecordViewModel: MiningWorkingFaceRecordViewModel by lazy { + ViewModelProvider(this)[MiningWorkingFaceRecordViewModel::class.java] + } private val workingFaceList = mutableListOf() private val workingFaceAdapter: MiningWorkingFaceAdapter by lazy { @@ -36,7 +59,10 @@ class MiningActivity : setOnItemChildClickListener { _, view, position -> if (view.id == R.id.llWorkingFace) { toActivity(MiningFaceStatisticsActivity::class.java, Bundle().apply { - putParcelable(WorkingFaceStatisticsActivity.FACE_DETAIL, workingFaceList[position]) + putParcelable( + WorkingFaceStatisticsActivity.FACE_DETAIL, + workingFaceList[position] + ) }) return@setOnItemChildClickListener } @@ -52,7 +78,10 @@ class MiningActivity : } if (view.id == R.id.start_record) { toActivity(MiningFaceRecordActivity::class.java, Bundle().apply { - putString(MiningFaceRecordActivity.WORK_RECORD_TYPE, MiningFaceRecordActivity.WorkRecordType.ADD.name) + putString( + MiningFaceRecordActivity.WORK_RECORD_TYPE, + MiningFaceRecordActivity.WorkRecordType.ADD.name + ) putLong( MiningFaceRecordActivity.FACE_ID, workingFaceList[position].surfaceId @@ -79,41 +108,53 @@ class MiningActivity : val surfaceId02 = System.currentTimeMillis() val surfaceId03 = System.currentTimeMillis() val recordList = mutableListOf() - recordList.add(MiningWorkingFaceRecordEntity( - recordId = System.currentTimeMillis(), - surfaceId = surfaceId01, - recordPerson = "张三", - workingDate = "2025-09-19 10:50:15" - )) - recordList.add(MiningWorkingFaceRecordEntity( - recordId = System.currentTimeMillis(), - surfaceId = surfaceId01, - recordPerson = "李四", - workingDate = "2025-09-19 15:10:39" - )) - workingFaceList.add(MiningWorkingFaceEntity( - surfaceId = surfaceId01, - surfaceName = "250919回采工作面", - totalFootage = "256", - createTime = "2025-09-19 10:27:43", - records = recordList - )) - workingFaceList.add(MiningWorkingFaceEntity( - surfaceId = surfaceId02, - surfaceName = "250901回采工作面", - totalFootage = "256", - createTime = "2025-09-01 08:20:43" - )) - workingFaceList.add(MiningWorkingFaceEntity( - surfaceId = surfaceId03, - surfaceName = "250810回采工作面", - totalFootage = "256", - createTime = "2025-09-19 09:09:03" - )) + recordList.add( + MiningWorkingFaceRecordEntity( + recordId = System.currentTimeMillis(), + surfaceId = surfaceId01, + recordPerson = "张三", + workingDate = "2025-09-19 10:50:15" + ) + ) + recordList.add( + MiningWorkingFaceRecordEntity( + recordId = System.currentTimeMillis(), + surfaceId = surfaceId01, + recordPerson = "李四", + workingDate = "2025-09-19 15:10:39" + ) + ) + workingFaceList.add( + MiningWorkingFaceEntity( + surfaceId = surfaceId01, + surfaceName = "250919回采工作面", + totalFootage = "256", + createTime = "2025-09-19 10:27:43", + records = recordList + ) + ) + workingFaceList.add( + MiningWorkingFaceEntity( + surfaceId = surfaceId02, + surfaceName = "250901回采工作面", + totalFootage = "256", + createTime = "2025-09-01 08:20:43" + ) + ) + workingFaceList.add( + MiningWorkingFaceEntity( + surfaceId = surfaceId03, + surfaceName = "250810回采工作面", + totalFootage = "256", + createTime = "2025-09-19 09:09:03" + ) + ) workingFaceAdapter.notifyDataSetChanged() } override fun initData() { + val userId = SpTool.getString(SpTool.USER_ID) + workingFaceViewModel.getEntityListByUserId(userId) } override fun bindEvent() { @@ -162,9 +203,9 @@ class MiningActivity : if (index == -1) { //新增工作面 val insertIndex = 0 - workingFaceList.add(0,event) + workingFaceList.add(0, event) workingFaceAdapter.notifyItemInserted(insertIndex) - workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex+1) + workingFaceAdapter.notifyItemRangeChanged(insertIndex, insertIndex + 1) return } //修改工作面 @@ -184,7 +225,7 @@ class MiningActivity : faceEntity.records?.let { records -> val index = records.indexOfFirst { it.recordId == event.recordId } if (index == -1) { - records.add(0,event) + records.add(0, event) } else { records[index] = event } @@ -196,10 +237,23 @@ class MiningActivity : } @SuppressLint("SuspiciousIndentation") - private fun getRecordAdapter(position:Int):MiningWorkingFaceRecordAdapter { + private fun getRecordAdapter(position: Int): MiningWorkingFaceRecordAdapter { val viewHolder = mBinding.rvMiningList.findViewHolderForLayoutPosition(position) as MiningWorkingFaceAdapter.VH return viewHolder.binding.rvFaceRecord.adapter as MiningWorkingFaceRecordAdapter } + override fun createObserve() { + super.createObserve() + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + launch { + workingFaceViewModel.faceList.collectLatest { + Log.d(TAG, "createObserve: ${it.toJsonString()}") + } + } + } + } + } + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/activity_add_mining_face.xml b/coalMiningApp/app/src/main/res/layout/activity_add_mining_face.xml index f55cfea..3c1abc5 100644 --- a/coalMiningApp/app/src/main/res/layout/activity_add_mining_face.xml +++ b/coalMiningApp/app/src/main/res/layout/activity_add_mining_face.xml @@ -37,7 +37,7 @@