refactor: 消息模块重构,infra包路径简写等

This commit is contained in:
meilin.huang
2025-07-27 21:02:48 +08:00
parent e96379b6c0
commit 6ad6c69660
149 changed files with 969 additions and 1098 deletions

View File

@@ -13,19 +13,19 @@ import (
"mayfly-go/internal/db/imsg"
flowapp "mayfly-go/internal/flow/application"
flowentity "mayfly-go/internal/flow/domain/entity"
msgapp "mayfly-go/internal/msg/application"
msgdto "mayfly-go/internal/msg/application/dto"
"mayfly-go/internal/pkg/event"
"mayfly-go/pkg/contextx"
"mayfly-go/pkg/errorx"
"mayfly-go/pkg/i18n"
"mayfly-go/pkg/global"
"mayfly-go/pkg/logx"
"mayfly-go/pkg/model"
"mayfly-go/pkg/utils/anyx"
"mayfly-go/pkg/utils/collx"
"mayfly-go/pkg/utils/jsonx"
"mayfly-go/pkg/utils/stringx"
"mayfly-go/pkg/ws"
"strings"
"time"
)
type sqlExecParam struct {
@@ -71,7 +71,6 @@ type dbSqlExecAppImpl struct {
dbSqlExecRepo repository.DbSqlExec `inject:"T"`
flowProcdefApp flowapp.Procdef `inject:"T"`
msgApp msgapp.Msg `inject:"T"`
}
func createSqlExecRecord(ctx context.Context, execSqlReq *dto.DbSqlExecReq, sql string) *entity.DbSqlExec {
@@ -206,38 +205,55 @@ func (d *dbSqlExecAppImpl) ExecReader(ctx context.Context, execReader *dto.SqlRe
la := contextx.GetLoginAccount(ctx)
needSendMsg := la != nil && clientId != ""
startTime := time.Now()
executedStatements := 0
progressId := stringx.Rand(32)
msgEvent := &msgdto.MsgTmplSendEvent{
TmplChannel: msgdto.MsgTmplSqlScriptRunSuccess,
Params: collx.M{"filename": filename, "db": dbConn.Info.GetLogDesc()},
}
progressMsgEvent := &msgdto.MsgTmplSendEvent{
TmplChannel: msgdto.MsgTmplSqlScriptRunProgress,
Params: collx.M{
"id": progressId,
"title": filename,
"executedStatements": executedStatements,
"terminated": false,
"clientId": clientId,
},
}
if needSendMsg {
msgEvent.ReceiverIds = []uint64{la.Id}
progressMsgEvent.ReceiverIds = []uint64{la.Id}
}
defer func() {
if needSendMsg {
progressMsgEvent.Params["terminated"] = true
global.EventBus.Publish(ctx, event.EventTopicMsgTmplSend, progressMsgEvent)
}
if err := recover(); err != nil {
errInfo := anyx.ToString(err)
logx.Errorf("exec sql reader error: %s", errInfo)
if needSendMsg {
errInfo = stringx.Truncate(errInfo, 300, 10, "...")
d.msgApp.CreateAndSend(la, msgdto.ErrSysMsg(i18n.T(imsg.SqlScriptRunFail), fmt.Sprintf("[%s][%s] execution failure: [%s]", filename, dbConn.Info.GetLogDesc(), errInfo)).WithClientId(clientId))
msgEvent.TmplChannel = msgdto.MsgTmplSqlScriptRunFail
msgEvent.Params["error"] = errInfo
global.EventBus.Publish(ctx, event.EventTopicMsgTmplSend, msgEvent)
}
}
}()
executedStatements := 0
progressId := stringx.Rand(32)
if needSendMsg {
defer ws.SendJsonMsg(ws.UserId(la.Id), clientId, msgdto.InfoSysMsg(i18n.T(imsg.SqlScripRunProgress), &progressMsg{
Id: progressId,
Title: filename,
ExecutedStatements: executedStatements,
Terminated: true,
}).WithCategory(progressCategory))
}
tx, _ := dbConn.Begin()
err := sqlparser.SQLSplit(execReader.Reader, ';', func(sql string) error {
if executedStatements%50 == 0 {
if needSendMsg {
ws.SendJsonMsg(ws.UserId(la.Id), clientId, msgdto.InfoSysMsg(i18n.T(imsg.SqlScripRunProgress), &progressMsg{
Id: progressId,
Title: filename,
ExecutedStatements: executedStatements,
Terminated: false,
}).WithCategory(progressCategory))
progressMsgEvent.Params["executedStatements"] = executedStatements
global.EventBus.Publish(ctx, event.EventTopicMsgTmplSend, progressMsgEvent)
}
}
@@ -249,12 +265,18 @@ func (d *dbSqlExecAppImpl) ExecReader(ctx context.Context, execReader *dto.SqlRe
})
if err != nil {
_ = tx.Rollback()
if needSendMsg {
msgEvent.TmplChannel = msgdto.MsgTmplSqlScriptRunFail
msgEvent.Params["error"] = err.Error()
global.EventBus.Publish(ctx, event.EventTopicMsgTmplSend, msgEvent)
}
return err
}
_ = tx.Commit()
if needSendMsg {
d.msgApp.CreateAndSend(la, msgdto.SuccessSysMsg(i18n.T(imsg.SqlScriptRunSuccess), "execution success").WithClientId(clientId))
msgEvent.Params["cost"] = fmt.Sprintf("%dms", time.Since(startTime).Milliseconds())
global.EventBus.Publish(ctx, event.EventTopicMsgTmplSend, msgEvent)
}
return nil
}