diff --git a/app/src/main/java/com/shuwei/dish/match/db/DbRepository.kt b/app/src/main/java/com/shuwei/dish/match/db/DbRepository.kt index d68d977..4240d3c 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/DbRepository.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/DbRepository.kt @@ -222,6 +222,17 @@ class DbRepository { suspend fun countSlotAll() = withContext(Dispatchers.IO) { db.seasoningSlotDao().countSlotAll() } + + /** + * 物理清空全部 4 张表的测试数据 + * 清除顺序:先删子表(食材),再删主表(菜品),最后删配置表(调料、槽位) + */ + suspend fun clearAllTestData() = withContext(Dispatchers.IO) { + db.cookFoodGoodsDao().deleteAll() + db.cookFoodDao().deleteAll() + db.seasoningDao().deleteAll() + db.seasoningSlotDao().deleteAll() + } } // //class SeasoningRepository(val seasoningDao: SeasoningDao) { diff --git a/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt b/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt index 42a0151..e864cb8 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/DbViewModel.kt @@ -239,6 +239,17 @@ class DbViewModel : ViewModel() { // ---- 数据库调试查看 ---- + /** + * 物理清空全部 4 张表的测试数据,完成后通过回调通知 UI + * @param onDone 清除完成后在主线程执行的回调 + */ + fun clearAllTestData(onDone: () -> Unit) { + viewModelScope.launch { + rep.clearAllTestData() + onDone() + } + } + companion object { /** 每页加载条数 */ const val DB_INSPECT_PAGE_SIZE = 50 diff --git a/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodDao.kt b/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodDao.kt index 84c8a6e..d1c4286 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodDao.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodDao.kt @@ -40,4 +40,8 @@ interface CookFoodDao { /** 统计菜品记录总数,showDel=true 时包含已删除记录 */ @Query("SELECT COUNT(*) FROM dm_cook_food WHERE (:showDel = 1 OR isDel = 0)") suspend fun countCookFoodAll(showDel: Int): Int + + /** 物理清空全表,用于清除测试数据 */ + @Query("DELETE FROM dm_cook_food") + suspend fun deleteAll() } diff --git a/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodGoodsDao.kt b/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodGoodsDao.kt index 7ae95f7..21222ce 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodGoodsDao.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/dao/CookFoodGoodsDao.kt @@ -40,4 +40,8 @@ interface CookFoodGoodsDao { /** 统计食材记录总数,showDel=true 时包含已删除记录 */ @Query("SELECT COUNT(*) FROM dm_cook_food_goods WHERE (:showDel = 1 OR isDel = 0)") suspend fun countCookFoodGoodsAll(showDel: Int): Int + + /** 物理清空全表,用于清除测试数据 */ + @Query("DELETE FROM dm_cook_food_goods") + suspend fun deleteAll() } diff --git a/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningDao.kt b/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningDao.kt index 4f2ee2e..df98acc 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningDao.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningDao.kt @@ -53,4 +53,8 @@ interface SeasoningDao { /** 统计调料记录总数,showDel=true 时包含已删除记录 */ @Query("SELECT COUNT(*) FROM dm_seasoning WHERE (:showDel = 1 OR isDel = 0)") suspend fun countSeasoningAll(showDel: Int): Int + + /** 物理清空全表,用于清除测试数据(比 clearAllSeasoning 的逻辑删除更彻底) */ + @Query("DELETE FROM dm_seasoning") + suspend fun deleteAll() } diff --git a/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningSlotDao.kt b/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningSlotDao.kt index 5a052e4..512be8d 100644 --- a/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningSlotDao.kt +++ b/app/src/main/java/com/shuwei/dish/match/db/dao/SeasoningSlotDao.kt @@ -60,4 +60,8 @@ interface SeasoningSlotDao { */ @Query("DELETE FROM dm_seasoning_slot WHERE deviceId = :deviceId") suspend fun deleteAllByDeviceId(deviceId: String) + + /** 物理清空全表,用于清除测试数据 */ + @Query("DELETE FROM dm_seasoning_slot") + suspend fun deleteAll() } diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt index 1ad21c8..9093248 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SettingActivity.kt @@ -16,6 +16,7 @@ import com.shuwei.dish.match.utils.SpTool import com.shuwei.dish.match.utils.ext.clickWithDebounce import com.shuwei.dish.match.utils.ext.gone import com.shuwei.dish.match.utils.ext.startActivity +import com.shuwei.dish.match.utils.ext.toast import com.shuwei.dish.match.utils.ext.visible /** @@ -48,6 +49,7 @@ class SettingActivity : BaseActivity() { it.clickWithDebounce { binding.llDbInspect.visible() binding.llScaleObserve.visible() + binding.llClearTestData.visible() } }) @@ -83,6 +85,27 @@ class SettingActivity : BaseActivity() { binding.llScaleObserve.clickWithDebounce { startActivity() } + binding.llClearTestData.clickWithDebounce { + showClearTestDataDialog() + } + } + + /** + * 弹出清除测试数据的二次确认弹窗 + */ + private fun showClearTestDataDialog() { + CommonDialog(this) + .setTitle("测试数据清除") + .setContent("将物理删除全部 4 张表数据(菜品、食材、调料、槽位),此操作不可恢复,同时重置菜品模式和食堂id,确认继续?") + .setNegativeButton("取消") + .setPositiveButton("确认清除") { + appViewModel.clearAllTestData { + SpTool.cookMode = -1 + SpTool.canteenId = "0" + toast("测试数据已清除") + } + } + .show() } private fun openCollectPage() { diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 1f457fc..c422f81 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -173,6 +173,38 @@ tools:ignore="ContentDescription" /> + + + + + + +