fix: alipay mobile csv file cannot import (#8)
This commit is contained in:
parent
70ef3b97dd
commit
9f05766287
|
|
@ -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,36 +30,76 @@ 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)
|
||||||
status := strings.Trim(lines[15], " ")
|
if err != nil {
|
||||||
account := ""
|
script.LogInfo(ledgerConfig.Mail, err.Error())
|
||||||
if status == "已收入" {
|
|
||||||
account = "Income:"
|
|
||||||
} else if status == "已支出" {
|
|
||||||
account = "Expenses:"
|
|
||||||
} else {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
result = append(result, transaction)
|
||||||
if len(fields) >= 2 {
|
} else if len(lines) == 12 {
|
||||||
result = append(result, Transaction{
|
transaction, err := importMobileAliPayCSV(lines, currency, currencySymbol)
|
||||||
Id: strings.Trim(lines[0], " "),
|
if err != nil {
|
||||||
Date: strings.Trim(fields[0], " "),
|
script.LogInfo(ledgerConfig.Mail, err.Error())
|
||||||
Payee: strings.Trim(lines[7], " "),
|
continue
|
||||||
Narration: strings.Trim(lines[8], " "),
|
|
||||||
Number: strings.Trim(lines[9], " "),
|
|
||||||
Account: account,
|
|
||||||
Currency: currency,
|
|
||||||
CurrencySymbol: currencySymbol,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
result = append(result, transaction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OK(c, result)
|
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) {
|
func ImportWxPayCSV(c *gin.Context) {
|
||||||
ledgerConfig := script.GetLedgerConfigFromContext(c)
|
ledgerConfig := script.GetLedgerConfigFromContext(c)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue