fix: alipay mobile csv file cannot import (#8)

This commit is contained in:
BaoXuebin 2022-03-19 15:44:15 +08:00
parent 70ef3b97dd
commit 9f05766287
2 changed files with 67 additions and 24 deletions

View File

@ -3,6 +3,7 @@ package service
import ( import (
"bufio" "bufio"
"encoding/csv" "encoding/csv"
"errors"
"github.com/beancount-gs/script" "github.com/beancount-gs/script"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/encoding/simplifiedchinese"
@ -29,34 +30,74 @@ func ImportAliPayCSV(c *gin.Context) {
} else if err != nil { } else if err != nil {
script.LogError(ledgerConfig.Mail, err.Error()) script.LogError(ledgerConfig.Mail, err.Error())
} }
if len(lines) > 11 { if len(lines) == 17 {
fields := strings.Fields(lines[2]) transaction, err := importBrowserAliPayCSV(lines, currency, currencySymbol)
if err != nil {
script.LogInfo(ledgerConfig.Mail, err.Error())
continue
}
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], " ") status := strings.Trim(lines[15], " ")
account := "" account := ""
if status == "已收入" { if status == "已收入" {
account = "Income:" account = "Income:"
} else if status == "已支出" {
account = "Expenses:"
} else { } else {
continue account = "Expenses:"
} }
if len(fields) >= 2 { if len(dateColumn) >= 2 {
result = append(result, Transaction{ return Transaction{
Id: strings.Trim(lines[0], " "), Id: strings.Trim(lines[0], " "),
Date: strings.Trim(fields[0], " "), Date: strings.Trim(dateColumn[0], " "),
Payee: strings.Trim(lines[7], " "), Payee: strings.Trim(lines[7], " "),
Narration: strings.Trim(lines[8], " "), Narration: strings.Trim(lines[8], " "),
Number: strings.Trim(lines[9], " "), Number: strings.Trim(lines[9], " "),
Account: account, Account: account,
Currency: currency, Currency: currency,
CurrencySymbol: currencySymbol, CurrencySymbol: currencySymbol,
}) }, nil
}
} }
return Transaction{}, errors.New("parse error")
} }
OK(c, result) 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) { func ImportWxPayCSV(c *gin.Context) {

View File

@ -180,16 +180,18 @@ func OpenOrCreateLedger(c *gin.Context) {
OK(c, resultMap) OK(c, resultMap)
} }
// 删除账本
func DeleteLedger(c *gin.Context) { func DeleteLedger(c *gin.Context) {
ledgerConfig := script.GetLedgerConfigFromContext(c) 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) script.LogInfo(ledgerConfig.Mail, "Success delete "+ledgerConfig.DataPath)
// 删除 // 删除
ledgerConfigMap := script.GetLedgerConfigMap() ledgerConfigMap := script.GetLedgerConfigMap()
delete(ledgerConfigMap, ledgerConfig.Id) delete(ledgerConfigMap, ledgerConfig.Id)
err := script.WriteLedgerConfigMap(ledgerConfigMap) err = script.WriteLedgerConfigMap(ledgerConfigMap)
if err != nil { if err != nil {
InternalError(c, "Failed to update ledger_config.json") InternalError(c, "Failed to update ledger_config.json")
return return