From 2c0177d2bfc2ed89b2fdffc7ccb84dc685cdf524 Mon Sep 17 00:00:00 2001 From: cloudroam <cloudroam> Date: 星期二, 18 三月 2025 10:09:04 +0800 Subject: [PATCH] fix: 财务统计逻辑 --- app/src/main/java/com/example/firstapp/entity/Rule.kt | 82 +++++++++++++++++++++++++++++++++++----- 1 files changed, 71 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/entity/Rule.kt b/app/src/main/java/com/example/firstapp/entity/Rule.kt index 3bb161e..c24c869 100644 --- a/app/src/main/java/com/example/firstapp/entity/Rule.kt +++ b/app/src/main/java/com/example/firstapp/entity/Rule.kt @@ -1,17 +1,77 @@ package com.example.firstapp.entity -data class Rule(var type: String,var content: String ,var reg: String) { +import java.time.LocalDateTime - // 在 Rule 类中定义提取方法 - fun extractCodeFromMessage(message: String): String? { - // 如果 message 包含 content - if (message.contains(content)) { - // 使用 reg 作为正则表达式进行匹配 - val regex = reg.toRegex() - val matchResult = regex.find(message) - return matchResult?.value // 如果找到匹配的内容,则返回 - } - return null // 如果不匹配,返回 null +class Rule( + val type: String, + val content: String, + val pattern: String +) { + // 添加伴生对象存储多个正则表达式模式 + companion object { + private val BANK_PATTERNS = mapOf( + "招商银行" to listOf( + // 第一种格式:账单¥xxx,还款日MM月dd日 + "账单[¥¥](\\d+\\.?\\d*).*还款日(\\d{2})月(\\d{2})日", + // 第二种格式:账单金额xxx,还款日MM月dd日 + "账单金额[::](\\d+\\.?\\d*).*还款日[::](\\d{2})月(\\d{2})日", + // 可以继续添加其他格式... + ), + "中国银行" to listOf( + "账单金额[::](\\d+\\.?\\d*).*还款日[::](\\d{1,2})日", + // 可以添加其他格式... + ), + // 其他银行的模式... + ) } + fun extractCodeFromMessage(message: String): String? { + if (type == "财务") { + // 获取该银行的所有正则表达式模式 + val patterns = BANK_PATTERNS[content] ?: listOf(pattern) + + // 尝试每一个正则表达式 + for (pat in patterns) { + val regex = pat.toRegex() + val matchResult = regex.find(message) + + matchResult?.let { + if (it.groupValues.size > 1) { + return it.groupValues[1].replace("[¥¥]".toRegex(), "") + } + } + } + return null + } else { + // 非财务类型的处理保持不变 + val regex = pattern.toRegex() + val matchResult = regex.find(message) + return matchResult?.value + } + } + + fun extractDueDate(message: String): String? { + if (type != "财务") return null + + val patterns = BANK_PATTERNS[content] ?: listOf(pattern) + + for (pat in patterns) { + val regex = pat.toRegex() + val matchResult = regex.find(message) + + matchResult?.let { + when { + content == "招商银行" && it.groupValues.size > 3 -> { + return "${it.groupValues[2]}月${it.groupValues[3]}日" + } + it.groupValues.size > 2 -> { + return it.groupValues[2] + "日" + } + + else -> {} + } + } + } + return null + } } \ No newline at end of file -- Gitblit v1.9.3