mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-08-26 16:46:14 +08:00
This commit is contained in:
@@ -8,11 +8,12 @@ package consts
|
||||
// 碎片
|
||||
|
||||
const (
|
||||
DemoTips = "演示系统已隐藏" // 演示系统敏感数据打码
|
||||
NilJsonToString = "{}" // 空json初始化值
|
||||
RegionSpilt = " / " // 地区分隔符
|
||||
Unknown = "Unknown" // Unknown
|
||||
SuperRoleKey = "super" // 超管角色唯一标识符,通过角色验证超管
|
||||
DemoTips = "演示系统已隐藏" // 演示系统敏感数据打码
|
||||
NilJsonToString = "{}" // 空json初始化值
|
||||
RegionSpilt = " / " // 地区分隔符
|
||||
Unknown = "Unknown" // Unknown
|
||||
SuperRoleKey = "super" // 超管角色唯一标识符,通过角色验证超管
|
||||
MaxServeLogContentLen = 2048 // 最大保留服务日志内容大小
|
||||
)
|
||||
|
||||
// curd.
|
||||
|
@@ -7,5 +7,5 @@ package consts
|
||||
|
||||
// VersionApp HotGo版本
|
||||
const (
|
||||
VersionApp = "2.8.4"
|
||||
VersionApp = "2.8.9"
|
||||
)
|
||||
|
@@ -93,20 +93,20 @@ func LoggingServeLogHandler(ctx context.Context, in *glog.HandlerInput) {
|
||||
var data entity.SysServeLog
|
||||
data.TraceId = gctx.CtxId(ctx)
|
||||
data.LevelFormat = in.LevelFormat
|
||||
data.Content = in.Content
|
||||
data.Content = gstr.StrLimit(in.Content, consts.MaxServeLogContentLen)
|
||||
data.Stack = gjson.New(charset.ParseStack(in.Stack))
|
||||
data.Line = strings.TrimRight(in.CallerPath, ":")
|
||||
data.TriggerNs = in.Time.UnixNano()
|
||||
data.Status = consts.StatusEnabled
|
||||
|
||||
if data.Stack.IsNil() {
|
||||
data.Stack = gjson.New(consts.NilJsonToString)
|
||||
}
|
||||
|
||||
if gstr.Contains(in.Content, `exception recovered`) {
|
||||
data.LevelFormat = "PANI"
|
||||
}
|
||||
|
||||
if data.Stack.IsNil() {
|
||||
data.Stack = gjson.New(consts.NilJsonToString)
|
||||
}
|
||||
|
||||
if conf.Queue {
|
||||
err = queue.Push(consts.QueueServeLogTopic, data)
|
||||
} else {
|
||||
@@ -115,7 +115,7 @@ func LoggingServeLogHandler(ctx context.Context, in *glog.HandlerInput) {
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
g.Dump("LoggingServeLogHandler err:%+v", err)
|
||||
g.Dump("LoggingServeLogHandler err:", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -165,11 +165,12 @@ func (l *gCurd) loadView(ctx context.Context, in *CurdPreviewInput) (err error)
|
||||
return
|
||||
}
|
||||
|
||||
now := gtime.Now()
|
||||
view.BindFuncMap(g.Map{
|
||||
"NowYear": gtime.Now().Year, // 当前年
|
||||
"ToLower": strings.ToLower, // 全部小写
|
||||
"LcFirst": gstr.LcFirst, // 首字母小写
|
||||
"UcFirst": gstr.UcFirst, // 首字母大写
|
||||
"NowYear": now.Year, // 当前年
|
||||
"ToLower": strings.ToLower, // 全部小写
|
||||
"LcFirst": gstr.LcFirst, // 首字母小写
|
||||
"UcFirst": gstr.UcFirst, // 首字母大写
|
||||
})
|
||||
|
||||
dictOptions, err := l.generateWebModelDictOptions(ctx, in)
|
||||
@@ -199,10 +200,11 @@ func (l *gCurd) loadView(ctx context.Context, in *CurdPreviewInput) (err error)
|
||||
componentPrefix = "addons/" + in.In.AddonName + "/" + componentPrefix
|
||||
}
|
||||
|
||||
nowTime := now.Format("Y-m-d H:i:s")
|
||||
view.Assigns(gview.Params{
|
||||
"templateGroup": in.options.TemplateGroup, // 生成模板分组名称
|
||||
"servFunName": l.parseServFunName(in.options.TemplateGroup, in.In.VarName), // 业务服务名称
|
||||
"nowTime": gtime.Now().Format("Y-m-d H:i:s"), // 当前时间
|
||||
"nowTime": nowTime, // 当前时间
|
||||
"version": runtime.Version(), // GO 版本
|
||||
"hgVersion": consts.VersionApp, // HG 版本
|
||||
"varName": in.In.VarName, // 实体名称
|
||||
@@ -220,6 +222,7 @@ func (l *gCurd) loadView(ctx context.Context, in *CurdPreviewInput) (err error)
|
||||
"apiPrefix": in.options.ApiPrefix, // api前缀
|
||||
"componentPrefix": componentPrefix, // vue子组件前缀
|
||||
})
|
||||
|
||||
in.view = view
|
||||
return
|
||||
}
|
||||
@@ -241,25 +244,42 @@ func (l *gCurd) DoBuild(ctx context.Context, in *CurdBuildInput) (err error) {
|
||||
}
|
||||
}
|
||||
|
||||
var needExecSql bool
|
||||
for _, vi := range preview.Views {
|
||||
// 处理sql文件
|
||||
handleSqlFile := func(vi *sysin.GenFile) (err error) {
|
||||
// 无需生成
|
||||
if vi.Meth != consts.GenCodesBuildMethCreate && vi.Meth != consts.GenCodesBuildMethCover {
|
||||
continue
|
||||
}
|
||||
|
||||
if gstr.Str(vi.Path, `.`) == ".sql" && !gfile.Exists(vi.Path) {
|
||||
needExecSql = true
|
||||
return
|
||||
}
|
||||
|
||||
if err = gfile.PutContents(vi.Path, strings.TrimSpace(vi.Content)); err != nil {
|
||||
return gerror.Newf("writing content to '%s' failed: %v", vi.Path, err)
|
||||
}
|
||||
|
||||
if gstr.Str(vi.Path, `.`) == ".sql" && needExecSql {
|
||||
if err = ImportSql(ctx, vi.Path); err != nil {
|
||||
return err
|
||||
}
|
||||
// 导入失败,将sql文件删除
|
||||
if err = ImportSql(ctx, vi.Path); err != nil {
|
||||
_ = gfile.Remove(vi.Path)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 将sql文件提取出来优先处理
|
||||
// sql执行过程出错是高概率事件,后期在执行前要进行预效验,尽量减少在执行过程中出错的可能性
|
||||
sqlGenFile, ok := preview.Views["source.sql"]
|
||||
if ok {
|
||||
delete(preview.Views, "source.sql")
|
||||
if err = handleSqlFile(sqlGenFile); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
for _, vi := range preview.Views {
|
||||
// 无需生成
|
||||
if vi.Meth != consts.GenCodesBuildMethCreate && vi.Meth != consts.GenCodesBuildMethCover {
|
||||
continue
|
||||
}
|
||||
|
||||
if err = gfile.PutContents(vi.Path, strings.TrimSpace(vi.Content)); err != nil {
|
||||
return gerror.Newf("writing content to '%s' failed: %v", vi.Path, err)
|
||||
}
|
||||
|
||||
if gstr.Str(vi.Path, `.`) == ".go" {
|
||||
@@ -400,7 +420,7 @@ func (l *gCurd) generateInputContent(ctx context.Context, in *CurdPreviewInput)
|
||||
func (l *gCurd) generateControllerContent(ctx context.Context, in *CurdPreviewInput) (err error) {
|
||||
var (
|
||||
name = "controller.go"
|
||||
tplData = g.Map{"name": "test generateControllerContent..."}
|
||||
tplData = g.Map{}
|
||||
genFile = new(sysin.GenFile)
|
||||
)
|
||||
|
||||
|
@@ -28,6 +28,10 @@ func (server *Server) startCron() {
|
||||
// 心跳超时检查
|
||||
if gcron.Search(server.getCronKey(CronHeartbeatVerify)) == nil {
|
||||
_, _ = gcron.AddSingleton(server.ctx, "@every 300s", func(ctx context.Context) {
|
||||
|
||||
server.mutexConns.Lock()
|
||||
defer server.mutexConns.Unlock()
|
||||
|
||||
if server == nil || server.clients == nil {
|
||||
return
|
||||
}
|
||||
@@ -43,6 +47,10 @@ func (server *Server) startCron() {
|
||||
// 认证检查
|
||||
if gcron.Search(server.getCronKey(CronAuthVerify)) == nil {
|
||||
_, _ = gcron.AddSingleton(server.ctx, "@every 300s", func(ctx context.Context) {
|
||||
|
||||
server.mutexConns.Lock()
|
||||
defer server.mutexConns.Unlock()
|
||||
|
||||
if server == nil || server.clients == nil {
|
||||
return
|
||||
}
|
||||
|
@@ -153,12 +153,16 @@ func (s *sSysDictData) Select(ctx context.Context, in *sysin.DataSelectInp) (lis
|
||||
|
||||
if err = mod.Order("sort asc,id desc").Scan(&list); err != nil {
|
||||
err = gerror.Wrap(err, consts.ErrorORM)
|
||||
return list, err
|
||||
return
|
||||
}
|
||||
|
||||
for k, v := range list {
|
||||
list[k].Value = consts.ConvType(v.Value, v.ValueType)
|
||||
list[k].Key = list[k].Value
|
||||
}
|
||||
return list, err
|
||||
|
||||
if len(list) == 0 {
|
||||
list = make(sysin.DataSelectModel, 0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@@ -160,7 +160,7 @@ type ProvincesSelectData struct {
|
||||
Label string `json:"label" description:"地区名称"`
|
||||
Value int64 `json:"value" description:"地区ID"`
|
||||
Level int `json:"level" description:"地区等级"`
|
||||
IsLeaf bool `json:"isLeaf" description:"是否还有下一级"`
|
||||
IsLeaf bool `json:"isLeaf" description:"是否是最后一个节点"`
|
||||
}
|
||||
|
||||
// ProvincesCityLabelInp 获取指定城市标签
|
||||
|
@@ -33,12 +33,12 @@ func (q *qServeLog) GetTopic() string {
|
||||
func (q *qServeLog) Handle(ctx context.Context, mqMsg queue.MqMsg) error {
|
||||
var data entity.SysServeLog
|
||||
if err := json.Unmarshal(mqMsg.Body, &data); err != nil {
|
||||
g.Dump("ServeLog Handle Unmarshal err:%+v", err)
|
||||
g.Dump("ServeLog Handle Unmarshal err:", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := service.SysServeLog().RealWrite(ctx, data); err != nil {
|
||||
g.Dump("ServeLog Handle Write err:%+v", err)
|
||||
g.Dump("ServeLog Handle Write err:", err)
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user