This commit is contained in:
parent
037e17569f
commit
5875a7872b
|
|
@ -47,6 +47,7 @@ type Account struct {
|
|||
MarketCurrencySymbol string `json:"marketCurrencySymbol,omitempty"`
|
||||
EndDate string `json:"endDate,omitempty"`
|
||||
Type *AccountType `json:"type,omitempty"`
|
||||
Status bool `json:"status,omitempty"`
|
||||
}
|
||||
|
||||
type AccountPosition struct {
|
||||
|
|
@ -313,50 +314,47 @@ func LoadLedgerAccounts(ledgerId string) error {
|
|||
lines := strings.Split(string(bytes), "\n")
|
||||
var temp Account
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line) //去除文本前后空白
|
||||
if line != "" {
|
||||
if line[0] == ';' {
|
||||
// 跳过注释行
|
||||
continue
|
||||
} else {
|
||||
//非注释行
|
||||
words := strings.Fields(line)
|
||||
if len(words) >= 3 {
|
||||
key := words[2]
|
||||
temp = accountMap[key]
|
||||
account := Account{Acc: key, Type: nil}
|
||||
|
||||
account := Account{Acc: key, Type: nil, StartDate: "", EndDate: ""}
|
||||
if words[1] == "open" {
|
||||
account.StartDate = words[0]
|
||||
if account.StartDate != "" && temp.StartDate != "" && strings.Compare(account.StartDate, temp.StartDate) < 0 {
|
||||
// 重复定义的账户,取最早的开始时间为准
|
||||
account.StartDate = temp.StartDate
|
||||
}
|
||||
// 最晚的开户日期设置为账户开户日期
|
||||
account.StartDate = getMaxDate(words[0], temp.StartDate)
|
||||
// 货币单位
|
||||
if len(words) >= 4 {
|
||||
account.Currency = words[3]
|
||||
}
|
||||
} else if words[1] == "close" {
|
||||
account.EndDate = words[0]
|
||||
if account.EndDate != "" && temp.EndDate != "" && strings.Compare(account.EndDate, temp.EndDate) > 0 {
|
||||
// 重复定义的账户,取最晚的开始时间为准
|
||||
account.EndDate = temp.EndDate
|
||||
//账户最晚的关闭日期设置为账户关闭日期
|
||||
account.EndDate = getMaxDate(words[0], temp.EndDate)
|
||||
}
|
||||
if account.EndDate != "" && account.StartDate == getMaxDate(account.StartDate, account.EndDate) {
|
||||
// 如果结束时间非空,且 开户日期>关闭日期,则清空账户结束日期,设置此账户为有效账户
|
||||
account.EndDate = ""
|
||||
account.Status = true
|
||||
}
|
||||
|
||||
if account.StartDate == "" {
|
||||
account.StartDate = temp.StartDate
|
||||
}
|
||||
if account.EndDate == "" {
|
||||
account.EndDate = temp.EndDate
|
||||
// 现在如果结束日期非空,肯定满足有开始时间<结束时间
|
||||
if account.EndDate != "" {
|
||||
account.Status = false
|
||||
}
|
||||
if account.Currency == "" {
|
||||
account.Currency = temp.Currency
|
||||
}
|
||||
|
||||
// 如果结束时间小于开始时间,则结束时间为空
|
||||
if account.EndDate != "" && strings.Compare(account.StartDate, account.EndDate) > 0 {
|
||||
account.EndDate = ""
|
||||
}
|
||||
accountMap[key] = account
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
accounts := make([]Account, 0)
|
||||
for _, account := range accountMap {
|
||||
|
|
|
|||
|
|
@ -29,3 +29,78 @@ func RandChar(size int) string {
|
|||
}
|
||||
return s.String()
|
||||
}
|
||||
|
||||
type Timestamp int64
|
||||
|
||||
const time_layout string = "2006-01-02 15:04:05"
|
||||
|
||||
// 日期字符串转为时间戳 工具函数
|
||||
func getTimeStamp(str_date string) Timestamp {
|
||||
if len(str_date) == 10 {
|
||||
str_date = str_date + " 00:00:00"
|
||||
}
|
||||
// 获取时区
|
||||
loc, err := time.LoadLocation("Local")
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
// 转换为时间戳
|
||||
the_time, err := time.ParseInLocation(time_layout, str_date, loc)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
// 返回时间戳
|
||||
return Timestamp(the_time.Unix())
|
||||
}
|
||||
|
||||
//获取1到2个日期字符串中更大的日期
|
||||
func getMaxDate(str_date1 string, str_date2 string) string {
|
||||
var max_date string
|
||||
if str_date1 != "" && str_date2 == "" {
|
||||
// 只定义了第一个账户,取第一个账户的日期为准
|
||||
max_date = str_date1
|
||||
} else if str_date1 == "" && str_date2 != "" {
|
||||
// 只定义了第二个账户,取第二个账户的日期为准
|
||||
max_date = str_date2
|
||||
} else if str_date1 != "" && str_date2 != "" {
|
||||
// 重复定义的账户,取最晚的时间为准
|
||||
t1 := getTimeStamp(str_date1)
|
||||
t2 := getTimeStamp(str_date2)
|
||||
if t1 > t2 {
|
||||
max_date = str_date1
|
||||
} else {
|
||||
max_date = str_date2
|
||||
}
|
||||
} else if str_date1 == "" && str_date2 == "" {
|
||||
// 没有定义账户,取当前日期为准
|
||||
max_date = time.Now().Format(time_layout)
|
||||
}
|
||||
return max_date
|
||||
}
|
||||
|
||||
// 获取1-2个日期字符串中最小的日期值
|
||||
// 如果双参数均为空,则返回账簿开始记账日期
|
||||
func getMinDate(str_date1 string, str_date2 string) string {
|
||||
//time_layout := "2006-01-02 15:04:05"
|
||||
var min_date string
|
||||
if str_date1 != "" && str_date2 == "" {
|
||||
// 只定义了第一个账户,取第一个账户的日期为准
|
||||
min_date = str_date1
|
||||
} else if str_date1 == "" && str_date2 != "" {
|
||||
// 只定义了第二个账户,取第二个账户的日期为准
|
||||
min_date = str_date2
|
||||
} else if str_date1 != "" && str_date2 != "" {
|
||||
// 重复定义的账户,取最早的时间
|
||||
t1 := getTimeStamp(str_date1)
|
||||
t2 := getTimeStamp(str_date2)
|
||||
if t1 < t2 {
|
||||
min_date = str_date1
|
||||
} else {
|
||||
min_date = str_date2
|
||||
}
|
||||
} else if str_date1 == "" && str_date2 == "" {
|
||||
// 没有定义账户,取固定日期"1970-01-01"
|
||||
min_date = "1970-01-01"
|
||||
}
|
||||
return min_date
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue