回采配置数据库并进场保存和查询测试

This commit is contained in:
2025-09-22 23:29:04 +08:00
parent 58798fcbfb
commit 87da63bec7
16 changed files with 669 additions and 77 deletions
@@ -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
@@ -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<MiningCoalHeightEntity>): Array<Long>
@Update
fun update(entity: MiningCoalHeightEntity)
@Query("SELECT * FROM mining_coal_height WHERE recordId = :recordId ORDER BY createTime ASC")
fun getEntityList(recordId: Long): MutableList<MiningCoalHeightEntity>?
@Query("SELECT * FROM mining_coal_height WHERE dataState = :dataState ORDER BY createTime ASC")
fun getEntityListByState(dataState: String): MutableList<MiningCoalHeightEntity>?
@Query("SELECT * FROM mining_coal_height WHERE surfaceId = :surfaceId ORDER BY createTime ASC")
fun getEntityListByFaceId(surfaceId: Long): MutableList<MiningCoalHeightEntity>?
@Query("SELECT * FROM mining_coal_height WHERE surfaceId = :surfaceId AND recordId = :recordId ORDER BY createTime ASC")
fun getEntityListByRecordId(
surfaceId: Long,
recordId: Long
): MutableList<MiningCoalHeightEntity>?
@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
}
@@ -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<MiningWorkingFaceEntity>): Array<Long>
@Update
fun update(entity: MiningWorkingFaceEntity)
@Query("SELECT * FROM mining_working_face ORDER BY createTime DESC")
fun getEntityList(): MutableList<MiningWorkingFaceEntity>?
@RawQuery
fun getEntityListBySql(query: SupportSQLiteQuery): MutableList<MiningWorkingFaceEntity>?
@Query("SELECT * FROM mining_working_face WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<MiningWorkingFaceEntity>?
@Query("SELECT * FROM mining_working_face WHERE surfaceId = :surfaceId")
fun getEntityById(surfaceId: Long): MiningWorkingFaceEntity?
@Query("DELETE FROM mining_working_face")
fun deleteAll(): Int
}
@@ -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<MiningWorkingFaceRecordEntity>): Array<Long>
@Update
fun update(entity: MiningWorkingFaceRecordEntity)
@Query("SELECT * FROM mining_working_face_record WHERE surfaceId = :surfaceId ORDER BY createTime DESC")
fun getEntityList(surfaceId: Long): MutableList<MiningWorkingFaceRecordEntity>?
@Query("SELECT * FROM mining_working_face_record WHERE dataState = :dataState ORDER BY createTime DESC")
fun getEntityListByState(dataState: String): MutableList<MiningWorkingFaceRecordEntity>?
@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
}
@@ -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)
}
@@ -93,7 +93,7 @@ data class MiningWorkingFaceRecordEntity (
var latestRecordState: String = "0",
@Ignore
var mineWorkingLithologyList: MutableList<MiningRoofLithologyEntity>? = null,
var coalHeightList: MutableList<MiningCoalHeightEntity>? = null,
@Ignore
var operationType: String = "1"
@@ -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<MiningCoalHeightEntity>) =
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)
}
}
@@ -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<MiningWorkingFaceRecordEntity>) =
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()
}
}
@@ -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<MiningWorkingFaceEntity>) = 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()
}
}
@@ -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<MiningCoalHeightEntity>?) -> Unit) =
viewModelScope.launch {
val list: MutableList<MiningCoalHeightEntity>? = repository.getEntityList(recordId)
action(list)
}
fun getEntityListByState(
dataState: String,
action: (MutableList<MiningCoalHeightEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<MiningCoalHeightEntity>? =
repository.getEntityListByState(dataState)
action(list)
}
fun getEntityListByFaceId(
surfaceId: Long,
action: (MutableList<MiningCoalHeightEntity>?) -> Unit
) = viewModelScope.launch {
val list: MutableList<MiningCoalHeightEntity>? =
repository.getEntityListByFaceId(surfaceId)
action(list)
}
fun getEntityListByRecordId(
surfaceId: Long,
recordId: Long,
action: (MutableList<MiningCoalHeightEntity>?) -> Unit
) = viewModelScope.launch {
val list: MutableList<MiningCoalHeightEntity>? =
repository.getEntityListByRecordId(surfaceId, recordId)
action(list)
}
fun insertList(list: MutableList<MiningCoalHeightEntity>, 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()
}
}
@@ -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<MiningWorkingFaceRecordEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<MiningWorkingFaceRecordEntity>? =
repository.getEntityList(surfaceId)
action(list)
}
fun getEntityListByState(
dataState: String,
action: (MutableList<MiningWorkingFaceRecordEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<MiningWorkingFaceRecordEntity>? =
repository.getEntityListByState(dataState)
action(list)
}
fun insert(entity: MiningWorkingFaceRecordEntity, action: () -> Unit) = viewModelScope.launch {
repository.insert(entity)
action()
}
fun insertList(list: MutableList<MiningWorkingFaceRecordEntity>, 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()
}
}
@@ -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<MutableList<MiningWorkingFaceEntity>?>()
val faceListByState = MutableSharedFlow<MutableList<MiningWorkingFaceEntity>?>()
val insertOne = MutableSharedFlow<Long>()
val updateOne = MutableSharedFlow<Boolean>()
val insertArray = MutableSharedFlow<Array<Long>>()
val queryOne = MutableSharedFlow<MiningWorkingFaceEntity>()
val deleteFinish = MutableSharedFlow<Boolean>()
init {
val dao = AppDatabase.getDatabase(application).miningWorkingFaceDao()
repository = MiningWorkingFaceRepository(dao)
}
// fun getEntityList() = viewModelScope.launch {
// val list: MutableList<MiningWorkingFaceEntity>? = 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<MiningWorkingFaceEntity>? = repository.getEntityListBySql(query)
faceList.emit(list)
}
fun getEntityListBySql(
query: SupportSQLiteQuery,
action: (MutableList<MiningWorkingFaceEntity>?) -> Unit
) =
viewModelScope.launch {
val list: MutableList<MiningWorkingFaceEntity>? = repository.getEntityListBySql(query)
action(list)
}
fun getEntityListByState(dataState: String) = viewModelScope.launch {
val list: MutableList<MiningWorkingFaceEntity>? = repository.getEntityListByState(dataState)
faceListByState.emit(list)
}
fun insert(entity: MiningWorkingFaceEntity) = viewModelScope.launch {
val faceId = repository.insert(entity)
insertOne.emit(faceId)
}
fun insertList(list: MutableList<MiningWorkingFaceEntity>) =
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)
}
}
@@ -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<AddMiningFaceItem>()
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("工作面修改完成")
@@ -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<TestViewModel, ActivityMiningBinding>(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<MiningWorkingFaceEntity>()
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<MiningWorkingFaceRecordEntity>()
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()}")
}
}
}
}
}
}
@@ -37,7 +37,7 @@
</LinearLayout>
<com.allen.library.shape.ShapeTextView
android:id="@+id/confirm"
android:id="@+id/btnConfirm"
android:layout_width="250dp"
android:layout_height="52dp"
android:layout_gravity="center_horizontal"
@@ -16,7 +16,7 @@
android:id="@+id/tvItemUnit"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="20dp"
android:layout_marginStart="18dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:maxLines="1"
@@ -28,7 +28,7 @@
android:id="@+id/btnDataPull"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/bg_stroke_gray"
android:gravity="center_horizontal"
android:orientation="vertical"
@@ -55,7 +55,7 @@
android:id="@+id/btnDataPush"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/bg_stroke_gray"
android:gravity="center_horizontal"
android:orientation="vertical"