From 2c27be12fd5e3ec0e46d657cb2cd80c537ef09c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com> Date: Thu, 16 Mar 2023 15:35:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83v2.4.4=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E6=9C=AC=E6=AC=A1=E4=B8=BA=E4=BC=98=E5=8C=96=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E3=80=82=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E8=AF=B7?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=EF=BC=9Ahttps://github.com/bufanyun/hotgo/bl?= =?UTF-8?q?ob/v2.0/docs/guide-zh-CN/start-update-log.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide-zh-CN/start-update-log.md | 5 + docs/guide-zh-CN/sys-exploit.md | 1 + server/internal/consts/version.go | 2 +- server/internal/library/hggen/views/curd.go | 8 +- server/internal/library/location/location.go | 15 +- server/internal/library/network/tcp/model.go | 12 +- .../library/network/tcp/server_cron.go | 17 +- .../library/network/tcp/server_handle.go | 1 + server/internal/logic/sys/gen_codes.go | 21 +- server/internal/logic/sys/log.go | 2 +- server/internal/logic/tcpclient/auth.go | 53 +-- server/internal/service/admin.go | 34 +- server/internal/service/sys.go | 389 +++++++++--------- server/internal/service/tcpclient.go | 1 + server/storage/data/hotgo.sql | 28 +- web/package.json | 2 +- 16 files changed, 309 insertions(+), 282 deletions(-) diff --git a/docs/guide-zh-CN/start-update-log.md b/docs/guide-zh-CN/start-update-log.md index 88ad0e7..804543d 100644 --- a/docs/guide-zh-CN/start-update-log.md +++ b/docs/guide-zh-CN/start-update-log.md @@ -11,6 +11,11 @@ > 如果升级(覆盖)代码后打开会出现 sql 报错, 请检查更新的数据库格式或自行调整 +### v2.4.4 +updated 2023.03.16 +- 优化:优化代码生成多库生成时的菜单sql默认指向默认数据库分组 +- 优化:优化TCP服务认证机制 + ### v2.4.2 updated 2023.03.11 - 修复:修复字典管理列表无法添加/编辑问题 diff --git a/docs/guide-zh-CN/sys-exploit.md b/docs/guide-zh-CN/sys-exploit.md index d007637..76b1fbe 100644 --- a/docs/guide-zh-CN/sys-exploit.md +++ b/docs/guide-zh-CN/sys-exploit.md @@ -131,6 +131,7 @@ - 字段名小写,多关键字使用下划线分割(关键字尽量全称) - 禁止使用保留字并且尽量少用含有关键词来命名 - 临时表必须以tmp_开头、以日期结尾,备份表必须以bak_开头、以日期结尾 +- 同数据库表名设置统一前缀,默认是`hg_` - 插件模块表名建议以`hg_addon_`开头,如:`hg_addon_hgexample_table`,含义:`插件_案例_表格`。在生成代码时可自动识别实体命名为:`Table` #### 基础规范 diff --git a/server/internal/consts/version.go b/server/internal/consts/version.go index 61f1656..1564e14 100644 --- a/server/internal/consts/version.go +++ b/server/internal/consts/version.go @@ -7,5 +7,5 @@ package consts // VersionApp HotGo版本 const ( - VersionApp = "2.4.2" + VersionApp = "2.4.4" ) diff --git a/server/internal/library/hggen/views/curd.go b/server/internal/library/hggen/views/curd.go index 2248666..8f73925 100644 --- a/server/internal/library/hggen/views/curd.go +++ b/server/internal/library/hggen/views/curd.go @@ -116,7 +116,7 @@ func (l *gCurd) initInput(ctx context.Context, in *CurdPreviewInput) (err error) return err } - initStep(ctx, in) + initStep(in) in.options.dictMap = make(g.Map) if len(in.Config.Application.Crud.Templates)-1 < in.In.GenTemplate { @@ -138,7 +138,7 @@ func (l *gCurd) initInput(ctx context.Context, in *CurdPreviewInput) (err error) return } -func initStep(ctx context.Context, in *CurdPreviewInput) { +func initStep(in *CurdPreviewInput) { in.options.Step = new(CurdStep) in.options.Step.HasMaxSort = HasMaxSort(in.masterFields) in.options.Step.HasAdd = gstr.InArray(in.options.HeadOps, "add") @@ -642,7 +642,7 @@ func (l *gCurd) generateWebViewContent(ctx context.Context, in *CurdPreviewInput func (l *gCurd) generateSqlContent(ctx context.Context, in *CurdPreviewInput) (err error) { var ( name = "source.sql" - config = g.DB(in.In.DbName).GetConfig() + config = g.DB("default").GetConfig() tplData = g.Map{ "dbName": config.Name, "menuTable": config.Prefix + "admin_menu", @@ -652,7 +652,7 @@ func (l *gCurd) generateSqlContent(ctx context.Context, in *CurdPreviewInput) (e ) if in.options.Menu.Pid > 0 { - tplData["mainComponent"] = "ParentLayout" //gstr.LcFirst(in.In.VarName) + tplData["mainComponent"] = "ParentLayout" } genFile.Path = file.MergeAbs(in.Config.Application.Crud.Templates[in.In.GenTemplate].SqlPath, convert.CamelCaseToUnderline(in.In.VarName)+"_menu.sql") diff --git a/server/internal/library/location/location.go b/server/internal/library/location/location.go index 431d177..4a0176f 100644 --- a/server/internal/library/location/location.go +++ b/server/internal/library/location/location.go @@ -54,10 +54,6 @@ type WhoisRegionData struct { // WhoisLocation 通过Whois接口查询IP归属地 func WhoisLocation(ctx context.Context, ip string) (*IpLocationData, error) { - if !validate.IsIp(ip) { - return nil, fmt.Errorf("invalid input ip:%v", ip) - } - response, err := g.Client().Timeout(10*time.Second).Get(ctx, whoisApi+ip) if err != nil { return nil, err @@ -90,10 +86,6 @@ func WhoisLocation(ctx context.Context, ip string) (*IpLocationData, error) { // Cz88Find 通过Cz88的IP库查询IP归属地 func Cz88Find(ctx context.Context, ip string) (*IpLocationData, error) { - if !validate.IsIp(ip) { - return nil, fmt.Errorf("invalid input ip:%v", ip) - } - loc, err := iploc.OpenWithoutIndexes("./resource/ip/qqwry-utf8.dat") if err != nil { return nil, fmt.Errorf("%v for help, please go to: https://github.com/kayon/iploc", err.Error()) @@ -129,6 +121,13 @@ func IsJurisByIpTitle(title string) bool { // GetLocation 获取IP归属地信息 func GetLocation(ctx context.Context, ip string) (*IpLocationData, error) { + if !validate.IsIp(ip) { + return nil, fmt.Errorf("invalid input ip:%v", ip) + } + + if validate.IsLocalIPAddr(ip) { + return nil, fmt.Errorf("must be a public ip:%v", ip) + } method := g.Cfg().MustGet(ctx, "hotgo.ipMethod", "cz88") if method.String() == "whois" { return WhoisLocation(ctx, ip) diff --git a/server/internal/library/network/tcp/model.go b/server/internal/library/network/tcp/model.go index 4b002c8..a6981e6 100644 --- a/server/internal/library/network/tcp/model.go +++ b/server/internal/library/network/tcp/model.go @@ -1,9 +1,12 @@ package tcp +import "github.com/gogf/gf/v2/os/gtime" + // 定时任务 const ( cronHeartbeatVerify = "tcpHeartbeatVerify" cronHeartbeat = "tcpHeartbeat" + cronAuthVerify = "tcpAuthVerify" ) // 认证分组 @@ -15,10 +18,11 @@ const ( // AuthMeta 认证元数据 type AuthMeta struct { - Group string `json:"group"` - Name string `json:"name"` - AppId string `json:"appId"` - SecretKey string `json:"secretKey"` + Group string `json:"group"` + Name string `json:"name"` + AppId string `json:"appId"` + SecretKey string `json:"secretKey"` + EndAt *gtime.Time `json:"-"` } // CallbackEvent 回调事件 diff --git a/server/internal/library/network/tcp/server_cron.go b/server/internal/library/network/tcp/server_cron.go index 51af795..13f1b6a 100644 --- a/server/internal/library/network/tcp/server_cron.go +++ b/server/internal/library/network/tcp/server_cron.go @@ -27,9 +27,24 @@ func (server *Server) startCron() { for _, client := range server.clients { if client.heartbeat < gtime.Timestamp()-300 { client.Conn.Close() - server.Logger.Debugf(server.Ctx, "client heartbeat timeout, about to reconnect.. auth:%+v", client.Auth) + server.Logger.Debugf(server.Ctx, "client heartbeat timeout, close conn. auth:%+v", client.Auth) } } }, server.getCronKey(cronHeartbeatVerify)) } + + // 认证检查 + if gcron.Search(server.getCronKey(cronAuthVerify)) == nil { + gcron.AddSingleton(server.Ctx, "@every 300s", func(ctx context.Context) { + if server.clients == nil { + return + } + for _, client := range server.clients { + if client.Auth.EndAt.Before(gtime.Now()) { + client.Conn.Close() + server.Logger.Debugf(server.Ctx, "client auth expired, close conn. auth:%+v", client.Auth) + } + } + }, server.getCronKey(cronAuthVerify)) + } } diff --git a/server/internal/library/network/tcp/server_handle.go b/server/internal/library/network/tcp/server_handle.go index 168619f..363a86b 100644 --- a/server/internal/library/network/tcp/server_handle.go +++ b/server/internal/library/network/tcp/server_handle.go @@ -107,6 +107,7 @@ func (server *Server) onServerLogin(args ...interface{}) { Name: in.Name, AppId: in.AppId, SecretKey: models.SecretKey, + EndAt: models.EndAt, }, heartbeat: gtime.Timestamp(), } diff --git a/server/internal/logic/sys/gen_codes.go b/server/internal/logic/sys/gen_codes.go index d0a1c74..71cebb4 100644 --- a/server/internal/logic/sys/gen_codes.go +++ b/server/internal/logic/sys/gen_codes.go @@ -240,22 +240,31 @@ func (s *sSysGenCodes) TableSelect(ctx context.Context, in sysin.GenCodesTableSe continue } + newValue := v.Value + if config.Prefix != "" { + newValue = gstr.SubStrFromEx(v.Value, config.Prefix) + } + if newValue == "" { + err = gerror.Newf("表名[%v]前缀必须和配置中的前缀设置[%v] 保持一致", v.Value, config.Prefix) + return + } + // 如果是插件模块,则移除掉插件表前缀 - defVarName := gstr.SubStrFromEx(v.Value, config.Prefix) - bt, err := gregex.Replace(patternStr, []byte(repStr), []byte(defVarName)) + bt, err := gregex.Replace(patternStr, []byte(repStr), []byte(newValue)) if err != nil { + err = gerror.Newf("表名[%v] gregex.Replace err:%v", v.Value, err.Error()) 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 = defVarName - row.DefAlias = gstr.CaseCamelLower(gstr.SubStrFromEx(v.Value, config.Prefix)) + row.DaoName = gstr.CaseCamel(newValue) + row.DefVarName = gstr.CaseCamel(string(bt)) + row.DefAlias = gstr.CaseCamelLower(newValue) row.Name = fmt.Sprintf("%s (%s)", v.Value, v.Label) row.Label = row.Name + res = append(res, row) } return res, nil diff --git a/server/internal/logic/sys/log.go b/server/internal/logic/sys/log.go index 60ef70a..d15510b 100644 --- a/server/internal/logic/sys/log.go +++ b/server/internal/logic/sys/log.go @@ -198,7 +198,7 @@ func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog { ipData, err := location.GetLocation(ctx, clientIp) if err != nil { - g.Log().Errorf(ctx, "location.GetLocation err:%+v", err) + g.Log().Infof(ctx, "location.GetLocation clientIp:%v, err:%+v", clientIp, err) } if ipData == nil { ipData = new(location.IpLocationData) diff --git a/server/internal/logic/tcpclient/auth.go b/server/internal/logic/tcpclient/auth.go index 7e305c3..43dae94 100644 --- a/server/internal/logic/tcpclient/auth.go +++ b/server/internal/logic/tcpclient/auth.go @@ -2,12 +2,8 @@ package tcpclient import ( "context" - "github.com/gogf/gf/v2/errors/gcode" "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gcron" - "github.com/gogf/gf/v2/util/gconv" "hotgo/internal/library/network/tcp" - "hotgo/internal/model/input/msgin" "hotgo/internal/service" "hotgo/utility/simple" ) @@ -37,8 +33,8 @@ func (s *sTCPAuth) Start(ctx context.Context) { AppId: "mengshuai", SecretKey: "123456", }, - LoginEvent: s.loginEvent, - CloseEvent: s.closeEvent, + LoginEvent: s.onLoginEvent, + CloseEvent: s.onCloseEvent, }) if err != nil { g.Log().Infof(ctx, "TCPAuth NewClient fail:%+v", err) @@ -48,7 +44,7 @@ func (s *sTCPAuth) Start(ctx context.Context) { s.client = client err = s.client.RegisterRouter(map[string]tcp.RouterHandler{ - "ResponseAuthSummary": s.onResponseAuthSummary, // 获取授权信息 + // ... }) if err != nil { @@ -63,7 +59,7 @@ func (s *sTCPAuth) Start(ctx context.Context) { }) } -// Stop 关闭服务 +// Stop 停止服务 func (s *sTCPAuth) Stop(ctx context.Context) { if s.client != nil { s.client.Stop() @@ -71,40 +67,17 @@ func (s *sTCPAuth) Stop(ctx context.Context) { } } -func (s *sTCPAuth) loginEvent() { - // 登录成功后立即请求一次授权信息 - s.client.Write(&msgin.AuthSummary{}) - - // 定时检查授权 - gcron.Add(s.client.Ctx, "@every 1200s", func(ctx context.Context) { - if !s.client.IsLogin { - g.Log().Infof(ctx, "TCPAuthVerify client is not logged in, skipped") - return - } - s.client.Write(&msgin.AuthSummary{}) - }, "TCPAuthVerify") +// IsLogin 是否已登录认证 +func (s *sTCPAuth) IsLogin() bool { + return s.client.IsLogin } -func (s *sTCPAuth) closeEvent() { - // 关闭连接后,删除定时检查授权 - gcron.Remove("TCPAuthVerify") +// onLoginEvent 登录认证成功事件 +func (s *sTCPAuth) onLoginEvent() { + // ... } -func (s *sTCPAuth) onResponseAuthSummary(args ...interface{}) { - var in *msgin.ResponseAuthSummary - if err := gconv.Scan(args[0], &in); err != nil { - s.client.Logger.Infof(s.client.Ctx, "ResponseAuthSummary message Scan failed:%+v, args:%+v", err, args[0]) - return - } - s.client.Logger.Infof(s.client.Ctx, "onResponseAuthSummary in:%+v", *in) - - // 授权异常 - if in.Code != gcode.CodeOK.Code() { - s.client.Logger.Infof(s.client.Ctx, "onResponseAuthSummary authorization verification failed:%+v", in.Message) - s.client.Destroy() - return - } - - // 授权通过 - // 后续可以做一些操作... +// onCloseEvent 连接关闭回调事件 +func (s *sTCPAuth) onCloseEvent() { + // ... } diff --git a/server/internal/service/admin.go b/server/internal/service/admin.go index 7b505bd..07bbde0 100644 --- a/server/internal/service/admin.go +++ b/server/internal/service/admin.go @@ -18,6 +18,23 @@ import ( ) type ( + IAdminMenu interface { + RoleList(ctx context.Context, in adminin.MenuRoleListInp) (*adminin.MenuRoleListModel, error) + SearchList(ctx context.Context, req *menu.SearchListReq) (*menu.SearchListRes, error) + MaxSort(ctx context.Context, req *menu.MaxSortReq) (*menu.MaxSortRes, error) + NameUnique(ctx context.Context, req *menu.NameUniqueReq) (*menu.NameUniqueRes, error) + CodeUnique(ctx context.Context, req *menu.CodeUniqueReq) (*menu.CodeUniqueRes, error) + Delete(ctx context.Context, req *menu.DeleteReq) error + Edit(ctx context.Context, req *menu.EditReq) (err error) + View(ctx context.Context, req *menu.ViewReq) (res *menu.ViewRes, err error) + List(ctx context.Context, req *menu.ListReq) (lists []map[string]interface{}, err error) + GetMenuList(ctx context.Context, memberId int64) (lists role.DynamicRes, err error) + LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error) + } + IAdminMonitor interface { + StartMonitor(ctx context.Context) + GetMeta(ctx context.Context) *model.MonitorData + } IAdminNotice interface { Model(ctx context.Context, option ...*handler.Option) *gdb.Model Delete(ctx context.Context, in adminin.NoticeDeleteInp) error @@ -94,23 +111,6 @@ type ( UpdatePostIds(ctx context.Context, memberId int64, postIds []int64) (err error) GetMemberByIds(ctx context.Context, memberId int64) (postIds []int64, err error) } - IAdminMenu interface { - RoleList(ctx context.Context, in adminin.MenuRoleListInp) (*adminin.MenuRoleListModel, error) - SearchList(ctx context.Context, req *menu.SearchListReq) (*menu.SearchListRes, error) - MaxSort(ctx context.Context, req *menu.MaxSortReq) (*menu.MaxSortRes, error) - NameUnique(ctx context.Context, req *menu.NameUniqueReq) (*menu.NameUniqueRes, error) - CodeUnique(ctx context.Context, req *menu.CodeUniqueReq) (*menu.CodeUniqueRes, error) - Delete(ctx context.Context, req *menu.DeleteReq) error - Edit(ctx context.Context, req *menu.EditReq) (err error) - View(ctx context.Context, req *menu.ViewReq) (res *menu.ViewRes, err error) - List(ctx context.Context, req *menu.ListReq) (lists []map[string]interface{}, err error) - GetMenuList(ctx context.Context, memberId int64) (lists role.DynamicRes, err error) - LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error) - } - IAdminMonitor interface { - StartMonitor(ctx context.Context) - GetMeta(ctx context.Context) *model.MonitorData - } ) var ( diff --git a/server/internal/service/sys.go b/server/internal/service/sys.go index 3fcda23..f91f005 100644 --- a/server/internal/service/sys.go +++ b/server/internal/service/sys.go @@ -17,18 +17,6 @@ import ( ) type ( - ISysProvinces interface { - Tree(ctx context.Context) (list []g.Map, err error) - Delete(ctx context.Context, in sysin.ProvincesDeleteInp) error - Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error) - Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error) - MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error) - View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error) - List(ctx context.Context, in sysin.ProvincesListInp) (list []*sysin.ProvincesListModel, totalCount int, err error) - ChildrenList(ctx context.Context, in sysin.ProvincesChildrenListInp) (list []*sysin.ProvincesChildrenListModel, totalCount int, err error) - UniqueId(ctx context.Context, in sysin.ProvincesUniqueIdInp) (res *sysin.ProvincesUniqueIdModel, err error) - Select(ctx context.Context, in sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error) - } ISysCron interface { StartCron(ctx context.Context) Delete(ctx context.Context, in sysin.CronDeleteInp) (err error) @@ -39,14 +27,16 @@ type ( List(ctx context.Context, in sysin.CronListInp) (list []*sysin.CronListModel, totalCount int, err error) OnlineExec(ctx context.Context, in sysin.OnlineExecInp) (err error) } - ISysCronGroup interface { - Delete(ctx context.Context, in sysin.CronGroupDeleteInp) error - Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error) - Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error) - MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (*sysin.CronGroupMaxSortModel, error) - View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) - List(ctx context.Context, in sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error) - Select(ctx context.Context, in sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error) + ISysCurdDemo interface { + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + List(ctx context.Context, in sysin.CurdDemoListInp) (list []*sysin.CurdDemoListModel, totalCount int, err error) + Export(ctx context.Context, in sysin.CurdDemoListInp) (err error) + Edit(ctx context.Context, in sysin.CurdDemoEditInp) (err error) + Delete(ctx context.Context, in sysin.CurdDemoDeleteInp) (err error) + MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) + View(ctx context.Context, in sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) + Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error) + Switch(ctx context.Context, in sysin.CurdDemoSwitchInp) (err error) } ISysEmsLog interface { Delete(ctx context.Context, in sysin.EmsLogDeleteInp) error @@ -59,6 +49,15 @@ type ( AllowSend(ctx context.Context, models *entity.SysEmsLog, config *model.EmailConfig) (err error) VerifyCode(ctx context.Context, in sysin.VerifyEmsCodeInp) (err error) } + ISysEmployeeBase interface { + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + List(ctx context.Context, in sysin.EmployeeBaseListInp) (list []*sysin.EmployeeBaseListModel, totalCount int, err error) + Export(ctx context.Context, in sysin.EmployeeBaseListInp) (err error) + Edit(ctx context.Context, in sysin.EmployeeBaseEditInp) (err error) + Delete(ctx context.Context, in sysin.EmployeeBaseDeleteInp) (err error) + View(ctx context.Context, in sysin.EmployeeBaseViewInp) (res *sysin.EmployeeBaseViewModel, err error) + Status(ctx context.Context, in sysin.EmployeeBaseStatusInp) (err error) + } ISysLoginLog interface { Model(ctx context.Context) *gdb.Model List(ctx context.Context, in sysin.LoginLogListInp) (list []*sysin.LoginLogListModel, totalCount int, err error) @@ -68,13 +67,29 @@ type ( Push(ctx context.Context, in sysin.LoginLogPushInp) RealWrite(ctx context.Context, models entity.SysLoginLog) (err error) } - ISysAddons interface { - List(ctx context.Context, in sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error) - Selects(ctx context.Context, in sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error) - Build(ctx context.Context, in sysin.AddonsBuildInp) (err error) - Install(ctx context.Context, in sysin.AddonsInstallInp) (err error) - Upgrade(ctx context.Context, in sysin.AddonsUpgradeInp) (err error) - UnInstall(ctx context.Context, in sysin.AddonsUnInstallInp) (err error) + ISysAddonsConfig interface { + GetConfigByGroup(ctx context.Context, in sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) + ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) + UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) error + } + ISysBlacklist interface { + Delete(ctx context.Context, in sysin.BlacklistDeleteInp) (err error) + Edit(ctx context.Context, in sysin.BlacklistEditInp) (err error) + Status(ctx context.Context, in sysin.BlacklistStatusInp) (err error) + MaxSort(ctx context.Context, in sysin.BlacklistMaxSortInp) (*sysin.BlacklistMaxSortModel, error) + View(ctx context.Context, in sysin.BlacklistViewInp) (res *sysin.BlacklistViewModel, err error) + List(ctx context.Context, in sysin.BlacklistListInp) (list []*sysin.BlacklistListModel, totalCount int, err error) + VariableLoad(ctx context.Context, err error) + Load(ctx context.Context) + } + ISysCronGroup interface { + Delete(ctx context.Context, in sysin.CronGroupDeleteInp) error + Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error) + Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error) + MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (*sysin.CronGroupMaxSortModel, error) + View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) + List(ctx context.Context, in sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error) + Select(ctx context.Context, in sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error) } ISysGenCodes interface { Delete(ctx context.Context, in sysin.GenCodesDeleteInp) error @@ -90,19 +105,17 @@ type ( Preview(ctx context.Context, in sysin.GenCodesPreviewInp) (res *sysin.GenCodesPreviewModel, err error) Build(ctx context.Context, in sysin.GenCodesBuildInp) (err error) } - ISysAddonsConfig interface { - GetConfigByGroup(ctx context.Context, in sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) - ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) - UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) error - } - ISysAttachment interface { - Delete(ctx context.Context, in sysin.AttachmentDeleteInp) error - Edit(ctx context.Context, in sysin.AttachmentEditInp) (err error) - Status(ctx context.Context, in sysin.AttachmentStatusInp) (err error) - MaxSort(ctx context.Context, in sysin.AttachmentMaxSortInp) (*sysin.AttachmentMaxSortModel, error) - View(ctx context.Context, in sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error) - List(ctx context.Context, in sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) - Add(ctx context.Context, meta *sysin.UploadFileMeta, fullPath, drive string) (data *entity.SysAttachment, err error) + ISysProvinces interface { + Tree(ctx context.Context) (list []g.Map, err error) + Delete(ctx context.Context, in sysin.ProvincesDeleteInp) error + Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error) + Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error) + MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error) + View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error) + List(ctx context.Context, in sysin.ProvincesListInp) (list []*sysin.ProvincesListModel, totalCount int, err error) + ChildrenList(ctx context.Context, in sysin.ProvincesChildrenListInp) (list []*sysin.ProvincesChildrenListModel, totalCount int, err error) + UniqueId(ctx context.Context, in sysin.ProvincesUniqueIdInp) (res *sysin.ProvincesUniqueIdModel, err error) + Select(ctx context.Context, in sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error) } ISysServeLog interface { Model(ctx context.Context) *gdb.Model @@ -124,30 +137,13 @@ type ( AllowSend(ctx context.Context, models *entity.SysSmsLog, config *model.SmsConfig) (err error) VerifyCode(ctx context.Context, in sysin.VerifyCodeInp) (err error) } - ISysDictType interface { - Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error) - Delete(ctx context.Context, in sysin.DictTypeDeleteInp) error - Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error) - TreeSelect(ctx context.Context, in sysin.DictTreeSelectInp) (list []*sysin.DictTypeTree, err error) - } - ISysLog interface { - Export(ctx context.Context, in sysin.LogListInp) (err error) - RealWrite(ctx context.Context, commonLog entity.SysLog) (err error) - AutoLog(ctx context.Context) error - AnalysisLog(ctx context.Context) entity.SysLog - View(ctx context.Context, in sysin.LogViewInp) (res *sysin.LogViewModel, err error) - Delete(ctx context.Context, in sysin.LogDeleteInp) (err error) - List(ctx context.Context, in sysin.LogListInp) (list []*sysin.LogListModel, totalCount int, err error) - } - ISysBlacklist interface { - Delete(ctx context.Context, in sysin.BlacklistDeleteInp) (err error) - Edit(ctx context.Context, in sysin.BlacklistEditInp) (err error) - Status(ctx context.Context, in sysin.BlacklistStatusInp) (err error) - MaxSort(ctx context.Context, in sysin.BlacklistMaxSortInp) (*sysin.BlacklistMaxSortModel, error) - View(ctx context.Context, in sysin.BlacklistViewInp) (res *sysin.BlacklistViewModel, err error) - List(ctx context.Context, in sysin.BlacklistListInp) (list []*sysin.BlacklistListModel, totalCount int, err error) - VariableLoad(ctx context.Context, err error) - Load(ctx context.Context) + ISysAddons interface { + List(ctx context.Context, in sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error) + Selects(ctx context.Context, in sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error) + Build(ctx context.Context, in sysin.AddonsBuildInp) (err error) + Install(ctx context.Context, in sysin.AddonsInstallInp) (err error) + Upgrade(ctx context.Context, in sysin.AddonsUpgradeInp) (err error) + UnInstall(ctx context.Context, in sysin.AddonsUnInstallInp) (err error) } ISysConfig interface { GetLoadCache(ctx context.Context) (conf *model.CacheConfig, err error) @@ -164,16 +160,20 @@ type ( ConversionType(ctx context.Context, models *entity.SysConfig) (value interface{}, err error) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) error } - ISysCurdDemo interface { - Model(ctx context.Context, option ...*handler.Option) *gdb.Model - List(ctx context.Context, in sysin.CurdDemoListInp) (list []*sysin.CurdDemoListModel, totalCount int, err error) - Export(ctx context.Context, in sysin.CurdDemoListInp) (err error) - Edit(ctx context.Context, in sysin.CurdDemoEditInp) (err error) - Delete(ctx context.Context, in sysin.CurdDemoDeleteInp) (err error) - MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) - View(ctx context.Context, in sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) - Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error) - Switch(ctx context.Context, in sysin.CurdDemoSwitchInp) (err error) + ISysDictType interface { + Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error) + Delete(ctx context.Context, in sysin.DictTypeDeleteInp) error + Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error) + TreeSelect(ctx context.Context, in sysin.DictTreeSelectInp) (list []*sysin.DictTypeTree, err error) + } + ISysAttachment interface { + Delete(ctx context.Context, in sysin.AttachmentDeleteInp) error + Edit(ctx context.Context, in sysin.AttachmentEditInp) (err error) + Status(ctx context.Context, in sysin.AttachmentStatusInp) (err error) + MaxSort(ctx context.Context, in sysin.AttachmentMaxSortInp) (*sysin.AttachmentMaxSortModel, error) + View(ctx context.Context, in sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error) + List(ctx context.Context, in sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) + Add(ctx context.Context, meta *sysin.UploadFileMeta, fullPath, drive string) (data *entity.SysAttachment, err error) } ISysDictData interface { Delete(ctx context.Context, in sysin.DictDataDeleteInp) error @@ -181,59 +181,47 @@ type ( List(ctx context.Context, in sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error) Select(ctx context.Context, in sysin.DataSelectInp) (list sysin.DataSelectModel, err error) } + ISysLog interface { + Export(ctx context.Context, in sysin.LogListInp) (err error) + RealWrite(ctx context.Context, commonLog entity.SysLog) (err error) + AutoLog(ctx context.Context) error + AnalysisLog(ctx context.Context) entity.SysLog + View(ctx context.Context, in sysin.LogViewInp) (res *sysin.LogViewModel, err error) + Delete(ctx context.Context, in sysin.LogDeleteInp) (err error) + List(ctx context.Context, in sysin.LogListInp) (list []*sysin.LogListModel, totalCount int, err error) + } ) var ( - localSysAddonsConfig ISysAddonsConfig - localSysAttachment ISysAttachment localSysServeLog ISysServeLog localSysSmsLog ISysSmsLog - localSysBlacklist ISysBlacklist + localSysAddons ISysAddons localSysConfig ISysConfig - localSysCurdDemo ISysCurdDemo - localSysDictData ISysDictData localSysDictType ISysDictType + localSysGenCodes ISysGenCodes + localSysProvinces ISysProvinces + localSysAttachment ISysAttachment + localSysDictData ISysDictData localSysLog ISysLog localSysCron ISysCron - localSysCronGroup ISysCronGroup + localSysCurdDemo ISysCurdDemo localSysEmsLog ISysEmsLog + localSysAddonsConfig ISysAddonsConfig + localSysBlacklist ISysBlacklist + localSysCronGroup ISysCronGroup + localSysEmployeeBase ISysEmployeeBase localSysLoginLog ISysLoginLog - localSysProvinces ISysProvinces - localSysAddons ISysAddons - localSysGenCodes ISysGenCodes ) -func SysDictData() ISysDictData { - if localSysDictData == nil { - panic("implement not found for interface ISysDictData, forgot register?") +func SysAddonsConfig() ISysAddonsConfig { + if localSysAddonsConfig == nil { + panic("implement not found for interface ISysAddonsConfig, forgot register?") } - return localSysDictData + return localSysAddonsConfig } -func RegisterSysDictData(i ISysDictData) { - localSysDictData = i -} - -func SysDictType() ISysDictType { - if localSysDictType == nil { - panic("implement not found for interface ISysDictType, forgot register?") - } - return localSysDictType -} - -func RegisterSysDictType(i ISysDictType) { - localSysDictType = i -} - -func SysLog() ISysLog { - if localSysLog == nil { - panic("implement not found for interface ISysLog, forgot register?") - } - return localSysLog -} - -func RegisterSysLog(i ISysLog) { - localSysLog = i +func RegisterSysAddonsConfig(i ISysAddonsConfig) { + localSysAddonsConfig = i } func SysBlacklist() ISysBlacklist { @@ -247,26 +235,26 @@ func RegisterSysBlacklist(i ISysBlacklist) { localSysBlacklist = i } -func SysConfig() ISysConfig { - if localSysConfig == nil { - panic("implement not found for interface ISysConfig, forgot register?") +func SysCronGroup() ISysCronGroup { + if localSysCronGroup == nil { + panic("implement not found for interface ISysCronGroup, forgot register?") } - return localSysConfig + return localSysCronGroup } -func RegisterSysConfig(i ISysConfig) { - localSysConfig = i +func RegisterSysCronGroup(i ISysCronGroup) { + localSysCronGroup = i } -func SysCurdDemo() ISysCurdDemo { - if localSysCurdDemo == nil { - panic("implement not found for interface ISysCurdDemo, forgot register?") +func SysEmployeeBase() ISysEmployeeBase { + if localSysEmployeeBase == nil { + panic("implement not found for interface ISysEmployeeBase, forgot register?") } - return localSysCurdDemo + return localSysEmployeeBase } -func RegisterSysCurdDemo(i ISysCurdDemo) { - localSysCurdDemo = i +func RegisterSysEmployeeBase(i ISysEmployeeBase) { + localSysEmployeeBase = i } func SysLoginLog() ISysLoginLog { @@ -280,50 +268,6 @@ func RegisterSysLoginLog(i ISysLoginLog) { localSysLoginLog = i } -func SysProvinces() ISysProvinces { - if localSysProvinces == nil { - panic("implement not found for interface ISysProvinces, forgot register?") - } - return localSysProvinces -} - -func RegisterSysProvinces(i ISysProvinces) { - localSysProvinces = i -} - -func SysCron() ISysCron { - if localSysCron == nil { - panic("implement not found for interface ISysCron, forgot register?") - } - return localSysCron -} - -func RegisterSysCron(i ISysCron) { - localSysCron = i -} - -func SysCronGroup() ISysCronGroup { - if localSysCronGroup == nil { - panic("implement not found for interface ISysCronGroup, forgot register?") - } - return localSysCronGroup -} - -func RegisterSysCronGroup(i ISysCronGroup) { - localSysCronGroup = i -} - -func SysEmsLog() ISysEmsLog { - if localSysEmsLog == nil { - panic("implement not found for interface ISysEmsLog, forgot register?") - } - return localSysEmsLog -} - -func RegisterSysEmsLog(i ISysEmsLog) { - localSysEmsLog = i -} - func SysAddons() ISysAddons { if localSysAddons == nil { panic("implement not found for interface ISysAddons, forgot register?") @@ -335,6 +279,28 @@ func RegisterSysAddons(i ISysAddons) { localSysAddons = i } +func SysConfig() ISysConfig { + if localSysConfig == nil { + panic("implement not found for interface ISysConfig, forgot register?") + } + return localSysConfig +} + +func RegisterSysConfig(i ISysConfig) { + localSysConfig = i +} + +func SysDictType() ISysDictType { + if localSysDictType == nil { + panic("implement not found for interface ISysDictType, forgot register?") + } + return localSysDictType +} + +func RegisterSysDictType(i ISysDictType) { + localSysDictType = i +} + func SysGenCodes() ISysGenCodes { if localSysGenCodes == nil { panic("implement not found for interface ISysGenCodes, forgot register?") @@ -346,6 +312,28 @@ func RegisterSysGenCodes(i ISysGenCodes) { localSysGenCodes = i } +func SysProvinces() ISysProvinces { + if localSysProvinces == nil { + panic("implement not found for interface ISysProvinces, forgot register?") + } + return localSysProvinces +} + +func RegisterSysProvinces(i ISysProvinces) { + localSysProvinces = i +} + +func SysServeLog() ISysServeLog { + if localSysServeLog == nil { + panic("implement not found for interface ISysServeLog, forgot register?") + } + return localSysServeLog +} + +func RegisterSysServeLog(i ISysServeLog) { + localSysServeLog = i +} + func SysSmsLog() ISysSmsLog { if localSysSmsLog == nil { panic("implement not found for interface ISysSmsLog, forgot register?") @@ -357,17 +345,6 @@ func RegisterSysSmsLog(i ISysSmsLog) { localSysSmsLog = i } -func SysAddonsConfig() ISysAddonsConfig { - if localSysAddonsConfig == nil { - panic("implement not found for interface ISysAddonsConfig, forgot register?") - } - return localSysAddonsConfig -} - -func RegisterSysAddonsConfig(i ISysAddonsConfig) { - localSysAddonsConfig = i -} - func SysAttachment() ISysAttachment { if localSysAttachment == nil { panic("implement not found for interface ISysAttachment, forgot register?") @@ -379,13 +356,57 @@ func RegisterSysAttachment(i ISysAttachment) { localSysAttachment = i } -func SysServeLog() ISysServeLog { - if localSysServeLog == nil { - panic("implement not found for interface ISysServeLog, forgot register?") +func SysDictData() ISysDictData { + if localSysDictData == nil { + panic("implement not found for interface ISysDictData, forgot register?") } - return localSysServeLog + return localSysDictData } -func RegisterSysServeLog(i ISysServeLog) { - localSysServeLog = i +func RegisterSysDictData(i ISysDictData) { + localSysDictData = i +} + +func SysLog() ISysLog { + if localSysLog == nil { + panic("implement not found for interface ISysLog, forgot register?") + } + return localSysLog +} + +func RegisterSysLog(i ISysLog) { + localSysLog = i +} + +func SysCron() ISysCron { + if localSysCron == nil { + panic("implement not found for interface ISysCron, forgot register?") + } + return localSysCron +} + +func RegisterSysCron(i ISysCron) { + localSysCron = i +} + +func SysCurdDemo() ISysCurdDemo { + if localSysCurdDemo == nil { + panic("implement not found for interface ISysCurdDemo, forgot register?") + } + return localSysCurdDemo +} + +func RegisterSysCurdDemo(i ISysCurdDemo) { + localSysCurdDemo = i +} + +func SysEmsLog() ISysEmsLog { + if localSysEmsLog == nil { + panic("implement not found for interface ISysEmsLog, forgot register?") + } + return localSysEmsLog +} + +func RegisterSysEmsLog(i ISysEmsLog) { + localSysEmsLog = i } diff --git a/server/internal/service/tcpclient.go b/server/internal/service/tcpclient.go index 6baca21..280b5f4 100644 --- a/server/internal/service/tcpclient.go +++ b/server/internal/service/tcpclient.go @@ -13,6 +13,7 @@ type ( ITCPAuth interface { Start(ctx context.Context) Stop(ctx context.Context) + IsLogin() bool } ) diff --git a/server/storage/data/hotgo.sql b/server/storage/data/hotgo.sql index ca35a33..44b4cc0 100644 --- a/server/storage/data/hotgo.sql +++ b/server/storage/data/hotgo.sql @@ -3,7 +3,7 @@ -- https://www.phpmyadmin.net/ -- -- 主机: localhost:3306 --- 生成日期: 2023-03-13 16:58:42 +-- 生成日期: 2023-03-16 15:25:23 -- 服务器版本: 5.7.38-log -- PHP 版本: 5.6.40 @@ -155,7 +155,7 @@ CREATE TABLE `hg_admin_member` ( -- INSERT INTO `hg_admin_member` (`id`, `dept_id`, `role_id`, `real_name`, `username`, `password_hash`, `salt`, `auth_key`, `password_reset_token`, `balance`, `avatar`, `sex`, `qq`, `email`, `mobile`, `birthday`, `city_id`, `address`, `pid`, `level`, `tree`, `cash`, `last_active_at`, `remark`, `status`, `created_at`, `updated_at`) VALUES -(1, 100, 1, '孟帅', 'admin', 'a7c588fffeb2c1d99b29879d7fe97c78', '6541561', '58d8b63af5f7fccd87b052539c0a090e', '', '0.00', 'http://bufanyun.cn-bj.ufileos.com/hotgo/attachment/2023-02-09/cqdq8er9nfkchdopav.png', 1, '133814250', '133814250@qq.com', '15303830571', '2016-04-16', 410172, '莲花街001号', 0, 1, '', '{\"name\": \"孟帅\", \"account\": \"15303830571\", \"payeeCode\": \"http://bufanyun.cn-bj.ufileos.com/hotgo/attachment/2023-02-09/cqdq8mqal5isvcb58g.jpg\"}', '2023-03-11 16:55:34', NULL, 1, '2021-02-12 17:59:45', '2023-03-11 16:55:33'), +(1, 100, 1, '孟帅', 'admin', 'a7c588fffeb2c1d99b29879d7fe97c78', '6541561', '799923d21be374d4fa9a0775eb24ca86', '', '0.00', 'http://bufanyun.cn-bj.ufileos.com/hotgo/attachment/2023-02-09/cqdq8er9nfkchdopav.png', 1, '133814250', '133814250@qq.com', '15303830571', '2016-04-16', 410172, '莲花街001号', 0, 1, '', '{\"name\": \"孟帅\", \"account\": \"15303830571\", \"payeeCode\": \"http://bufanyun.cn-bj.ufileos.com/hotgo/attachment/2023-02-09/cqdq8mqal5isvcb58g.jpg\"}', '2023-03-16 15:21:02', NULL, 1, '2021-02-12 17:59:45', '2023-03-16 15:21:01'), (3, 100, 2, '测试账号', 'test', 'a7c588fffeb2c1d99b29879d7fe97c78', '6541561', '2c7db9eca4ed02a718e794ba4c904f56', '', '0.00', 'http://alioss.qvnidaye.com//images/2021/03/12/image_1615529198_vMK4kwq2.jpg', 1, '', 'c@qq.cc', '15303888888', '2016-04-13', 371100, '大潮街道666号', 1, 2, 'tr_1 ', NULL, NULL, '', 1, '2022-02-11 17:59:45', '2023-01-10 16:47:00'), (8, 105, 206, 'ameng', 'ameng', '4501790a9b89f4e66f4417c899836511', 'hfuUEb', '0d796b377f77f1e1d42278eedbab6110', '', '0.00', '', 1, '', '', '', NULL, 0, '', 1, 2, 'tr_1 ', NULL, '2023-03-05 15:25:49', '', 1, '2023-02-03 17:34:31', '2023-02-26 00:31:13'); @@ -177,10 +177,7 @@ CREATE TABLE `hg_admin_member_post` ( INSERT INTO `hg_admin_member_post` (`member_id`, `post_id`) VALUES (1, 1), (3, 4), -(7, 3), -(7, 4), -(8, 2), -(9, 3); +(8, 2); -- -------------------------------------------------------- @@ -5041,8 +5038,9 @@ CREATE TABLE `hg_sys_serve_license` ( `appid` varchar(64) NOT NULL COMMENT '应用ID', `secret_key` varchar(255) DEFAULT NULL COMMENT '应用秘钥', `desc` text COMMENT '授权说明', - `remote_addr` varchar(64) DEFAULT NULL COMMENT '连接地址', - `online` tinyint(4) DEFAULT '0' COMMENT '是否在线', + `remote_addr` varchar(64) DEFAULT NULL COMMENT '最后连接地址', + `online` tinyint(4) DEFAULT '0' COMMENT '在线数量', + `online_limit` int(11) DEFAULT '1' COMMENT '在线数量限制,默认1', `login_times` bigint(20) DEFAULT NULL COMMENT '登录次数', `last_login_at` datetime DEFAULT NULL COMMENT '最后登录时间', `last_active_at` datetime DEFAULT NULL COMMENT '最后活跃时间', @@ -5059,10 +5057,10 @@ CREATE TABLE `hg_sys_serve_license` ( -- 转存表中的数据 `hg_sys_serve_license` -- -INSERT INTO `hg_sys_serve_license` (`id`, `group`, `name`, `appid`, `secret_key`, `desc`, `remote_addr`, `online`, `login_times`, `last_login_at`, `last_active_at`, `routes`, `allowed_ips`, `end_at`, `remark`, `status`, `created_at`, `updated_at`) VALUES -(1, 'queue', '默认的消息队列', '1001', 'hotgo', '这是默认的消息队列TCP客户端授权凭证。', NULL, 0, 1, '2023-03-23 00:00:00', NULL, NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-05 00:00:00'), -(2, 'cron', '默认的定时任务', '1002', 'hotgo', '这是默认的定时任务TCP客户端授权凭证。', NULL, 0, 1, '2023-03-23 00:00:00', NULL, NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-05 00:00:00'), -(3, 'auth', '测试授权', 'mengshuai', '123456', '这是一个测试的授权服务,可以为第三方平台提供授权支持。', '127.0.0.1:54182', 1, 20, '2023-03-13 16:01:02', '2023-03-13 16:57:04', NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-13 16:57:03'); +INSERT INTO `hg_sys_serve_license` (`id`, `group`, `name`, `appid`, `secret_key`, `desc`, `remote_addr`, `online`, `online_limit`, `login_times`, `last_login_at`, `last_active_at`, `routes`, `allowed_ips`, `end_at`, `remark`, `status`, `created_at`, `updated_at`) VALUES +(1, 'queue', '默认的消息队列', '1001', 'hotgo', '这是默认的消息队列TCP客户端授权凭证。', NULL, 0, 1, 1, '2023-03-23 00:00:00', NULL, NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-05 00:00:00'), +(2, 'cron', '默认的定时任务', '1002', 'hotgo', '这是默认的定时任务TCP客户端授权凭证。', NULL, 0, 1, 1, '2023-03-23 00:00:00', NULL, NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-05 00:00:00'), +(3, 'auth', '测试授权', 'mengshuai', '123456', '这是一个测试的授权服务,可以为第三方平台提供授权支持。', '127.0.0.1:54182', 1, 1, 20, '2023-03-13 16:01:02', '2023-03-13 17:15:04', NULL, '127.0.0.1', '2033-03-09 00:00:00', '', 1, '2023-03-11 00:00:00', '2023-03-13 17:15:03'); -- -------------------------------------------------------- @@ -5387,13 +5385,13 @@ ALTER TABLE `hg_admin_dept` -- 使用表AUTO_INCREMENT `hg_admin_member` -- ALTER TABLE `hg_admin_member` - MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '管理员ID', AUTO_INCREMENT=9; + MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '管理员ID', AUTO_INCREMENT=10; -- -- 使用表AUTO_INCREMENT `hg_admin_menu` -- ALTER TABLE `hg_admin_menu` - MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', AUTO_INCREMENT=2232; + MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', AUTO_INCREMENT=2253; -- -- 使用表AUTO_INCREMENT `hg_admin_notice` @@ -5489,7 +5487,7 @@ ALTER TABLE `hg_sys_ems_log` -- 使用表AUTO_INCREMENT `hg_sys_gen_codes` -- ALTER TABLE `hg_sys_gen_codes` - MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '生成ID', AUTO_INCREMENT=5; + MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '生成ID', AUTO_INCREMENT=8; -- -- 使用表AUTO_INCREMENT `hg_sys_gen_curd_demo` diff --git a/web/package.json b/web/package.json index c715f94..9199345 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "hotgo", - "version": "2.4.2", + "version": "2.4.4", "author": { "name": "MengShuai", "email": "133814250@qq.com",