support the latest format of alipay statement file

This commit is contained in:
MaysWind
2025-10-09 19:40:36 +08:00
parent 697f69d5d7
commit 94cd5dc21a
6 changed files with 30 additions and 5 deletions
@@ -10,7 +10,7 @@ var (
AlipayAppTransactionDataCsvFileImporter = &alipayAppTransactionDataCsvFileImporter{ AlipayAppTransactionDataCsvFileImporter = &alipayAppTransactionDataCsvFileImporter{
alipayTransactionDataCsvFileImporter{ alipayTransactionDataCsvFileImporter{
fileHeaderLine: "------------------------------------------------------------------------------------", fileHeaderLine: "------------------------------------------------------------------------------------",
dataHeaderStartContent: "支付宝(中国)网络技术有限公司 电子客户回单", dataHeaderStartContent: []string{"支付宝(中国)网络技术有限公司 电子客户回单", "支付宝支付科技有限公司 电子客户回单"},
originalColumnNames: alipayTransactionColumnNames{ originalColumnNames: alipayTransactionColumnNames{
timeColumnName: "交易时间", timeColumnName: "交易时间",
categoryColumnName: "交易分类", categoryColumnName: "交易分类",
@@ -47,7 +47,7 @@ type alipayTransactionColumnNames struct {
// alipayTransactionDataCsvFileImporter defines the structure of alipay csv importer for transaction data // alipayTransactionDataCsvFileImporter defines the structure of alipay csv importer for transaction data
type alipayTransactionDataCsvFileImporter struct { type alipayTransactionDataCsvFileImporter struct {
fileHeaderLine string fileHeaderLine string
dataHeaderStartContent string dataHeaderStartContent []string
dataBottomEndLineRune rune dataBottomEndLineRune rune
originalColumnNames alipayTransactionColumnNames originalColumnNames alipayTransactionColumnNames
} }
@@ -11,7 +11,7 @@ import (
"github.com/mayswind/ezbookkeeping/pkg/utils" "github.com/mayswind/ezbookkeeping/pkg/utils"
) )
func createNewAlipayTransactionBasicDataTable(ctx core.Context, originalDataTable datatable.BasicDataTable, fileHeaderLine string, dataHeaderStartContent string, dataBottomEndLineRune rune) (datatable.BasicDataTable, error) { func createNewAlipayTransactionBasicDataTable(ctx core.Context, originalDataTable datatable.BasicDataTable, fileHeaderLine string, dataHeaderStartContent []string, dataBottomEndLineRune rune) (datatable.BasicDataTable, error) {
iterator := originalDataTable.DataRowIterator() iterator := originalDataTable.DataRowIterator()
allOriginalLines := make([][]string, 0) allOriginalLines := make([][]string, 0)
hasFileHeader := false hasFileHeader := false
@@ -35,7 +35,7 @@ func createNewAlipayTransactionBasicDataTable(ctx core.Context, originalDataTabl
if !foundContentBeforeDataHeaderLine { if !foundContentBeforeDataHeaderLine {
if row.ColumnCount() <= 0 { if row.ColumnCount() <= 0 {
continue continue
} else if strings.Index(row.GetData(0), dataHeaderStartContent) >= 0 { } else if utils.ContainsAnyString(row.GetData(0), dataHeaderStartContent) {
foundContentBeforeDataHeaderLine = true foundContentBeforeDataHeaderLine = true
continue continue
} else { } else {
@@ -10,7 +10,7 @@ var (
AlipayWebTransactionDataCsvFileImporter = &alipayWebTransactionDataCsvFileImporter{ AlipayWebTransactionDataCsvFileImporter = &alipayWebTransactionDataCsvFileImporter{
alipayTransactionDataCsvFileImporter{ alipayTransactionDataCsvFileImporter{
fileHeaderLine: "支付宝交易记录明细查询", fileHeaderLine: "支付宝交易记录明细查询",
dataHeaderStartContent: "交易记录明细列表", dataHeaderStartContent: []string{"交易记录明细列表"},
dataBottomEndLineRune: '-', dataBottomEndLineRune: '-',
originalColumnNames: alipayTransactionColumnNames{ originalColumnNames: alipayTransactionColumnNames{
timeColumnName: "交易创建时间", timeColumnName: "交易创建时间",
+11
View File
@@ -60,6 +60,17 @@ func SubString(str string, start int, length int) string {
return string(chars[start:end]) return string(chars[start:end])
} }
// ContainsAnyString returns whether the specified string contains any string of sub string slice
func ContainsAnyString(s string, substrs []string) bool {
for i := 0; i < len(substrs); i++ {
if strings.Index(s, substrs[i]) >= 0 {
return true
}
}
return false
}
// GetFirstLowerCharString returns the source string parameter, but makes the first character lower case // GetFirstLowerCharString returns the source string parameter, but makes the first character lower case
func GetFirstLowerCharString(s string) string { func GetFirstLowerCharString(s string) string {
if s == "" { if s == "" {
+14
View File
@@ -72,6 +72,20 @@ func TestSubString_OverBoundary(t *testing.T) {
assert.Equal(t, expectedValue, actualValue) assert.Equal(t, expectedValue, actualValue)
} }
func TestContainsAnyString(t *testing.T) {
actualValue := ContainsAnyString("test", []string{"test"})
assert.Equal(t, true, actualValue)
actualValue = ContainsAnyString("test", []string{"st"})
assert.Equal(t, true, actualValue)
actualValue = ContainsAnyString("test", []string{"tt", "tet", "tst", "est"})
assert.Equal(t, true, actualValue)
actualValue = ContainsAnyString("test", []string{"tt", "tet", "tst"})
assert.Equal(t, false, actualValue)
}
func TestGetFirstLowerCharString(t *testing.T) { func TestGetFirstLowerCharString(t *testing.T) {
expectedValue := "fooBar" expectedValue := "fooBar"
actualValue := GetFirstLowerCharString("fooBar") actualValue := GetFirstLowerCharString("fooBar")