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