cloudroam
2025-04-01 661a264fef5d1a23ba850c9f65ac79c0127b3d1d
app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -14,6 +14,8 @@
import com.example.firstapp.model.ExpressPackage
import com.example.firstapp.model.FinanceGroup
import com.example.firstapp.model.FinancePackage
import com.example.firstapp.model.IncomeGroup
import com.example.firstapp.model.IncomePackage
import com.example.firstapp.util.SecureStorage
import kotlinx.coroutines.launch
@@ -21,22 +23,21 @@
    private val _expressItems = MutableLiveData<List<ExpressGroup>>()
    private val _financeItems = MutableLiveData<List<FinanceGroup>>()
    private val _incomeItems = MutableLiveData<List<FinanceGroup>>()
    private val _incomeItems = MutableLiveData<List<IncomeGroup>>()
    private val _flightItems = MutableLiveData<List<FinanceGroup>>()
    private val _trainItems = MutableLiveData<List<FinanceGroup>>()
    
    val expressItems: LiveData<List<ExpressGroup>> = _expressItems
    val financeItems: LiveData<List<FinanceGroup>> = _financeItems
    val incomeItems: LiveData<List<FinanceGroup>> = _incomeItems
    val incomeItems: LiveData<List<IncomeGroup>> = _incomeItems
    val flightItems: LiveData<List<FinanceGroup>> = _flightItems
    val trainItems: LiveData<List<FinanceGroup>> = _trainItems
    private val _categories = MutableLiveData<List<CategoryConfig>>()
    val categories: LiveData<List<CategoryConfig>> = _categories
    // 添加可见分类的 LiveData
    private val _visibleCategories = MutableLiveData<List<String>>()
    val visibleCategories: LiveData<List<String>> = _visibleCategories
    private val _visibleCategories = MutableLiveData<List<CategoryConfig>>()
    val visibleCategories: LiveData<List<CategoryConfig>> = _visibleCategories
    private lateinit var secureStorage: SecureStorage
    private lateinit var currentUserId: String
