package script import ( "encoding/json" "github.com/gin-gonic/gin" ) var serverConfig Config var ledgerConfigMap map[string]Config var ledgerAccountsMap map[string][]Account var whiteList []string type Config struct { Id string `json:"id"` Mail string `json:"mail"` Title string `json:"title"` DataPath string `json:"dataPath"` OperatingCurrency string `json:"operatingCurrency"` StartDate string `json:"startDate"` IsBak bool `json:"isBak"` } type Account struct { Acc string `json:"account"` Commodity string `json:"commodity"` StartDate string `json:"startDate"` Type accountType `json:"type"` } type accountType struct { Key string `json:"key"` Name string `json:"name"` } func GetServerConfig() Config { return serverConfig } func GetLedgerConfigMap() map[string]Config { return ledgerConfigMap } func GetLedgerConfig(ledgerId string) *Config { for k, v := range ledgerConfigMap { if k == ledgerId { return &v } } return nil } func GetLedgerConfigByMail(mail string) *Config { for _, v := range ledgerConfigMap { if v.Mail == mail { return &v } } return nil } func GetLedgerConfigFromContext(c *gin.Context) *Config { ledgerConfig, _ := c.Get("LedgerConfig") t, _ := ledgerConfig.(*Config) return t } func GetLedgerAccounts(ledgerId string) []Account { return ledgerAccountsMap[ledgerId] } func IsInWhiteList(ledgerId string) bool { // ledger white list is empty, return true if whiteList == nil || len(whiteList) == 0 { return true } for i := range whiteList { if whiteList[i] == ledgerId { return true } } return false } func LoadServerConfig() error { fileContent, err := ReadFile("./config/config.json") if err != nil { return err } err = json.Unmarshal(fileContent, &serverConfig) if err != nil { LogSystemError("Failed unmarshall config file (/config/config.json)") return err } LogSystemInfo("Success load config file (/config/config.json)") // load white list fileContent, err = ReadFile("./config/white_list.json") if err != nil { return err } err = json.Unmarshal(fileContent, &whiteList) if err != nil { LogSystemError("Failed unmarshal whitelist file (/config/white_list.json)") return err } LogSystemInfo("Success load whitelist file (/config/white_list.json)") return nil } func LoadLedgerConfigMap() error { path := GetServerLedgerConfigFilePath() fileContent, err := ReadFile(path) if err != nil { return err } err = json.Unmarshal(fileContent, &ledgerConfigMap) if err != nil { LogSystemError("Failed unmarshal config file (" + path + ")") return err } LogSystemInfo("Success load ledger_config file (" + path + ")") return nil } func LoadLedgerAccountsMap() error { for _, config := range ledgerConfigMap { accounts := make([]Account, 0) err := BQLReport(&config, &accounts) if err != nil { return err } //ledgerAccountsMap[ledgerId] = accounts } return nil } func WriteLedgerConfigMap(newLedgerConfigMap map[string]Config) error { path := GetServerLedgerConfigFilePath() mapBytes, err := json.Marshal(ledgerConfigMap) if err != nil { LogSystemError("Failed marshal ConfigMap") return err } err = WriteFile(path, string(mapBytes)) ledgerConfigMap = newLedgerConfigMap LogSystemInfo("Success write ledger_config file (" + path + ")") return err } func GetCommoditySymbol(commodity string) string { switch commodity { case "CNY": return "¥" case "USD": return "$" } return "" }