From c91e7bc95bdb2d25ed5da6ed8dea0294095e6ed4 Mon Sep 17 00:00:00 2001 From: renzhiyuan <465386466@qq.com> Date: Tue, 13 Jan 2026 18:10:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=B4=9F=E5=88=A9?= =?UTF-8?q?=E6=B6=A6=E5=88=86=E6=9E=90=E6=8A=A5=E8=A1=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/biz/session.go | 52 +++++++++++++++++++++----------- internal/server/router/router.go | 2 +- internal/services/session.go | 17 +++++++++++ 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/internal/biz/session.go b/internal/biz/session.go index a42e9c0..d8b45d8 100644 --- a/internal/biz/session.go +++ b/internal/biz/session.go @@ -35,41 +35,31 @@ func NewSessionBiz(conf *config.Config, sessionImpl *impl.SessionImpl, sysImpl * func (s *SessionBiz) SessionInit(ctx context.Context, req *entitys.SessionInitRequest) (result *entitys.SessionInitResponse, err error) { // 获取系统配置 - sysConfig, has, err := s.sysRepo.FindOne(s.sysRepo.WithSysId(req.SysId)) + sysConfig, err := s.GetSysConfig(req.SysId) if err != nil { return - } else if !has { - err = errorcode.SysNotFound - return } - result = &entitys.SessionInitResponse{ Chat: make([]entitys.ChatHistory, 0), } - // 获取 当天的session + // 获取 当天的最新session t := time.Now().Truncate(24 * time.Hour) session, has, err := s.sessionRepo.FindOne( s.sessionRepo.WithUserId(req.UserId), // 条件:用户ID s.sessionRepo.WithStartTime(t), // 条件:会话开始时间 - s.sysRepo.WithSysId(sysConfig.SysID), // 条件:系统ID + s.sysRepo.WithSysId(sysConfig.SysID), + s.sessionRepo.OrderByDesc("create_at"), // 条件:系统ID ) if err != nil { return - } else if !has { + } + if !has { // 不存在,创建一个 - session = model.AiSession{ - SysID: sysConfig.SysID, - SessionID: utils.UUID(), - UserID: req.UserId, - UserName: req.UserName, - DingUserId: req.DingUserId, - } - err = s.sessionRepo.Create(&session) + session, err = s.CreateNew(sysConfig.SysID, req) if err != nil { - return + return nil, err } - chat := entitys.ChatHistory{ SessionID: session.SessionID, Role: constants.RoleSystem, @@ -122,6 +112,32 @@ func (s *SessionBiz) SessionInit(ctx context.Context, req *entitys.SessionInitRe return } +func (s *SessionBiz) GetSysConfig(sysId string) (model.AiSy, error) { + sysConfig, has, err := s.sysRepo.FindOne(s.sysRepo.WithSysId(sysId)) + if err != nil { + return sysConfig, err + } else if !has { + err = errorcode.SysNotFound + return sysConfig, err + } + return sysConfig, nil +} + +func (s *SessionBiz) CreateNew(sysID int32, req *entitys.SessionInitRequest) (model.AiSession, error) { + session := model.AiSession{ + SysID: sysID, + SessionID: utils.UUID(), + UserID: req.UserId, + UserName: req.UserName, + DingUserId: req.DingUserId, + } + err := s.sessionRepo.Create(&session) + if err != nil { + return session, err + } + return session, nil +} + // SessionList 会话列表 func (s *SessionBiz) SessionList(ctx context.Context, req *entitys.SessionListRequest) (list []model.AiSession, err error) { diff --git a/internal/server/router/router.go b/internal/server/router/router.go index 6285222..fec3d88 100644 --- a/internal/server/router/router.go +++ b/internal/server/router/router.go @@ -56,7 +56,7 @@ func SetupRoutes(app *fiber.App, ChatService *services.ChatService, sessionServi c.Response().SetBody([]byte("1")) return nil }) - + r.Post("/session/new", sessionService.NewSession) r.Post("/session/init", sessionService.SessionInit) // 会话初始化,不存在则创建,存在则返回会话ID和默认条数会话历史 r.Post("/session/list", sessionService.SessionList) diff --git a/internal/services/session.go b/internal/services/session.go index 6820fe5..d058d17 100644 --- a/internal/services/session.go +++ b/internal/services/session.go @@ -35,6 +35,23 @@ func (s *SessionService) SessionInit(c *fiber.Ctx) error { return c.JSON(result) } +// NewSession 新会话 +func (s *SessionService) NewSession(c *fiber.Ctx) error { + req := &entitys.SessionInitRequest{} + if err := c.BodyParser(req); err != nil { + return err + } + + sysConfig, err := s.sessionBiz.GetSysConfig(req.SysId) + + if err != nil { + return err + } + session, err := s.sessionBiz.CreateNew(sysConfig.SysID, req) + + return c.JSON(session) +} + // SessionList 获取会话列表 func (s *SessionService) SessionList(c *fiber.Ctx) error { req := &entitys.SessionListRequest{}