system_setting.go 7.0 KB
package service

import (
	"github.com/linmadan/egglib-go/core/application"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-basic/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-basic/pkg/application/systemSetting/command"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-basic/pkg/application/systemSetting/query"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-basic/pkg/domain"
)

// 用户的系统设置
type SystemSettingService struct {
}

// 返回用户的系统设置
func (systemSettingService *SystemSettingService) GetSystemSetting(getSystemSettingQuery *query.GetSystemSettingQuery) (interface{}, error) {
	if err := getSystemSettingQuery.ValidateQuery(); err != nil {
		return nil, application.ThrowError(application.ARG_ERROR, err.Error())
	}
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	var systemSettingRepository domain.SystemSettingRepository
	if value, err := factory.CreateSystemSettingRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	}); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	} else {
		systemSettingRepository = value
	}
	systemSetting, err := systemSettingRepository.FindOne(map[string]interface{}{
		"companyId":   getSystemSettingQuery.CompanyId,
		"settingCode": getSystemSettingQuery.SettingCode,
	})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if systemSetting == nil {
		//获取默认设置项
		setting := domain.SystemSetting{}
		defaultSet := setting.GetDefaultSetting(getSystemSettingQuery.SettingCode)
		if len(defaultSet) == 0 {
			return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取设置项失败,settingCode="+getSystemSettingQuery.SettingCode)
		}
		defaultSet[0].CompanyId = getSystemSettingQuery.CompanyId
		systemSetting = &defaultSet[0]
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	return systemSetting, nil
}

// 返回用户的系统设置列表
func (systemSettingService *SystemSettingService) ListSystemSetting(listSystemSettingQuery *query.ListSystemSettingQuery) (interface{}, error) {
	if err := listSystemSettingQuery.ValidateQuery(); err != nil {
		return nil, application.ThrowError(application.ARG_ERROR, err.Error())
	}
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	var systemSettingRepository domain.SystemSettingRepository
	if value, err := factory.CreateSystemSettingRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	}); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	} else {
		systemSettingRepository = value
	}
	queryOption := map[string]interface{}{
		"companyId": listSystemSettingQuery.CompanyId,
	}
	if len(listSystemSettingQuery.SettingCode) > 0 {
		queryOption["settingCode"] = listSystemSettingQuery.SettingCode
	}
	_, systemSettings, err := systemSettingRepository.Find(queryOption)
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	if err := transactionContext.CommitTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	settingMap := map[string]*domain.SystemSetting{}
	for i := range systemSettings {
		code := systemSettings[i].SettingCode
		settingMap[code] = systemSettings[i]
	}
	defaultSettings := new(domain.SystemSetting).GetDefaultSetting("")
	for i := range defaultSettings {
		if v, ok := settingMap[defaultSettings[i].SettingCode]; ok {
			defaultSettings[i].Value = v.Value
		}
		defaultSettings[i].CompanyId = listSystemSettingQuery.CompanyId
	}
	return map[string]interface{}{
		"systemSettings": defaultSettings,
	}, nil
}

// 更新用户的系统设置
func (systemSettingService *SystemSettingService) UpdateSystemSetting(updateSystemSettingCommand *command.UpdateSystemSettingCommand) (interface{}, error) {
	if err := updateSystemSettingCommand.ValidateCommand(); err != nil {
		return nil, application.ThrowError(application.ARG_ERROR, err.Error())
	}
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	if err := transactionContext.StartTransaction(); err != nil {
		return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
	}
	defer func() {
		transactionContext.RollbackTransaction()
	}()
	var systemSettingRepository domain.SystemSettingRepository
	if value, err := factory.CreateSystemSettingRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	}); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	} else {
		systemSettingRepository = value
	}
	_, systemSettings, err := systemSettingRepository.Find(map[string]interface{}{
		"settingCode": updateSystemSettingCommand.SettingCode,
		"companyId":   updateSystemSettingCommand.CompanyId,
	})
	if err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	}
	var systemSetting *domain.SystemSetting
	if len(systemSettings) == 0 {
		defaultSet := new(domain.SystemSetting).GetDefaultSetting(updateSystemSettingCommand.SettingCode)
		if len(defaultSet) > 0 {
			systemSetting = &defaultSet[0]
			systemSetting.CompanyId = updateSystemSettingCommand.CompanyId
		}
	} else {
		systemSetting = systemSettings[0]
		if err := systemSetting.Update(map[string]interface{}{
			"value": updateSystemSettingCommand.Value,
		}); err != nil {
			return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
		}
	}
	if systemSetting == nil {
		return nil, application.ThrowError(application.BUSINESS_ERROR, "settingCode错误,settingCode="+updateSystemSettingCommand.SettingCode)
	}

	if systemSetting, err := systemSettingRepository.Save(systemSetting); err != nil {
		return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
	} else {
		if err := transactionContext.CommitTransaction(); err != nil {
			return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
		}
		return systemSetting, nil
	}
}

func NewSystemSettingService(options map[string]interface{}) *SystemSettingService {
	newSystemSettingService := &SystemSettingService{}
	return newSystemSettingService
}