左晓为主开发手持机充值管理机
feat(general): 新增开卡信息保存功能并优化界面布局- 新增 CardRegistrationBean 数据模型用于保存开卡信息
- 在数据库中添加 card_registration 表用于存储开卡记录
- 优化 NewCard2Activity 界面布局,调整样式和间距
- 添加协程支持,实现异步保存开卡信息到数据库
- 更新颜色配置,统一使用新加的 base_blue_bg 和 base_green_bg颜色
6个文件已修改
2个文件已添加
204 ■■■■ 已修改文件
baselibrary/src/main/res/values/colors.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/CardRegistrationDao.kt 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/layout/activity_new_card_1_ge.xml 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/values/colors.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/src/main/res/values/colors.xml
@@ -14,7 +14,10 @@
    <color name="colorBackground">#FFFFFF</color>
    <!--公共标题-->
    <color name="title_bg">#009ad6</color>
    <color name="base_blue_bg">#009ad6</color>
    <color name="base_green_bg">#e6e6e6</color>
    <color name="title_bg">@color/base_blue_bg</color>
    <color name="main_bg">#F0F0F0</color>
    <color name="select_title_text">#B0B0B0</color>
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -6,14 +6,18 @@
import android.text.TextWatcher
import android.view.View
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
import com.dayu.general.BaseApplication
import com.dayu.general.R
import com.dayu.general.bean.db.CardRegistrationBean
import com.dayu.general.dao.BaseDaoSingleton
import com.dayu.general.databinding.ActivityNewCard1GeBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import kotlinx.coroutines.launch
/**
 * Description: 用户开卡界面
@@ -167,10 +171,30 @@
            object : SubscriberListener<BaseResponse<String>>() {
                override fun onNext(response: BaseResponse<String>) {
                    if (response.success) {
                        // 激活成功
                        Toast.makeText(this@NewCard2Activity, "开卡成功", Toast.LENGTH_SHORT).show()
                        setResult(RESULT_OK)
                        finish()
                        // 保存开卡信息到数据库
                        val cardRegistration = CardRegistrationBean(
                            cardNumber = cardPhysicalId,
                            userName = binding.newCardUserName.text.toString(),
                            idCard = binding.newCardIdCard.text.toString(),
                            farmerCode = binding.newCardFarmerCode.text.toString(),
                            cardFee = cardFee,
                            remark = binding.newCardRemark.text.toString(),
                            paymentMethod = paymentId,
                            isReported = true,
                            isCardWritten = true
                        )
                        // 使用协程在后台线程中保存数据
                        lifecycleScope.launch {
                            try {
                                BaseDaoSingleton.getInstance(this@NewCard2Activity).cardRegistrationDao().insert(cardRegistration)
                                Toast.makeText(this@NewCard2Activity, "开卡成功", Toast.LENGTH_SHORT).show()
                                setResult(RESULT_OK)
                                finish()
                            } catch (e: Exception) {
                                Toast.makeText(this@NewCard2Activity, "保存开卡信息失败: ${e.message}", Toast.LENGTH_SHORT).show()
                            }
                        }
                    } else {
                        // 激活失败
                        Toast.makeText(
@@ -215,10 +239,15 @@
            binding.newCardArerNumber.text = cardNumber
            // 隐藏NFC读卡界面
            binding.nfcContainer.visibility = View.GONE
            Toast.makeText(this, "读卡成功", Toast.LENGTH_SHORT).show()
            binding.centerScroll.visibility = View.VISIBLE
            binding.newCardRegistBtn.visibility = View.VISIBLE
        }
    }
}
generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt
New file
@@ -0,0 +1,21 @@
package com.dayu.general.bean.db
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "card_registration")
data class CardRegistrationBean(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0,
    val cardNumber: String, // IC卡卡号
    val userName: String, // 姓名
    val idCard: String, // 身份证号
    val farmerCode: String, // 农户编号
    val cardFee: Double, // 工本费
    val remark: String, // 备注
    val paymentMethod: Int, // 支付方式
    val orderId: String? = null, // 订单id,初始为null,后续更新
    val isReported: Boolean = false, // 是否上报成功
    val isCardWritten: Boolean = false, // 是否写卡成功
    val createTime: Long = System.currentTimeMillis() // 创建时间
)
generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt
@@ -3,11 +3,13 @@
import androidx.room.Database
import androidx.room.RoomDatabase
import com.dayu.general.bean.db.CardData
import com.dayu.general.bean.db.CardRegistrationBean
import com.dayu.general.bean.db.PassWordCardBean
import com.dayu.general.bean.db.ProjectDataBean
@Database(entities = [PassWordCardBean::class, CardData::class, ProjectDataBean::class], version = 1, exportSchema = false)
@Database(entities = [PassWordCardBean::class, CardData::class, ProjectDataBean::class, CardRegistrationBean::class], version = 2, exportSchema = false)
abstract class AppDataBase : RoomDatabase() {
    abstract fun cardDataDao(): CardDataDao
    abstract fun projectDataDao(): ProjectDataDao
    abstract fun cardRegistrationDao(): CardRegistrationDao
}
generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt
@@ -10,6 +10,7 @@
    companion object {
        var baseDao: AppDataBase? = null
        var AsynchBaseDao: AppDataBase? = null
        @JvmField
        val SqlitePath: String =
            Environment.getExternalStorageDirectory().absolutePath + File.separator + ".dayu" + File.separator + "data" + File.separator
@@ -23,22 +24,22 @@
            }
            return baseDao as AppDataBase
        }
    }
    var AsynchBaseDao: AppDataBase? = null
    fun getAsynchInstance(context: Context?): AppDataBase? {
        if (AsynchBaseDao == null) {
            AsynchBaseDao = Room.databaseBuilder<AppDataBase>(
                context!!,
                AppDataBase::class.java,
                SqlitePath + "ConfigurationData_generalV1"
            ).build()
        fun getAsynchInstance(context: Context?): AppDataBase? {
            if (AsynchBaseDao == null) {
                AsynchBaseDao = Room.databaseBuilder<AppDataBase>(
                    context!!,
                    AppDataBase::class.java,
                    SqlitePath + "ConfigurationData_generalV1"
                ).build()
            }
            return AsynchBaseDao
        }
        return AsynchBaseDao
    }
//    companion object {
//        fun getAsynchInstance(baseActivity: BaseActivity): AppDataBase? {
//           return getAsynchInstance(baseActivity)
generallibrary/src/main/java/com/dayu/general/dao/CardRegistrationDao.kt
New file
@@ -0,0 +1,31 @@
package com.dayu.general.dao
import androidx.room.*
import com.dayu.general.bean.db.CardRegistrationBean
@Dao
interface CardRegistrationDao {
    @Insert
    suspend fun insert(cardRegistration: CardRegistrationBean): Long
    @Update
    suspend fun update(cardRegistration: CardRegistrationBean)
    @Delete
    suspend fun delete(cardRegistration: CardRegistrationBean)
    @Query("SELECT * FROM card_registration WHERE cardNumber = :cardNumber")
    suspend fun getByCardNumber(cardNumber: String): CardRegistrationBean?
    @Query("SELECT * FROM card_registration WHERE orderId = :orderId")
    suspend fun getByOrderId(orderId: String): CardRegistrationBean?
    @Query("SELECT * FROM card_registration WHERE isReported = 0")
    suspend fun getUnreportedCards(): List<CardRegistrationBean>
    @Query("SELECT * FROM card_registration WHERE isCardWritten = 0")
    suspend fun getUnwrittenCards(): List<CardRegistrationBean>
    @Query("SELECT * FROM card_registration ORDER BY createTime DESC")
    suspend fun getAllCards(): List<CardRegistrationBean>
}
generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
@@ -4,7 +4,7 @@
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F5F7FA">
    android:background="@color/base_list_bg">
    <com.dayu.baselibrary.view.TitleBar
        android:id="@+id/titleBar"
@@ -79,24 +79,28 @@
    </androidx.cardview.widget.CardView>
    <ScrollView
        android:id="@+id/center_scroll"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:fillViewport="true"
        android:scrollbars="none"
        android:visibility="gone"
        app:layout_constraintBottom_toTopOf="@+id/newCard_registBtn"
        android:visibility="visible"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/titleBar">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="16dp">
            android:paddingBottom="16dp"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="10dp">
            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginBottom="10dp"
                app:cardCornerRadius="8dp"
                app:cardElevation="2dp">
@@ -110,7 +114,7 @@
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="16dp"
                        android:layout_marginBottom="10dp"
                        android:text="基本信息"
                        android:textColor="#333333"
                        android:textSize="18sp"
@@ -119,12 +123,12 @@
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="12dp"
                        android:layout_marginBottom="6dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="卡号:"
                            android:textColor="#666666"
@@ -142,12 +146,12 @@
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="12dp"
                        android:layout_marginBottom="6dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="姓名:"
                            android:textColor="#666666"
@@ -165,12 +169,12 @@
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="12dp"
                        android:layout_marginBottom="6dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="身份证号:"
                            android:textColor="#666666"
@@ -188,12 +192,12 @@
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="12dp"
                        android:layout_marginBottom="5dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="农户编号:"
                            android:textColor="#666666"
@@ -213,7 +217,7 @@
            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginBottom="10dp"
                app:cardCornerRadius="8dp"
                app:cardElevation="2dp">
@@ -226,7 +230,7 @@
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="16dp"
                        android:layout_marginBottom="10dp"
                        android:text="费用信息"
                        android:textColor="#333333"
                        android:textSize="18sp"
@@ -240,7 +244,7 @@
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="工本费:"
                            android:textColor="#666666"
@@ -259,7 +263,6 @@
                                android:background="@null"
                                android:hint="请输入工本费(选填)"
                                android:inputType="numberDecimal"
                                android:padding="12dp"
                                android:textColor="#333333"
                                android:textSize="@dimen/new_card_size" />
                        </LinearLayout>
@@ -273,7 +276,7 @@
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="充值金额:"
                            android:textColor="#666666"
@@ -292,7 +295,6 @@
                                android:background="@null"
                                android:hint="请输入充值金额(选填)"
                                android:inputType="numberDecimal"
                                android:padding="12dp"
                                android:textColor="#333333"
                                android:textSize="@dimen/new_card_size" />
                        </LinearLayout>
@@ -302,12 +304,12 @@
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="12dp"
                        android:layout_marginBottom="5dp"
                        android:gravity="center_vertical"
                        android:orientation="horizontal">
                        <TextView
                            android:layout_width="120dp"
                            android:layout_width="105dp"
                            android:layout_height="wrap_content"
                            android:text="备注:"
                            android:textColor="#666666"
@@ -325,7 +327,6 @@
                                android:layout_height="wrap_content"
                                android:background="@null"
                                android:hint="请输入备注(选填)"
                                android:padding="12dp"
                                android:textColor="#333333"
                                android:textSize="@dimen/new_card_size" />
                        </LinearLayout>
@@ -348,7 +349,7 @@
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="16dp"
                        android:layout_marginBottom="10dp"
                        android:text="支付方式"
                        android:textColor="#333333"
                        android:textSize="18sp"
@@ -404,20 +405,18 @@
                    </RadioGroup>
                </LinearLayout>
            </androidx.cardview.widget.CardView>
            <TextView
                android:id="@+id/newCard_registBtn"
                android:layout_width="match_parent"
                android:layout_height="56dp"
                android:layout_marginTop="15dp"
                android:background="@color/bottom_color"
                android:visibility="visible"
                android:gravity="center"
                android:text="确认开卡"
                android:textColor="#FFFFFF"
                android:textSize="16sp" />
        </LinearLayout>
    </ScrollView>
    <TextView
        android:id="@+id/newCard_registBtn"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_margin="16dp"
        android:background="#4285F4"
        android:visibility="gone"
        android:gravity="center"
        android:text="确认开卡"
        android:textColor="#FFFFFF"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
generallibrary/src/main/res/values/colors.xml
@@ -4,7 +4,7 @@
    <color name="black">#333</color>
    <color name="white">#fff</color>
    <color name="nav_item_color">#555555</color>
    <color name="base_list_bg">#e6e6e6</color>
    <color name="base_list_bg">@color/base_green_bg</color>
    <color name="green">#32CD32</color>
    <color name="blue">#007BFF</color>
    <color name="grey">#808080</color>