diff --git a/internal/services/callback.go b/internal/services/callback.go index aff1ae5..997061e 100644 --- a/internal/services/callback.go +++ b/internal/services/callback.go @@ -144,21 +144,6 @@ func (s *CallbackService) handleDingTalkCallback(c *fiber.Ctx, env Envelope) err ctx := c.Context() switch env.Action { - // bug/优化完成回调 - case ActionBugOptimizationSubmitDone: - // 业务处理 - msg, businessErr := s.handleBugOptimizationSubmitDone(ctx, env.Data) - if businessErr != nil { - return businessErr - } - - // 发送日志 - s.sendStreamLog(sessionID, msg) - - // 删除映射 - s.botTool.DelTaskMapping(env.TaskID) - - return c.JSON(fiber.Map{"code": 0, "message": "ok"}) case ActionBugOptimizationSubmitUpdate: // 业务处理 msg, businessErr := s.handleBugOptimizationSubmitUpdate(ctx, env.Data) @@ -168,41 +153,26 @@ func (s *CallbackService) handleDingTalkCallback(c *fiber.Ctx, env Envelope) err s.sendStreamLog(sessionID, msg) + return c.JSON(fiber.Map{"code": 0, "message": "ok"}) + case ActionBugOptimizationSubmitDone: + // 业务处理 + msg, businessErr := s.handleBugOptimizationSubmitDone(ctx, env.Data) + if businessErr != nil { + return businessErr + } + + // 发送日志 + s.sendStreamTxt(sessionID, msg) + + // 删除映射 + s.botTool.DelTaskMapping(env.TaskID) + return c.JSON(fiber.Map{"code": 0, "message": "ok"}) default: return errorcode.ParamErr("unknown action: %s", env.Action) } } -// handleBugOptimizationSubmitDone 处理 bug 优化提交完成回调 -func (s *CallbackService) handleBugOptimizationSubmitDone(ctx context.Context, taskData json.RawMessage) (string, *errorcode.BusinessErr) { - var data BugOptimizationSubmitDoneData - if err := json.Unmarshal(taskData, &data); err != nil { - return "", errorcode.ParamErr("invalid data type: %v", err) - } - - if len(data.Receivers) == 0 { - return "", errorcode.ParamErr("empty receivers") - } - // 构建接收者 - receivers := s.getDingtalkReceivers(ctx, data.Receivers) - if receivers == "" { - return "", errorcode.ParamErr("invalid receivers") - } - - // 构建跳转链接 - var detailPage string - if data.DetailPage != "" { - detailPage = util.BuildJumpLink(data.DetailPage, "去查看") - } - - msg := data.Msg - msg = util.ReplacePlaceholder(msg, "receivers", receivers) - msg = util.ReplacePlaceholder(msg, "detail_page", util.EscapeJSONString(detailPage)) - - return msg, nil -} - // getDingtalkReceivers 解析接收者字符串为 DingTalk 用户 ID 列表 func (s *CallbackService) getDingtalkReceivers(ctx context.Context, receiverIds []string) string { var receiverNames []string @@ -233,6 +203,17 @@ func (s *CallbackService) sendStreamLog(sessionID string, content string) { s.gateway.SendToUid(sessionID, streamLogBytes) } +// sendStreamTxt 发送流式文本 +func (s *CallbackService) sendStreamTxt(sessionID string, content string) { + streamLog := entitys.Response{ + Index: constants.BotToolsBugOptimizationSubmit, + Content: content, + Type: entitys.ResponseText, + } + streamLogBytes := pkg.JsonByteIgonErr(streamLog) + s.gateway.SendToUid(sessionID, streamLogBytes) +} + // handleBugOptimizationSubmitUpdate 处理 bug 优化提交更新回调 func (s *CallbackService) handleBugOptimizationSubmitUpdate(ctx context.Context, taskData json.RawMessage) (string, *errorcode.BusinessErr) { var data BugOptimizationSubmitUpdateData @@ -278,3 +259,32 @@ func (s *CallbackService) handleBugOptimizationSubmitUpdate(ctx context.Context, return "问题记录即将完成", nil } + +// handleBugOptimizationSubmitDone 处理 bug 优化提交完成回调 +func (s *CallbackService) handleBugOptimizationSubmitDone(ctx context.Context, taskData json.RawMessage) (string, *errorcode.BusinessErr) { + var data BugOptimizationSubmitDoneData + if err := json.Unmarshal(taskData, &data); err != nil { + return "", errorcode.ParamErr("invalid data type: %v", err) + } + + if len(data.Receivers) == 0 { + return "", errorcode.ParamErr("empty receivers") + } + // 构建接收者 + receivers := s.getDingtalkReceivers(ctx, data.Receivers) + if receivers == "" { + return "", errorcode.ParamErr("invalid receivers") + } + + // 构建跳转链接 + var detailPage string + if data.DetailPage != "" { + detailPage = util.BuildJumpLink(data.DetailPage, "去查看") + } + + msg := data.Msg + msg = util.ReplacePlaceholder(msg, "receivers", receivers) + msg = util.ReplacePlaceholder(msg, "detail_page", util.EscapeJSONString(detailPage)) + + return msg, nil +}