@@ -56,106 +57,90 @@
        _categories.value?.let { updateVisibleCategories(it) }
    }
    fun loadExpressData() {
    private fun loadDataByType(type: String) {
        viewModelScope.launch {
            // 1. 获取所有驿站类型的提醒设置
            val stations = Core.reminder.getByType("快递")
            // 2. 按驿站分组获取包裹信息
            val groups = stations.map { station ->
                val packages = Core.code.getByKeyword(station.nickname).map { code ->
                    ExpressPackage(
                        id = code.id, //ID
                        company = code.secondLevel, //快递公司
                        trackingNumber = code.code, // 取件码
                        createTime = code.createTime  //快递时间
                    )
            try {
                // 获取该类型下的所有站点分组
                val stations = Core.code.getStationsByType(type)
                when (type) {
                    "快递" -> {
                        // 处理快递类型
                        val groups = stations.map { station ->
                            val packages = Core.code.getPackagesByTypeAndStation(type, station.stationName).map { code ->
                                ExpressPackage(
                                    id = code.id,
                                    company = code.secondLevel,
                                    trackingNumber = code.code,
                                    createTime = code.createTime
                                )
                            }
                            ExpressGroup(stationName = station.stationName, packages = packages)
                        }
                        _expressItems.postValue(groups)
                    }
                    "收入" -> {
                        // 特殊处理收入类型
                        val groups = stations.map { station ->
                            val packages = Core.code.getPackagesByTypeAndStation(type, station.stationName).map { code ->
                                IncomePackage(
                                    id = code.id,
                                    company = code.secondLevel,  // 交易对方
                                    trackingNumber = code.code,  // 金额
                                    createTime = code.createTime,
                                    balance = code.remarks.replace("余额", "") // 去掉"余额"前缀
                                )
                            }
                            IncomeGroup(stationName = station.stationName, packages = packages)
                        }
                        _incomeItems.postValue(groups)
                    }
                    else -> {
                        // 处理其他类型(还款、航班、火车票)
                        val groups = stations.map { station ->
                            val packages = Core.code.getPackagesByTypeAndStation(type, station.stationName).map { code ->
                                FinancePackage(
                                    id = code.id,
                                    company = code.secondLevel,
                                    trackingNumber = code.code,
                                    createTime = code.createTime
                                )
                            }
                            FinanceGroup(stationName = station.stationName, packages = packages)
                        }
                        // 根据类型更新对应的 LiveData
                        when (type) {
                            "还款" -> _financeItems.postValue(groups)
                            "航班" -> _flightItems.postValue(groups)
                            "火车票" -> _trainItems.postValue(groups)
                        }
                    }
                }
                ExpressGroup(
                    stationName = station.nickname, packages = packages
                )
            } catch (e: Exception) {
                Log.e("HomeViewModel", "Failed to load $type data: ${e.message}")
            }
            _expressItems.postValue(groups)
        }
    }
    fun loadExpressData() {
        loadDataByType("快递")
    }
    fun loadFinanceData() {
        viewModelScope.launch {
            // 1. 获取所有驿站类型的提醒设置
            val stations = Core.reminder.getByType("还款")
            // 2. 按驿站分组获取包裹信息
            val groups = stations.map { station ->
                val packages = Core.code.getByKeyword(station.nickname).map { code ->
                    FinancePackage(
                        id = code.id, //ID
                        company = code.secondLevel, //快递公司
                        trackingNumber = code.code, // 取件码
                        createTime = code.createTime  //快递时间
                    )
                }
                FinanceGroup(
                    stationName = station.nickname, packages = packages
                )
            }
            _financeItems.postValue(groups)
        }
        loadDataByType("还款")
    }
    fun loadIncomeData() {
        viewModelScope.launch {
            val stations = Core.reminder.getByType("收入")
            val groups = stations.map { station ->
                val packages = Core.code.getByKeyword(station.nickname).map { code ->
                    FinancePackage(
                        id = code.id,
                        company = code.secondLevel,
                        trackingNumber = code.code,
                        createTime = code.createTime
                    )
                }
                FinanceGroup(stationName = station.nickname, packages = packages)
            }
            _incomeItems.postValue(groups)
        }
        loadDataByType("收入")
    }
    fun loadFlightData() {
        viewModelScope.launch {
            val stations = Core.reminder.getByType("航班")
            val groups = stations.map { station ->
                val packages = Core.code.getByKeyword(station.nickname).map { code ->
                    FinancePackage(
                        id = code.id,
                        company = code.secondLevel,
                        trackingNumber = code.code,
                        createTime = code.createTime
                    )
                }
                FinanceGroup(stationName = station.nickname, packages = packages)
            }
            _flightItems.postValue(groups)
        }
        loadDataByType("航班")
    }
    fun loadTrainData() {
        viewModelScope.launch {
            val stations = Core.reminder.getByType("火车票")
            val groups = stations.map { station ->
                val packages = Core.code.getByKeyword(station.nickname).map { code ->
                    FinancePackage(
                        id = code.id,
                        company = code.secondLevel,
                        trackingNumber = code.code,
                        createTime = code.createTime
                    )
                }
                FinanceGroup(stationName = station.nickname, packages = packages)
            }
            _trainItems.postValue(groups)
        }
        loadDataByType("火车票")
    }
    fun loadCategories() {
@@ -215,16 +200,9 @@
    }
    fun saveCategories(categories: List<CategoryConfig>) {
        viewModelScope.launch {
            // 保存到本地
            secureStorage.saveCategories(currentUserId, categories)
            // 同步到服务器
            syncCategoriesToServer(categories)
            _categories.value = categories
            // 更新可见分类
            updateVisibleCategories(categories)
        }
        _categories.value = categories
        // 更新可见分类
        _visibleCategories.value = categories.filter { it.isEnabled }
    }
    private fun updateVisibleCategories(categories: List<CategoryConfig>) {
@@ -233,7 +211,7 @@
            .sortedBy { it.order }
            .map { it.name }
        
        _visibleCategories.value = visibleNames
        _visibleCategories.value = categories.filter { it.isEnabled }
    }
    // 登出时不再清除本地数据