diff --git a/app/src/main/java/com/zywl/test1229/bean/StakeInfo.kt b/app/src/main/java/com/zywl/test1229/bean/StakeInfo.kt index 1366f21..0f2b90f 100644 --- a/app/src/main/java/com/zywl/test1229/bean/StakeInfo.kt +++ b/app/src/main/java/com/zywl/test1229/bean/StakeInfo.kt @@ -1,12 +1,16 @@ package com.zywl.test1229.bean import android.os.Parcelable +import androidx.room.Entity +import androidx.room.PrimaryKey import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable +@Entity(tableName = "info_table") @Serializable @Parcelize data class StakeInfo( + @PrimaryKey(autoGenerate = true) val id: Long = 0, val tempNo: String, val pipeLine: String, val stakeType: String, @@ -23,6 +27,7 @@ data class StakeInfo( ) : Parcelable { companion object { val Empty = StakeInfo( + 0, "", "", "", diff --git a/app/src/main/java/com/zywl/test1229/database/AppDatabase.kt b/app/src/main/java/com/zywl/test1229/database/AppDatabase.kt new file mode 100644 index 0000000..4788c4b --- /dev/null +++ b/app/src/main/java/com/zywl/test1229/database/AppDatabase.kt @@ -0,0 +1,28 @@ +package com.zywl.test1229.database + +import android.content.Context +import androidx.room.Dao +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import com.zywl.test1229.bean.StakeInfo + +@Database(entities = [StakeInfo::class], version = 1, exportSchema = false) +abstract class AppDatabase : RoomDatabase() { + abstract fun dataDao():DataDao + companion object{ + @Volatile + private var INSTANCE: AppDatabase? = null + fun getDatabase(context: Context): AppDatabase { + return INSTANCE ?: synchronized(this) { + val instance = Room.databaseBuilder( + context.applicationContext, + AppDatabase::class.java, + "app_database.db" + ).build() + INSTANCE = instance + instance + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zywl/test1229/database/DataDao.kt b/app/src/main/java/com/zywl/test1229/database/DataDao.kt new file mode 100644 index 0000000..986ca8c --- /dev/null +++ b/app/src/main/java/com/zywl/test1229/database/DataDao.kt @@ -0,0 +1,19 @@ +package com.zywl.test1229.database + +import androidx.lifecycle.LiveData +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import com.zywl.test1229.bean.StakeInfo + +@Dao +interface DataDao { + @Insert + suspend fun insert(data:StakeInfo) + @Insert + suspend fun insertAll(data:List) + @Query("SELECT * FROM info_table") + fun getAllStakeInfo(): LiveData> + @Query("DELETE FROM info_table") + suspend fun deleteAll() +} \ No newline at end of file diff --git a/app/src/main/java/com/zywl/test1229/di/SharedModule.kt b/app/src/main/java/com/zywl/test1229/di/SharedModule.kt index a97ed1c..958a9b7 100644 --- a/app/src/main/java/com/zywl/test1229/di/SharedModule.kt +++ b/app/src/main/java/com/zywl/test1229/di/SharedModule.kt @@ -1,6 +1,12 @@ package com.zywl.test1229.di +import android.app.Application +import android.content.Context +import androidx.room.Dao +import androidx.room.Room import com.zywl.test1229.data.PermissionState +import com.zywl.test1229.database.AppDatabase +import com.zywl.test1229.database.DataDao import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -18,6 +24,25 @@ object SharedModule { fun providePermissionState(): MutableStateFlow { return MutableStateFlow(PermissionState.None) } + @Provides + @Singleton + fun provideContext(app: Application): Context { + return app.applicationContext + } + @Provides + @Singleton + fun provideDatabase(context: Context): AppDatabase { + return Room.databaseBuilder( + context.applicationContext, + AppDatabase::class.java, + "app_database.db" + ).build() + } + @Provides + @Singleton + fun provideUserDao(appDatabase: AppDatabase): DataDao { + return appDatabase.dataDao() + } } @Qualifier diff --git a/app/src/main/java/com/zywl/test1229/ui/home/HomeViewModel.kt b/app/src/main/java/com/zywl/test1229/ui/home/HomeViewModel.kt index 61ff2e9..80c4e39 100644 --- a/app/src/main/java/com/zywl/test1229/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/zywl/test1229/ui/home/HomeViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import com.zywl.test1229.bean.Constant import com.zywl.test1229.bean.StakeInfo import com.zywl.test1229.data.PermissionState +import com.zywl.test1229.database.DataDao import com.zywl.test1229.di.PermissionStateFlow import com.zywl.test1229.ktx.TAG import com.zywl.test1229.ktx.toast @@ -31,7 +32,8 @@ class HomeViewModel @Inject constructor( @ApplicationContext private val context: Context, @PermissionStateFlow - private val permissionState: MutableStateFlow + private val permissionState: MutableStateFlow, + private val dao: DataDao ) : ViewModel() { private val _state = MutableStateFlow(HomeViewState()) val state = _state.asStateFlow() @@ -49,13 +51,16 @@ class HomeViewModel @Inject constructor( delay(10_000) val items = _state.value.items if (items.isEmpty()) continue - ExcelUtils.produceExcel(context, items, true) +// ExcelUtils.produceExcel(context, items, true) + dao.insertAll(items) + Log.d(TAG, "HomeViewModel: produceExcel") } } permissionState.onEach { if (it == PermissionState.Granted) { - val file = File(File(Constant.SDCARD, Constant.projectName), "backup/main.xls") - onFileSelected(file.path) +// val file = File(File(Constant.SDCARD, Constant.projectName), "backup/main.xls") +// onFileSelected(file.path) + onUpdateItems(dao) } }.launchIn(viewModelScope) } @@ -67,6 +72,15 @@ class HomeViewModel @Inject constructor( _state.update { it.copy(items = it.items + stakeInfoList) } } } + private fun onUpdateItems(dataDao: DataDao){ + viewModelScope.launch(Dispatchers.IO) { + val stakeInfoList = dataDao.getAllStakeInfo().value + stakeInfoList?.let { + Log.d(TAG, "onFileSelected: $stakeInfoList") + _state.update { it.copy(items = stakeInfoList) } + } + } + } private fun onPipeLineChanged(index: Int, value: StakeInfo) { Log.d(TAG, "onPipeLineChanged: $index, $value") diff --git a/app/src/main/java/com/zywl/test1229/utils/ExcelUtils.kt b/app/src/main/java/com/zywl/test1229/utils/ExcelUtils.kt index 7e95ea5..65bac1a 100644 --- a/app/src/main/java/com/zywl/test1229/utils/ExcelUtils.kt +++ b/app/src/main/java/com/zywl/test1229/utils/ExcelUtils.kt @@ -46,6 +46,7 @@ object ExcelUtils { // 跳过空行 if (row == null) continue var stakeInfo = StakeInfo( + 0, getCellData(row.getCell(1)), getCellData(row.getCell(0)), getCellData(row.getCell(2)), diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b52d5ac..29c0a47 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.8.0" +agp = "8.7.3" kotlin = "2.1.10" core-ktx = "1.15.0" appcompat = "1.7.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e18bc25..ba21052 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip +distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME