左晓为主开发手持机充值管理机
generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -12,6 +12,7 @@
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.utils.MornyUtil
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.baselibrary.view.TitleBar
import com.dayu.general.BaseApplication
@@ -25,6 +26,7 @@
import com.dayu.general.databinding.ActivityRechargeDetailBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1
import com.dayu.general.tool.CardOperationType
class RechargeDetailActivity : AppCompatActivity() {
@@ -36,7 +38,7 @@
    // 支付方式相关属性
    private var paymentMethod: String = "现金"
    private var paymentId: Long = 0
    private var paymentId: String = ""
    private var paymentMethodList: List<PaymentMethod> = listOf()
    companion object {
@@ -44,7 +46,12 @@
        private const val EXTRA_CARD_ADDRESS = "extra_card_address"
        private const val EXTRA_USER_CARD = "extra_user_card"
        fun start(context: Context, cardInfo: CardInfoResult?, cardAddress: String?, userCard: UserCard?) {
        fun start(
            context: Context,
            cardInfo: CardInfoResult?,
            cardAddress: String?,
            userCard: UserCard?
        ) {
            val intent = Intent(context, RechargeDetailActivity::class.java)
            intent.putExtra(EXTRA_CARD_INFO, cardInfo)
            intent.putExtra(EXTRA_CARD_ADDRESS, cardAddress)
@@ -85,7 +92,7 @@
            // 处理充值逻辑
            handleRecharge()
        }
        // 设置金额输入限制
        setupAmountInputLimit(binding.rechargeMorny)
        setupAmountInputLimit(binding.rechargeWater)
@@ -97,13 +104,13 @@
    private fun setupAmountInputLimit(editText: EditText) {
        editText.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
            override fun afterTextChanged(s: Editable?) {
                val text = s.toString()
                if (text.isEmpty()) return
                // 检查是否包含小数点
                if (text.contains(".")) {
                    val parts = text.split(".")
@@ -119,7 +126,7 @@
                        }
                    }
                }
                // 防止输入多个小数点
                val dotCount = text.count { it == '.' }
                if (dotCount > 1) {
@@ -129,7 +136,7 @@
                    editText.setSelection(newText.length)
                    editText.addTextChangedListener(this)
                }
                // 防止以小数点开头
                if (text.startsWith(".")) {
                    editText.removeTextChangedListener(this)
@@ -147,14 +154,14 @@
    private fun getPaymentMethods() {
        ApiManager.getInstance().requestGetLoading(
            this,
            "sell/paymentmethod/get",
            PaymentMethodResponse::class.java,
            "terminal/paymentmethod/get",
            Array<PaymentMethod>::class.java,
            null,
            object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() {
                override fun onNext(response: BaseResponse<PaymentMethodResponse>) {
            object : SubscriberListener<BaseResponse<Array<PaymentMethod>>>() {
                override fun onNext(response: BaseResponse<Array<PaymentMethod>>) {
                    if (response.success) {
                        // 获取支付方式列表
                        val paymentMethods = response.content?.obj ?: listOf()
                        // 获取支付方式列表,现在content直接是PaymentMethod数组
                        val paymentMethods = response.content?.toList() ?: listOf()
                        if (paymentMethods.isNotEmpty()) {
                            paymentMethodList = paymentMethods
                            // 更新支付方式显示
@@ -248,9 +255,9 @@
            binding.redInitCode.text = cardAddress ?: ""
            binding.userName.text = info.userName ?: ""
            binding.redCardNum.text = info.cardNum ?: ""
            // 使用用户卡中的余额显示
            val balance = userCard?.let {
            val balance = userCard?.let {
                // 将分转换为元,保留两位小数
                String.format("%.2f", it.balance / 100.0)
            } ?: run {
@@ -260,7 +267,7 @@
            binding.redRemainderBlance.text = "$balance 元"
            // 设置卡状态和对应颜色
            val cardStatus = when (info.status) {
            val cardStatus = when (info.state) {
                1 -> "正常"
                2 -> "挂失"
                3 -> "锁定"
@@ -270,7 +277,7 @@
            binding.redStatu.text = cardStatus
            // 根据卡状态设置不同颜色
            val statusColor = when (info.status) {
            val statusColor = when (info.state) {
                1 -> android.graphics.Color.parseColor("#4CAF50") // 绿色-正常
                2 -> android.graphics.Color.parseColor("#FF9800") // 橙色-挂失
                3 -> android.graphics.Color.parseColor("#F44336") // 红色-锁定
@@ -315,6 +322,25 @@
            0.0
        }
        // 获取当前余额(转换为元)
        val currentBalance = userCard?.let {
            // 将分转换为元
            it.balance / 100.0
        } ?: run {
            // 如果用户卡为空,则使用服务器返回的余额
            cardInfo?.balance ?: 0.0
        }
        // 计算充值后的总余额
        val totalAmountAfterRecharge = currentBalance + rechargeAmount + bonusAmount
        // 检查是否超过最大余额限制9999.99元
        if (totalAmountAfterRecharge > 9999.99) {
            val maxRechargeAmount = 9999.99 - currentBalance
            ToastUtil.show("充值失败:充值后余额不能超过9999.99元\n当前余额:${String.format("%.2f", currentBalance)}元\n最多可充值:${String.format("%.2f", maxRechargeAmount)}元")
            return
        }
        // 调用充值接口
        callRechargeApi(rechargeAmount, bonusAmount)
    }
@@ -339,7 +365,7 @@
            money = String.format("%.0f", rechargeAmount),
            amount = String.format("%.0f", bonusAmount),
            gift = String.format("%.0f", bonusAmount),
            paymentId = paymentId.toString(),
            paymentId = paymentId,
            price = String.format("%.2f", currentWaterPrice), // 使用统一获取的水价
            remarks = "充值",
            operator = BaseApplication.userId // 默认操作员ID,可以根据实际情况调整
@@ -388,40 +414,37 @@
    /**
     * 启动写卡界面
     */
    private fun startWriteCardActivity(rechargeResult: RechargeResult, rechargeAmount: Double, bonusAmount: Double) {
    private fun startWriteCardActivity(
        rechargeResult: RechargeResult,
        rechargeAmount: Double,
        bonusAmount: Double
    ) {
        try {
            // 创建UserCard对象用于写卡
            val userCard = UserCard().apply {
                // 设置用户卡信息
                cardInfo?.let { info ->
                    userCode = info.cardNum ?: ""
                    balance = ((rechargeAmount + bonusAmount) * 100).toInt() // 转换为分
                    balance = MornyUtil.changeY2F(rechargeResult.balance)
                }
                // 设置其他必要信息
                projectCode = rechargeResult.projectNo
                waterPrice = rechargeResult.waterPrice.toFloat()
                waterPrice = MornyUtil.changeY2F(rechargeResult.waterPrice.toString())
                rechargeDate = java.util.Calendar.getInstance()
            }
            // 启动写卡Activity
            val intent = Intent(this, NfcWreatActivity::class.java).apply {
                putExtra("cardType", "USER_CARD") // 用户卡类型
                putExtra("cardType", USER_CARD_TYPE_1) // 用户卡类型
                putExtra("cardAddr", cardAddress)
                putExtra("operationTypeCode", CardOperationType.Recharge.code)
                putExtra("orderNumber", rechargeResult.orderNo)
                putExtra("userCard", userCard)
                putExtra("rechargeAmount", rechargeAmount) // 传递充值金额
                putExtra("bonusAmount", bonusAmount) // 传递赠送金额
            }
            startActivity(intent)
            // 显示成功信息
            val formattedRecharge = String.format("%.2f", rechargeAmount)
            val formattedBonus = String.format("%.2f", bonusAmount)
            val formattedTotal = String.format("%.2f", rechargeAmount + bonusAmount)
            ToastUtil.show("充值订单创建成功\n订单号: ${rechargeResult.orderNo}\n充值金额: ${formattedRecharge}元\n赠送金额: ${formattedBonus}元\n总金额: ${formattedTotal}元\n请贴卡进行写卡操作")
            finish()
        } catch (e: Exception) {
            ToastUtil.show("启动写卡界面失败: ${e.message}")
        }