diff --git a/pkg/converters/alipay/alipay_app_transaction_data_csv_file_importer.go b/pkg/converters/alipay/alipay_app_transaction_data_csv_file_importer.go index 89d61ce5..b0ab58c6 100644 --- a/pkg/converters/alipay/alipay_app_transaction_data_csv_file_importer.go +++ b/pkg/converters/alipay/alipay_app_transaction_data_csv_file_importer.go @@ -10,7 +10,7 @@ var ( AlipayAppTransactionDataCsvFileImporter = &alipayAppTransactionDataCsvFileImporter{ alipayTransactionDataCsvFileImporter{ fileHeaderLine: "------------------------------------------------------------------------------------", - dataHeaderStartContent: "支付宝(中国)网络技术有限公司 电子客户回单", + dataHeaderStartContent: []string{"支付宝(中国)网络技术有限公司 电子客户回单", "支付宝支付科技有限公司 电子客户回单"}, originalColumnNames: alipayTransactionColumnNames{ timeColumnName: "交易时间", categoryColumnName: "交易分类", diff --git a/pkg/converters/alipay/alipay_transaction_data_csv_file_importer.go b/pkg/converters/alipay/alipay_transaction_data_csv_file_importer.go index 4f83fe1a..1d1ab3f1 100644 --- a/pkg/converters/alipay/alipay_transaction_data_csv_file_importer.go +++ b/pkg/converters/alipay/alipay_transaction_data_csv_file_importer.go @@ -47,7 +47,7 @@ type alipayTransactionColumnNames struct { // alipayTransactionDataCsvFileImporter defines the structure of alipay csv importer for transaction data type alipayTransactionDataCsvFileImporter struct { fileHeaderLine string - dataHeaderStartContent string + dataHeaderStartContent []string dataBottomEndLineRune rune originalColumnNames alipayTransactionColumnNames } diff --git a/pkg/converters/alipay/alipay_transaction_data_extrator.go b/pkg/converters/alipay/alipay_transaction_data_extrator.go index 0b228dc2..9d1471b2 100644 --- a/pkg/converters/alipay/alipay_transaction_data_extrator.go +++ b/pkg/converters/alipay/alipay_transaction_data_extrator.go @@ -11,7 +11,7 @@ import ( "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() allOriginalLines := make([][]string, 0) hasFileHeader := false @@ -35,7 +35,7 @@ func createNewAlipayTransactionBasicDataTable(ctx core.Context, originalDataTabl if !foundContentBeforeDataHeaderLine { if row.ColumnCount() <= 0 { continue - } else if strings.Index(row.GetData(0), dataHeaderStartContent) >= 0 { + } else if utils.ContainsAnyString(row.GetData(0), dataHeaderStartContent) { foundContentBeforeDataHeaderLine = true continue } else { diff --git a/pkg/converters/alipay/alipay_web_transaction_data_csv_file_importer.go b/pkg/converters/alipay/alipay_web_transaction_data_csv_file_importer.go index d828c1ec..01a8de1a 100644 --- a/pkg/converters/alipay/alipay_web_transaction_data_csv_file_importer.go +++ b/pkg/converters/alipay/alipay_web_transaction_data_csv_file_importer.go @@ -10,7 +10,7 @@ var ( AlipayWebTransactionDataCsvFileImporter = &alipayWebTransactionDataCsvFileImporter{ alipayTransactionDataCsvFileImporter{ fileHeaderLine: "支付宝交易记录明细查询", - dataHeaderStartContent: "交易记录明细列表", + dataHeaderStartContent: []string{"交易记录明细列表"}, dataBottomEndLineRune: '-', originalColumnNames: alipayTransactionColumnNames{ timeColumnName: "交易创建时间", diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index 91cb5fa5..55f75e36 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -60,6 +60,17 @@ func SubString(str string, start int, length int) string { 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 func GetFirstLowerCharString(s string) string { if s == "" { diff --git a/pkg/utils/strings_test.go b/pkg/utils/strings_test.go index a845e66b..d9e7ae49 100644 --- a/pkg/utils/strings_test.go +++ b/pkg/utils/strings_test.go @@ -72,6 +72,20 @@ func TestSubString_OverBoundary(t *testing.T) { 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) { expectedValue := "fooBar" actualValue := GetFirstLowerCharString("fooBar")