zhujie
2025-04-03 fe04012057d024770e0180543483d393281a542f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.example.firstapp.activity
 
import android.os.Bundle
import android.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.firstapp.adapter.ExpressPackageAdapter
import com.example.firstapp.core.Core
import com.example.firstapp.databinding.ActivityPickupBinding
import com.example.firstapp.model.ExpressPackage
import kotlinx.coroutines.launch
 
class PickupActivity : AppCompatActivity() {
    private lateinit var binding: ActivityPickupBinding
    private lateinit var expressAdapter: ExpressPackageAdapter
    
    // 添加类型常量
    companion object {
        const val TYPE_EXPRESS = "express"
        const val TYPE_REPAYMENT = "repayment"
        const val TYPE_INCOME = "income"
    }
    
    private var pageType = TYPE_EXPRESS
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityPickupBinding.inflate(layoutInflater)
        setContentView(binding.root)
 
        // 获取页面类型
        pageType = intent.getStringExtra("page_type") ?: TYPE_EXPRESS
 
        initViews()
        loadData()
    }
 
    private fun initViews() {
        // 初始化适配器,传入取件回调
        expressAdapter = ExpressPackageAdapter { pack ->
            handleSinglePickup(pack)
        }
        
        binding.rvPackages.apply {
            layoutManager = LinearLayoutManager(this@PickupActivity)
            adapter = expressAdapter
        }
 
        binding.ivBack.setOnClickListener {
            finish()
        }
 
        // 设置底部按钮文本并添加点击事件
        binding.btnPickupAll.apply {
            text = getButtonText()
            setOnClickListener {
                showPickupConfirmDialog()
            }
        }
    }
 
    private fun getConfirmMessage(): String {
        return when (pageType) {
            TYPE_EXPRESS -> "是否确认取出所有包裹?"
            TYPE_REPAYMENT -> "是否确认处理所有还款?"
            TYPE_INCOME -> "是否确认处理所有收入?"
            else -> "是否确认处理所有项目?"
        }
    }
 
    private fun getButtonText(): String {
        return when (pageType) {
            TYPE_EXPRESS -> "全部取件"
            TYPE_REPAYMENT -> "全部还款"
            TYPE_INCOME -> "全部收款"
            else -> "全部处理"
        }
    }
 
    private fun showPickupConfirmDialog() {
        AlertDialog.Builder(this)
            .setTitle(getButtonText())
            .setMessage(getConfirmMessage())
            .setPositiveButton("确认") { _, _ ->
                handlePickupAll()
            }
            .setNegativeButton("取消", null)
            .show()
    }
 
    private fun handleSinglePickup(pack: ExpressPackage) {
        lifecycleScope.launch {
            try {
                // 处理单个包裹取件
                Core.code.pickup(pack.id)
                // 重新加载数据
                loadData()
                // 通知MainActivity刷新
                setResult(RESULT_OK)
            } catch (e: Exception) {
                // 处理错误
            }
        }
    }
 
    private fun handlePickupAll() {
        lifecycleScope.launch {
            try {
                // 获取当前所有包裹
                val packages = expressAdapter.currentList
                // 批量处理取件
                packages.forEach { pack ->
                    Core.code.pickup(pack.id)
                }
                // 清空列表
                expressAdapter.submitList(emptyList())
                // 更新包裹数量显示
                binding.tvPackageCount.text = getCountText(0)
                // 通知MainActivity刷新
                setResult(RESULT_OK)
            } catch (e: Exception) {
                // 处理错误
                // 如果出错则重新加载数据
                loadData()
            }
        }
    }
 
    private fun getCountText(count: Int): String {
        return when (pageType) {
            TYPE_EXPRESS -> "共${count}个包裹"
            TYPE_REPAYMENT -> "共${count}笔还款"
            TYPE_INCOME -> "共${count}笔收入"
            else -> "共${count}个"
        }
    }
 
    private fun loadData() {
        val stationName = intent.getStringExtra("station_name") ?: ""
        val company = intent.getStringExtra("company") ?: ""
        
        lifecycleScope.launch {
            val codes = Core.code.getByKeyword(stationName)
            val packages = codes.map { code ->
                ExpressPackage(
                    id = code.id,
                    company = code.secondLevel ?: company,
                    trackingNumber = code.code,
                    createTime = code.createTime
                )
            }
            
            expressAdapter.submitList(packages)
            binding.tvStationName.text = stationName
            binding.tvPackageCount.text = getCountText(packages.size)
        }
    }