support the latest format of alipay statement file
This commit is contained in:
@@ -10,7 +10,7 @@ var (
|
||||
AlipayAppTransactionDataCsvFileImporter = &alipayAppTransactionDataCsvFileImporter{
|
||||
alipayTransactionDataCsvFileImporter{
|
||||
fileHeaderLine: "------------------------------------------------------------------------------------",
|
||||
dataHeaderStartContent: "支付宝(中国)网络技术有限公司 电子客户回单",
|
||||
dataHeaderStartContent: []string{"支付宝(中国)网络技术有限公司 电子客户回单", "支付宝支付科技有限公司 电子客户回单"},
|
||||
originalColumnNames: alipayTransactionColumnNames{
|
||||
timeColumnName: "交易时间",
|
||||
categoryColumnName: "交易分类",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -10,7 +10,7 @@ var (
|
||||
AlipayWebTransactionDataCsvFileImporter = &alipayWebTransactionDataCsvFileImporter{
|
||||
alipayTransactionDataCsvFileImporter{
|
||||
fileHeaderLine: "支付宝交易记录明细查询",
|
||||
dataHeaderStartContent: "交易记录明细列表",
|
||||
dataHeaderStartContent: []string{"交易记录明细列表"},
|
||||
dataBottomEndLineRune: '-',
|
||||
originalColumnNames: alipayTransactionColumnNames{
|
||||
timeColumnName: "交易创建时间",
|
||||
|
||||
@@ -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 == "" {
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user