This commit is contained in:
孟帅
2023-02-23 17:53:04 +08:00
parent 7cf1b8ce8e
commit 61d0988d2c
402 changed files with 18340 additions and 35547 deletions

View File

@@ -0,0 +1,149 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package sys
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/text/gstr"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
"hotgo/internal/model/input/form"
"hotgo/internal/model/input/sysin"
"hotgo/internal/service"
"sort"
)
type sSysAddons struct{}
func NewSysAddons() *sSysAddons {
return &sSysAddons{}
}
func init() {
service.RegisterSysAddons(NewSysAddons())
}
// List 获取列表
func (s *sSysAddons) List(ctx context.Context, in sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error) {
sks := addons.GetSkeletons()
if len(sks) == 0 {
return
}
var (
i int
_, perPage, offset = form.CalPage(ctx, in.Page, in.PerPage)
)
for k, skeleton := range sks {
ok := k >= offset && i <= perPage
if !ok {
break
}
row := new(sysin.AddonsListModel)
row.Skeleton = *skeleton
if in.Group > 0 {
if row.Skeleton.Group != in.Group {
continue
}
}
if in.Name != "" {
if row.Skeleton.Label != in.Name && row.Skeleton.Name != in.Name {
continue
}
}
install, err := addons.ScanInstall(row.Skeleton.GetModule())
if err != nil {
continue
}
if install == nil {
row.InstallStatus = consts.AddonsInstallStatusNo
row.InstallVersion = "v0.0.0"
} else {
row.InstallStatus = install.Status
row.InstallVersion = install.Version
row.CanSave = gstr.CompareVersion(row.Skeleton.Version, install.Version) > 0
}
if in.Status > 0 {
if row.InstallStatus != in.Status {
continue
}
}
if row.Skeleton.Logo == "" {
row.Skeleton.Logo, _ = consts.AddonsGroupIconMap[row.Skeleton.Group]
}
row.GroupName, _ = consts.AddonsGroupNameMap[row.Skeleton.Group]
list = append(list, row)
i++
}
totalCount = len(sks)
return
}
// Selects 选项
func (s *sSysAddons) Selects(ctx context.Context, in sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error) {
res = new(sysin.AddonsSelectsModel)
for k, v := range consts.AddonsGroupNameMap {
res.GroupType = append(res.GroupType, &form.Select{
Value: k,
Name: v,
Label: v,
})
}
sort.Sort(res.GroupType)
for k, v := range consts.AddonsInstallStatusNameMap {
res.Status = append(res.Status, &form.Select{
Value: k,
Name: v,
Label: v,
})
}
sort.Sort(res.Status)
return res, nil
}
// Build 提交生成
func (s *sSysAddons) Build(ctx context.Context, in sysin.AddonsBuildInp) (err error) {
genConfig, err := service.SysConfig().GetLoadGenerate(ctx)
if err != nil {
return
}
if genConfig == nil || genConfig.Addon == nil {
err = gerror.New("没有找到有效的生成或插件配置,请检查配置文件是否正常")
return
}
return addons.Build(ctx, in.Skeleton, genConfig.Addon)
}
// Install 安装模块
func (s *sSysAddons) Install(ctx context.Context, in sysin.AddonsInstallInp) (err error) {
return addons.Install(in.GetModule())
}
// Upgrade 更新模块
func (s *sSysAddons) Upgrade(ctx context.Context, in sysin.AddonsUpgradeInp) (err error) {
return addons.Upgrade(in.GetModule())
}
// UnInstall 卸载模块
func (s *sSysAddons) UnInstall(ctx context.Context, in sysin.AddonsUnInstallInp) (err error) {
return addons.UnInstall(in.GetModule())
}

View File

