diff --git a/service/import.go b/service/import.go index 559b9cd..f1dd934 100644 --- a/service/import.go +++ b/service/import.go @@ -3,6 +3,7 @@ package service import ( "bufio" "encoding/csv" + "errors" "github.com/beancount-gs/script" "github.com/gin-gonic/gin" "golang.org/x/text/encoding/simplifiedchinese" @@ -29,36 +30,76 @@ func ImportAliPayCSV(c *gin.Context) { } else if err != nil { script.LogError(ledgerConfig.Mail, err.Error()) } - if len(lines) > 11 { - fields := strings.Fields(lines[2]) - status := strings.Trim(lines[15], " ") - account := "" - if status == "已收入" { - account = "Income:" - } else if status == "已支出" { - account = "Expenses:" - } else { + if len(lines) == 17 { + transaction, err := importBrowserAliPayCSV(lines, currency, currencySymbol) + if err != nil { + script.LogInfo(ledgerConfig.Mail, err.Error()) continue } - - if len(fields) >= 2 { - result = append(result, Transaction{ - Id: strings.Trim(lines[0], " "), - Date: strings.Trim(fields[0], " "), - Payee: strings.Trim(lines[7], " "), - Narration: strings.Trim(lines[8], " "), - Number: strings.Trim(lines[9], " "), - Account: account, - Currency: currency, - CurrencySymbol: currencySymbol, - }) + result = append(result, transaction) + } else if len(lines) == 12 { + transaction, err := importMobileAliPayCSV(lines, currency, currencySymbol) + if err != nil { + script.LogInfo(ledgerConfig.Mail, err.Error()) + continue } + result = append(result, transaction) } } OK(c, result) } +func importBrowserAliPayCSV(lines []string, currency string, currencySymbol string) (Transaction, error) { + dateColumn := strings.Fields(lines[2]) + status := strings.Trim(lines[15], " ") + account := "" + if status == "已收入" { + account = "Income:" + } else { + account = "Expenses:" + } + + if len(dateColumn) >= 2 { + return Transaction{ + Id: strings.Trim(lines[0], " "), + Date: strings.Trim(dateColumn[0], " "), + Payee: strings.Trim(lines[7], " "), + Narration: strings.Trim(lines[8], " "), + Number: strings.Trim(lines[9], " "), + Account: account, + Currency: currency, + CurrencySymbol: currencySymbol, + }, nil + } + return Transaction{}, errors.New("parse error") +} + +func importMobileAliPayCSV(lines []string, currency string, currencySymbol string) (Transaction, error) { + dateColumn := strings.Fields(lines[10]) + status := strings.Trim(lines[0], " ") + account := "" + if status == "支出" { + account = "Expenses:" + } else { + account = "Income:" + } + + if len(dateColumn) >= 2 { + return Transaction{ + Id: strings.Trim(lines[8], " "), + Date: strings.Trim(dateColumn[0], " "), + Payee: strings.Trim(lines[1], " "), + Narration: strings.Trim(lines[3], " "), + Number: strings.Trim(lines[5], " "), + Account: account, + Currency: currency, + CurrencySymbol: currencySymbol, + }, nil + } + return Transaction{}, errors.New("parse error") +} + func ImportWxPayCSV(c *gin.Context) { ledgerConfig := script.GetLedgerConfigFromContext(c) diff --git a/service/ledger.go b/service/ledger.go index f1a7275..13346e5 100644 --- a/service/ledger.go +++ b/service/ledger.go @@ -180,16 +180,18 @@ func OpenOrCreateLedger(c *gin.Context) { OK(c, resultMap) } -// 删除账本 func DeleteLedger(c *gin.Context) { ledgerConfig := script.GetLedgerConfigFromContext(c) // 删除账本源文件 - os.RemoveAll(ledgerConfig.DataPath) + err := os.RemoveAll(ledgerConfig.DataPath) + if err != nil { + return + } script.LogInfo(ledgerConfig.Mail, "Success delete "+ledgerConfig.DataPath) // 删除 ledgerConfigMap := script.GetLedgerConfigMap() delete(ledgerConfigMap, ledgerConfig.Id) - err := script.WriteLedgerConfigMap(ledgerConfigMap) + err = script.WriteLedgerConfigMap(ledgerConfigMap) if err != nil { InternalError(c, "Failed to update ledger_config.json") return