mirror of
				https://github.com/lzh-1625/go_process_manager.git
				synced 2025-11-01 03:42:34 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package logic
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"strconv"
 | |
| 
 | |
| 	"github.com/lzh-1625/go_process_manager/config"
 | |
| 	"github.com/lzh-1625/go_process_manager/internal/app/model"
 | |
| 	"github.com/lzh-1625/go_process_manager/internal/app/repository"
 | |
| )
 | |
| 
 | |
| type configLogic struct{}
 | |
| 
 | |
| var (
 | |
| 	ConfigLogic = new(configLogic)
 | |
| )
 | |
| 
 | |
| func (c *configLogic) GetSystemConfiguration() []model.SystemConfigurationVo {
 | |
| 	result := []model.SystemConfigurationVo{}
 | |
| 	typeElem := reflect.TypeOf(config.CF).Elem()
 | |
| 	valueElem := reflect.ValueOf(config.CF).Elem()
 | |
| 	for i := 0; i < typeElem.NumField(); i++ {
 | |
| 		typeField := typeElem.Field(i)
 | |
| 		valueField := valueElem.Field(i)
 | |
| 		defaultValue := typeField.Tag.Get("default")
 | |
| 		if defaultValue == "-" {
 | |
| 			continue
 | |
| 		}
 | |
| 		var value any
 | |
| 		switch typeField.Type.Kind() {
 | |
| 		case reflect.Int64, reflect.Int:
 | |
| 			value = valueField.Int()
 | |
| 		case reflect.String:
 | |
| 			value = valueField.String()
 | |
| 		case reflect.Bool:
 | |
| 			value = valueField.Bool()
 | |
| 		case reflect.Float64:
 | |
| 			value = valueField.Float()
 | |
| 		default:
 | |
| 			continue
 | |
| 		}
 | |
| 		result = append(result, model.SystemConfigurationVo{
 | |
| 			Key:      typeField.Name,
 | |
| 			Value:    value,
 | |
| 			Default:  defaultValue,
 | |
| 			Describe: typeField.Tag.Get("describe"),
 | |
| 		})
 | |
| 	}
 | |
| 	return result
 | |
| }
 | |
| 
 | |
| func (c *configLogic) SetSystemConfiguration(kv map[string]string) error {
 | |
| 	typeElem := reflect.TypeOf(config.CF).Elem()
 | |
| 	valueElem := reflect.ValueOf(config.CF).Elem()
 | |
| 	for i := 0; i < typeElem.NumField(); i++ {
 | |
| 		typeField := typeElem.Field(i)
 | |
| 		valueField := valueElem.Field(i)
 | |
| 		for k, v := range kv {
 | |
| 			if typeField.Name == k {
 | |
| 				var err error
 | |
| 				switch typeField.Type.Kind() {
 | |
| 				case reflect.String:
 | |
| 					valueField.SetString(v)
 | |
| 				case reflect.Bool:
 | |
| 					value, errV := strconv.ParseBool(v)
 | |
| 					err = errV
 | |
| 					if err == nil {
 | |
| 						valueField.SetBool(value)
 | |
| 					}
 | |
| 				case reflect.Float64:
 | |
| 					value, errV := strconv.ParseFloat(v, 64)
 | |
| 					err = errV
 | |
| 					if err == nil {
 | |
| 						valueField.SetFloat(value)
 | |
| 					}
 | |
| 				case reflect.Int64, reflect.Int:
 | |
| 					value, errV := strconv.ParseInt(v, 10, 64)
 | |
| 					err = errV
 | |
| 					if err == nil {
 | |
| 						valueField.SetInt(value)
 | |
| 					}
 | |
| 				default:
 | |
| 					continue
 | |
| 				}
 | |
| 				if err != nil {
 | |
| 					return err
 | |
| 				}
 | |
| 				err = repository.ConfigRepository.SetConfigValue(k, v)
 | |
| 				if err != nil {
 | |
| 					return err
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // reset system config to default
 | |
| func (c *configLogic) ResetSystemConfiguration() error {
 | |
| 	typeElem := reflect.TypeOf(config.CF).Elem()
 | |
| 	valueElem := reflect.ValueOf(config.CF).Elem()
 | |
| 	for i := 0; i < typeElem.NumField(); i++ {
 | |
| 		typeField := typeElem.Field(i)
 | |
| 		valueField := valueElem.Field(i)
 | |
| 		var err error
 | |
| 		defaultValue := typeField.Tag.Get("default")
 | |
| 		if defaultValue == "-" {
 | |
| 			continue
 | |
| 		}
 | |
| 		switch typeField.Type.Kind() {
 | |
| 		case reflect.String:
 | |
| 			valueField.SetString(defaultValue)
 | |
| 		case reflect.Bool:
 | |
| 			value, errV := strconv.ParseBool(defaultValue)
 | |
| 			err = errV
 | |
| 			if err == nil {
 | |
| 				valueField.SetBool(value)
 | |
| 			}
 | |
| 		case reflect.Float64:
 | |
| 			value, errV := strconv.ParseFloat(defaultValue, 64)
 | |
| 			err = errV
 | |
| 			if err == nil {
 | |
| 				valueField.SetFloat(value)
 | |
| 			}
 | |
| 		case reflect.Int64, reflect.Int:
 | |
| 			value, errV := strconv.ParseInt(defaultValue, 10, 64)
 | |
| 			err = errV
 | |
| 			if err == nil {
 | |
| 				valueField.SetInt(value)
 | |
| 			}
 | |
| 		default:
 | |
| 			continue
 | |
| 		}
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		err = repository.ConfigRepository.SetConfigValue(typeField.Name, defaultValue)
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | 