@@ -0,0 +1,150 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package sys
import (
"context"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gstr"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/sysin"
"hotgo/internal/service"
)
var AddonsMaskDemoField []string
type sSysAddonsConfig struct{}
func NewSysAddonsConfig() *sSysAddonsConfig {
return &sSysAddonsConfig{}
}
func init() {
service.RegisterSysAddonsConfig(NewSysAddonsConfig())
}
// GetConfigByGroup 获取指定分组的配置
func (s *sSysAddonsConfig) GetConfigByGroup(ctx context.Context, in sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) {
if in.AddonName == "" {
return nil, gerror.New("插件名称不能为空")
}
if in.Group == "" {
return nil, gerror.New("分组不能为空")
}
var (
mod = dao.SysAddonsConfig.Ctx(ctx)
models []*entity.SysAddonsConfig
)
if err = mod.Fields("key", "value", "type").
Where("addon_name", in.AddonName).
Where("group", in.Group).
Scan(&models); err != nil {
return nil, err
}
isDemo := g.Cfg().MustGet(ctx, "hotgo.isDemo", false)
if len(models) > 0 {
res = new(sysin.GetAddonsConfigModel)
res.List = make(g.Map, len(models))
for _, v := range models {
val, err := s.ConversionType(ctx, v)
if err != nil {
return nil, err
}
res.List[v.Key] = val
if isDemo.Bool() && gstr.InArray(AddonsMaskDemoField, v.Key) {
res.List[v.Key] = consts.DemoTips
res.List[v.Key] = consts.DemoTips
}
}
}
return
}
// ConversionType 转换类型
func (s *sSysAddonsConfig) ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) {
if models == nil {
return nil, gerror.New("数据不存在")
}
return consts.ConvType(models.Value, models.Type), nil
}
// UpdateConfigByGroup 更新指定分组的配置
func (s *sSysAddonsConfig) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) error {
if in.AddonName == "" {
return gerror.New("插件名称不能为空")
}
if in.Group == "" {
return gerror.New("分组不能为空")
}
var (
mod = dao.SysAddonsConfig.Ctx(ctx)
models []*entity.SysAddonsConfig
)
if err := mod.
Where("addon_name", in.AddonName).
Where("group", in.Group).
Scan(&models); err != nil {
return err
}
err := dao.SysAddonsConfig.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
for k, v := range in.List {
row := s.getConfigByKey(k, models)
// 新增
if row == nil {
//row.Id = 0
//row.Key = k
//row.Value = gconv.String(v)
//row.Group = in.Group
//row.Status = consts.StatusEnabled
//row.CreatedAt = gtime.Now()
//row.UpdatedAt = gtime.Now()
//_, err := dao.SysAddonsConfig.Ctx(ctx).Data(row).Insert()
//if err != nil {
// err = gerror.Wrap(err, consts.ErrorORM)
// return err
//}
//continue
return gerror.Newf("暂不支持从前台添加变量,请先在数据库表[%v]中配置变量:%v", dao.SysAddonsConfig.Table(), k)
}
// 更新
_, err := dao.SysAddonsConfig.Ctx(ctx).Where("id", row.Id).Data(g.Map{"value": v, "updated_at": gtime.Now()}).Update()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err
}
}
return nil
})
if err != nil {
return err
}
return nil
}
func (s *sSysAddonsConfig) getConfigByKey(key string, models []*entity.SysAddonsConfig) *entity.SysAddonsConfig {
if len(models) == 0 {
return nil
}
for _, v := range models {
if key == v.Key {
return v
}
}
return nil
}

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
@@ -161,6 +161,7 @@ func (s *sSysAttachment) List(ctx context.Context, in sysin.AttachmentListInp) (
if err != nil {
return list, totalCount, err
}
for _, v := range list {
v.SizeFormat = format.FileSize(v.Size)
v.FileUrl = service.CommonUpload().LastUrl(ctx, conf, v.FileUrl, v.Drive)

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
@@ -172,7 +172,7 @@ func (s *sSysBlacklist) Load(ctx context.Context) {
Where(dao.SysBlacklist.Columns().Status, consts.StatusEnabled).
Array()
if err != nil {
g.Log().Fatal(ctx, "load blacklist fail%+v", err)
g.Log().Fatalf(ctx, "load blacklist fail%+v", err)
return
}

View File

@@ -1,9 +1,8 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sys
import (
@@ -40,6 +39,12 @@ func init() {
service.RegisterSysConfig(NewSysConfig())
}
// GetLoadCache 获取本地缓存配置
func (s *sSysConfig) GetLoadCache(ctx context.Context) (conf *model.CacheConfig, err error) {
err = g.Cfg().MustGet(ctx, "cache").Scan(&conf)
return
}
// GetLoadGenerate 获取本地生成配置
func (s *sSysConfig) GetLoadGenerate(ctx context.Context) (conf *model.GenerateConfig, err error) {
generate := g.Cfg().MustGet(ctx, "hggen")
@@ -217,7 +222,7 @@ func (s *sSysConfig) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateCon
// return err
//}
//continue
return gerror.Newf("暂不支持从前台添加变量,请数据库中添加变量:%v", k)
return gerror.Newf("暂不支持从前台添加变量,请先在数据库表[%v]中配置变量:%v", dao.SysConfig.Table(), k)
}
// 更新

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//

View File

@@ -3,8 +3,8 @@
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.1.2
// @AutoGenerate Date 2023-02-08 17:47:32
// @AutoGenerate Version 2.1.4
// @AutoGenerate Date 2023-02-20 16:41:58
//
package sys
@@ -77,7 +77,6 @@ func (s *sSysCurdDemo) List(ctx context.Context, in sysin.CurdDemoListInp) (list
totalCount, err = mod.Clone().Count(1)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
@@ -90,11 +89,7 @@ func (s *sSysCurdDemo) List(ctx context.Context, in sysin.CurdDemoListInp) (list
{Dao: dao.TestCategory, Alias: "testCategory"},
})
if err = mod.Fields(fields).Page(in.Page, in.PerPage).OrderAsc(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Id).Scan(&list); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
err = mod.Fields(fields).Page(in.Page, in.PerPage).OrderAsc(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Id).Scan(&list)
return
}
@@ -162,7 +157,6 @@ func (s *sSysCurdDemo) Delete(ctx context.Context, in sysin.CurdDemoDeleteInp) (
// MaxSort 获取生成演示最大排序
func (s *sSysCurdDemo) MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) {
if err = dao.SysGenCurdDemo.Ctx(ctx).Fields(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Sort).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//

View File

@@ -1,9 +1,8 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sys
import (
@@ -13,10 +12,12 @@ import (
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gregex"
"github.com/gogf/gf/v2/text/gstr"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/library/hggen"
"hotgo/internal/model"
"hotgo/internal/model/input/sysin"
"hotgo/internal/service"
"hotgo/utility/validate"
@@ -53,6 +54,25 @@ func (s *sSysGenCodes) Edit(ctx context.Context, in sysin.GenCodesEditInp) (res
err = gerror.New("实体名称不能为空")
return nil, err
}
if in.GenType == consts.GenCodesTypeCurd {
var temp *model.GenerateAppCrudTemplate
cfg := fmt.Sprintf("hggen.application.crud.templates.%v", in.GenTemplate)
if err = g.Cfg().MustGet(ctx, cfg).Scan(&temp); err != nil {
return
}
if temp == nil {
err = gerror.Newf("选择的模板不存在:%v", cfg)
return
}
if temp.IsAddon && in.AddonName == "" {
err = gerror.New("插件模板必须选择一个有效的插件")
return nil, err
}
}
// 修改
in.UpdatedAt = gtime.Now()
if in.Id > 0 {
@@ -212,16 +232,27 @@ func (s *sSysGenCodes) TableSelect(ctx context.Context, in sysin.GenCodesTableSe
return nil, err
}
patternStr := `addon_(\w+)_`
repStr := ``
for _, v := range lists {
if gstr.InArray(disableTables, v.Value) {
continue
}
// 如果是插件模块,则移除掉插件表前缀
defVarName := gstr.SubStrFromEx(v.Value, config.Prefix)
bt, err := gregex.Replace(patternStr, []byte(repStr), []byte(defVarName))
if err != nil {
break
}
defVarName = gstr.CaseCamel(string(bt))
row := new(sysin.GenCodesTableSelectModel)
row = v
row.DefTableComment = v.Label
row.DaoName = gstr.CaseCamel(gstr.SubStrFromEx(v.Value, config.Prefix))
row.DefVarName = row.DaoName
row.DefVarName = defVarName
row.DefAlias = gstr.CaseCamelLower(gstr.SubStrFromEx(v.Value, config.Prefix))
row.Name = fmt.Sprintf("%s (%s)", v.Value, v.Label)
row.Label = row.Name

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
@@ -135,6 +135,7 @@ func (s *sSysLog) AutoLog(ctx context.Context) error {
err = queue.Push(consts.QueueLogTopic, data)
return
}
err = s.RealWrite(ctx, data)
return
})
@@ -195,15 +196,12 @@ func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog {
appId = user.App
}
var ipData = new(location.IpLocationData)
if validate.IsPublicIp(clientIp) {
ipData, err := location.GetLocation(ctx, clientIp)
if err != nil {
g.Log().Errorf(ctx, "location.GetLocation err:%+v", err)
}
if ipData == nil {
ipData = new(location.IpLocationData)
}
ipData, err := location.GetLocation(ctx, clientIp)
if err != nil {
g.Log().Errorf(ctx, "location.GetLocation err:%+v", err)
}
if ipData == nil {
ipData = new(location.IpLocationData)
}
data = entity.SysLog{
@@ -233,30 +231,26 @@ func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog {
// View 获取指定字典类型信息
func (s *sSysLog) View(ctx context.Context, in sysin.LogViewInp) (res *sysin.LogViewModel, err error) {
if err = dao.SysLog.Ctx(ctx).Hook(hook.CityLabel).Where("id", in.Id).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return nil, err
return
}
isDemo := g.Cfg().MustGet(ctx, "hotgo.isDemo", false)
if isDemo.Bool() {
// res.HeaderData = `{
// "none": [
// "` + consts.DemoTips + `"
// ]
//}`
res.HeaderData = gjson.New(`{
"none": [
"` + consts.DemoTips + `"
]
}`)
}
return res, nil
return
}
// Delete 删除
func (s *sSysLog) Delete(ctx context.Context, in sysin.LogDeleteInp) error {
if _, err := dao.SysLog.Ctx(ctx).Where("id", in.Id).Delete(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err
}
return nil
func (s *sSysLog) Delete(ctx context.Context, in sysin.LogDeleteInp) (err error) {
_, err = dao.SysLog.Ctx(ctx).Where("id", in.Id).Delete()
return
}
// List 列表
@@ -361,11 +355,11 @@ func (s *sSysLog) List(ctx context.Context, in sysin.LogListInp) (list []*sysin.
}
if isDemo.Bool() {
// list[i].HeaderData = `{
// "none": [
// "` + consts.DemoTips + `"
// ]
//}`
list[i].HeaderData = gjson.New(`{
"none": [
"` + consts.DemoTips + `"
]
}`)
}
}

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
@@ -252,7 +252,7 @@ func (s *sSysProvinces) UniqueId(ctx context.Context, in sysin.ProvincesUniqueId
return
}
if err = hgorm.IsUnique(ctx, dao.SysProvinces, g.Map{dao.Test.Columns().Id: in.NewId}, "", in.OldId); err != nil {
if err = hgorm.IsUnique(ctx, dao.SysProvinces, g.Map{dao.SysProvinces.Columns().Id: in.NewId}, "", in.OldId); err != nil {
res.IsUnique = false
return res, nil
}

View File

@@ -1,6 +1,6 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2022 HotGo CLI
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//